Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac2d232f authored by Greg Daniel's avatar Greg Daniel
Browse files

Update to use GrBackendTexture/RT instead of Descriptors

Test: manual testing

Change-Id: Ide727a39e2c49f226c8d432608e0072214249451
parent bef05673
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include "LayerDrawable.h"
#include "VkLayer.h"

#include "GrBackendSurface.h"
#include "SkColorFilter.h"
#include "SkSurface.h"
#include "gl/GrGLTypes.h"
@@ -46,13 +47,10 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer
        GrGLTextureInfo externalTexture;
        externalTexture.fTarget = glLayer->getRenderTarget();
        externalTexture.fID = glLayer->getTextureId();
        GrBackendTextureDesc textureDescription;
        textureDescription.fWidth = glLayer->getWidth();
        textureDescription.fHeight = glLayer->getHeight();
        textureDescription.fConfig = kRGBA_8888_GrPixelConfig;
        textureDescription.fOrigin = kTopLeft_GrSurfaceOrigin;
        textureDescription.fTextureHandle = reinterpret_cast<GrBackendObject>(&externalTexture);
        layerImage = SkImage::MakeFromTexture(context, textureDescription);
        GrBackendTexture backendTexture(glLayer->getWidth(), glLayer->getHeight(),
                kRGBA_8888_GrPixelConfig, externalTexture);
        layerImage = SkImage::MakeFromTexture(context, backendTexture, kTopLeft_GrSurfaceOrigin,
                kPremul_SkAlphaType, nullptr);
    } else {
        SkASSERT(layer->getApi() == Layer::Api::Vulkan);
        VkLayer* vkLayer = static_cast<VkLayer*>(layer);
+8 −9
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
#include "SkiaProfileRenderer.h"
#include "utils/TraceUtils.h"

#include <GrBackendSurface.h>

#include <cutils/properties.h>
#include <strings.h>

@@ -69,20 +71,17 @@ bool SkiaOpenGLPipeline::draw(const Frame& frame, const SkRect& screenDirty,
    mEglManager.damageFrame(frame, dirty);

    // setup surface for fbo0
    GrBackendRenderTargetDesc renderTargetDesc;
    renderTargetDesc.fWidth = frame.width();
    renderTargetDesc.fHeight = frame.height();
    renderTargetDesc.fConfig = kRGBA_8888_GrPixelConfig;
    renderTargetDesc.fOrigin = kBottomLeft_GrSurfaceOrigin;
    renderTargetDesc.fSampleCnt = 0;
    renderTargetDesc.fStencilBits = STENCIL_BUFFER_SIZE;
    renderTargetDesc.fRenderTargetHandle = 0;
    GrGLFramebufferInfo fboInfo;
    fboInfo.fFBOID = 0;

    GrBackendRenderTarget backendRT(frame.width(), frame.height(), 0, STENCIL_BUFFER_SIZE,
            kRGBA_8888_GrPixelConfig, fboInfo);

    SkSurfaceProps props(0, kUnknown_SkPixelGeometry);

    SkASSERT(mRenderThread.getGrContext() != nullptr);
    sk_sp<SkSurface> surface(SkSurface::MakeFromBackendRenderTarget(
            mRenderThread.getGrContext(), renderTargetDesc, &props));
            mRenderThread.getGrContext(), backendRT, kBottomLeft_GrSurfaceOrigin, nullptr, &props));

    SkiaPipeline::updateLighting(lightGeometry, lightInfo);
    renderFrame(*layerUpdateQueue, dirty, renderNodes, opaque, wideColorGamut,
+4 −7
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include "Properties.h"
#include <SkCanvas.h>
#include <SkSurface.h>
#include <GrBackendSurface.h>
#include <gl/GrGLInterface.h>
#include <gl/GrGLTypes.h>
#include <GLES2/gl2.h>
@@ -53,15 +54,11 @@ CopyResult SkiaOpenGLReadback::copyImageInto(EGLImageKHR eglImage, const Matrix4
    externalTexture.fTarget = GL_TEXTURE_EXTERNAL_OES;
    externalTexture.fID = sourceTexId;

    GrBackendTextureDesc textureDescription;
    textureDescription.fWidth = imgWidth;
    textureDescription.fHeight = imgHeight;
    textureDescription.fConfig = kRGBA_8888_GrPixelConfig;
    textureDescription.fOrigin = kTopLeft_GrSurfaceOrigin;
    textureDescription.fTextureHandle = reinterpret_cast<GrBackendObject>(&externalTexture);
    GrBackendTexture backendTexture(imgWidth, imgHeight, kRGBA_8888_GrPixelConfig, externalTexture);

    CopyResult copyResult = CopyResult::UnknownError;
    sk_sp<SkImage> image(SkImage::MakeFromAdoptedTexture(grContext.get(), textureDescription));
    sk_sp<SkImage> image(SkImage::MakeFromAdoptedTexture(grContext.get(), backendTexture,
            kTopLeft_GrSurfaceOrigin));
    if (image) {
        // convert to Skia data structures
        const SkRect bufferRect = SkRect::MakeIWH(imgWidth, imgHeight);
+3 −12
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "renderstate/RenderState.h"
#include "utils/FatVector.h"

#include <GrBackendSurface.h>
#include <GrContext.h>
#include <GrTypes.h>
#include <vk/GrVkTypes.h>
@@ -297,13 +298,9 @@ void VulkanManager::createBuffers(VulkanSurface* surface, VkFormat format, VkExt

    SkSurfaceProps props(0, kUnknown_SkPixelGeometry);

    bool wantSRGB = VK_FORMAT_R8G8B8A8_SRGB == format;
    GrPixelConfig config = wantSRGB ? kSRGBA_8888_GrPixelConfig : kRGBA_8888_GrPixelConfig;

    // set up initial image layouts and create surfaces
    surface->mImageInfos = new VulkanSurface::ImageInfo[surface->mImageCount];
    for (uint32_t i = 0; i < surface->mImageCount; ++i) {
        GrBackendRenderTargetDesc desc;
        GrVkImageInfo info;
        info.fImage = surface->mImages[i];
        info.fAlloc = { VK_NULL_HANDLE, 0, 0, 0 };
@@ -312,17 +309,11 @@ void VulkanManager::createBuffers(VulkanSurface* surface, VkFormat format, VkExt
        info.fFormat = format;
        info.fLevelCount = 1;

        desc.fWidth = extent.width;
        desc.fHeight = extent.height;
        desc.fConfig = config;
        desc.fOrigin = kTopLeft_GrSurfaceOrigin;
        desc.fSampleCnt = 0;
        desc.fStencilBits = 0;
        desc.fRenderTargetHandle = (GrBackendObject) &info;
        GrBackendRenderTarget backendRT(extent.width, extent.height, 0, 0, info);

        VulkanSurface::ImageInfo& imageInfo = surface->mImageInfos[i];
        imageInfo.mSurface = SkSurface::MakeFromBackendRenderTarget(mRenderThread.getGrContext(),
                desc, &props);
                backendRT, kTopLeft_GrSurfaceOrigin, nullptr, &props);
    }

    SkASSERT(mCommandPool != VK_NULL_HANDLE);