diff options
author | Greg Daniel <egdaniel@google.com> | 2017-04-26 13:29:21 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-05-02 14:08:28 +0000 |
commit | 207282eb5ac6f009e6f736fb8e5cfcee000ee92a (patch) | |
tree | 353d63f8bb5bcbd0fd8c8ce3e3bebcf7ee1ab220 | |
parent | f6782442ba2aff9a0b18078e154c7bcc0a434abd (diff) |
Make GrBackendTexture take Gr*Info refs in ctor, and copy them.
Bug: skia:
Change-Id: Ic05d3384fa07560fc18c52bb8ae03541a72515f7
Reviewed-on: https://skia-review.googlesource.com/14374
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
-rw-r--r-- | gm/rectangletexture.cpp | 2 | ||||
-rw-r--r-- | include/gpu/GrBackendSurface.h | 13 | ||||
-rw-r--r-- | src/gpu/GrBackendSurface.cpp | 29 | ||||
-rw-r--r-- | src/image/SkImage_Gpu.cpp | 4 | ||||
-rw-r--r-- | tests/EGLImageTest.cpp | 2 | ||||
-rw-r--r-- | tests/RectangleTextureTest.cpp | 2 | ||||
-rw-r--r-- | tests/VkWrapTests.cpp | 8 | ||||
-rw-r--r-- | tools/gpu/GrTest.cpp | 4 | ||||
-rw-r--r-- | tools/viewer/sk_app/VulkanWindowContext.cpp | 2 |
9 files changed, 34 insertions, 32 deletions
diff --git a/gm/rectangletexture.cpp b/gm/rectangletexture.cpp index 5b3dc224e2..c71a51c6b6 100644 --- a/gm/rectangletexture.cpp +++ b/gm/rectangletexture.cpp @@ -109,7 +109,7 @@ protected: info.fID = id; info.fTarget = TARGET; - GrBackendTexture rectangleTex(width, height, kRGBA_8888_GrPixelConfig, &info); + GrBackendTexture rectangleTex(width, height, kRGBA_8888_GrPixelConfig, info); if (sk_sp<SkImage> image = SkImage::MakeFromAdoptedTexture(context, rectangleTex, kTopLeft_GrSurfaceOrigin)) { diff --git a/include/gpu/GrBackendSurface.h b/include/gpu/GrBackendSurface.h index d9302dafc2..232f220282 100644 --- a/include/gpu/GrBackendSurface.h +++ b/include/gpu/GrBackendSurface.h @@ -14,18 +14,14 @@ class GrBackendTexture { public: - // The passed in GrVkImageInfo must live until the GrBackendTexture is no longer used in - // creation of SkImages or SkSurfaces. GrBackendTexture(int width, int height, - const GrVkImageInfo* vkInfo); + const GrVkImageInfo& vkInfo); - // The passed in GrGLTextureInfo must live until the GrBackendTexture is no longer used in - // creation of SkImages or SkSurfaces. GrBackendTexture(int width, int height, GrPixelConfig config, - const GrGLTextureInfo* glInfo); + const GrGLTextureInfo& glInfo); int width() const { return fWidth; } int height() const { return fHeight; } @@ -54,9 +50,8 @@ private: GrBackend fBackend; union { - const GrVkImageInfo* fVkInfo; - const GrGLTextureInfo* fGLInfo; - GrBackendObject fHandle; + GrVkImageInfo fVkInfo; + GrGLTextureInfo fGLInfo; }; }; diff --git a/src/gpu/GrBackendSurface.cpp b/src/gpu/GrBackendSurface.cpp index 0c205a91fc..63044759d4 100644 --- a/src/gpu/GrBackendSurface.cpp +++ b/src/gpu/GrBackendSurface.cpp @@ -14,12 +14,12 @@ GrBackendTexture::GrBackendTexture(int width, int height, - const GrVkImageInfo* vkInfo) + const GrVkImageInfo& vkInfo) : fWidth(width) , fHeight(height) , fConfig( #ifdef SK_VULKAN - GrVkFormatToPixelConfig(vkInfo->fFormat) + GrVkFormatToPixelConfig(vkInfo.fFormat) #else kUnknown_GrPixelConfig #endif @@ -30,7 +30,7 @@ GrBackendTexture::GrBackendTexture(int width, GrBackendTexture::GrBackendTexture(int width, int height, GrPixelConfig config, - const GrGLTextureInfo* glInfo) + const GrGLTextureInfo& glInfo) : fWidth(width) , fHeight(height) , fConfig(config) @@ -40,26 +40,33 @@ GrBackendTexture::GrBackendTexture(int width, GrBackendTexture::GrBackendTexture(const GrBackendTextureDesc& desc, GrBackend backend) : fWidth(desc.fWidth) , fHeight(desc.fHeight) - , fConfig(kVulkan_GrBackend == backend + , fConfig(desc.fConfig) + , fBackend(backend) { + if (kOpenGL_GrBackend == backend) { + fGLInfo = *reinterpret_cast<const GrGLTextureInfo*>(desc.fTextureHandle); + } else { + SkASSERT(kVulkan_GrBackend == backend); #ifdef SK_VULKAN - ? GrVkFormatToPixelConfig(((GrVkImageInfo*)desc.fTextureHandle)->fFormat) + const GrVkImageInfo* vkInfo = + reinterpret_cast<const GrVkImageInfo*>(desc.fTextureHandle); + fConfig = GrVkFormatToPixelConfig(vkInfo->fFormat); + fVkInfo = *vkInfo; #else - ? kUnknown_GrPixelConfig + fConfig = kUnknown_GrPixelConfig; #endif - : desc.fConfig) - , fBackend(backend) - , fHandle(desc.fTextureHandle) {} + } +} const GrVkImageInfo* GrBackendTexture::getVkImageInfo() const { if (kVulkan_GrBackend == fBackend) { - return fVkInfo; + return &fVkInfo; } return nullptr; } const GrGLTextureInfo* GrBackendTexture::getGLTextureInfo() const { if (kOpenGL_GrBackend == fBackend) { - return fGLInfo; + return &fGLInfo; } return nullptr; } diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index 68127f2297..2c7a194444 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -315,11 +315,11 @@ static GrBackendTexture make_backend_texture_from_handle(GrBackend backend, if (kOpenGL_GrBackend == backend) { GrGLTextureInfo* glInfo = (GrGLTextureInfo*)(handle); - return GrBackendTexture(width, height, config, glInfo); + return GrBackendTexture(width, height, config, *glInfo); } else { SkASSERT(kVulkan_GrBackend == backend); GrVkImageInfo* vkInfo = (GrVkImageInfo*)(handle); - return GrBackendTexture(width, height, vkInfo); + return GrBackendTexture(width, height, *vkInfo); } } diff --git a/tests/EGLImageTest.cpp b/tests/EGLImageTest.cpp index 1b94a6e602..ae66db5c19 100644 --- a/tests/EGLImageTest.cpp +++ b/tests/EGLImageTest.cpp @@ -130,7 +130,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(EGLImageTest, reporter, ctxInfo) { externalTexture.fID = glCtx0->eglImageToExternalTexture(image); // Wrap this texture ID in a GrTexture - GrBackendTexture backendTex(kSize, kSize, kRGBA_8888_GrPixelConfig, &externalTexture); + GrBackendTexture backendTex(kSize, kSize, kRGBA_8888_GrPixelConfig, externalTexture); // TODO: If I make this TopLeft origin to match resolve_origin calls for kDefault, this test // fails on the Nexus5. Why? diff --git a/tests/RectangleTextureTest.cpp b/tests/RectangleTextureTest.cpp index cdcd8d7ac6..9c85ad4522 100644 --- a/tests/RectangleTextureTest.cpp +++ b/tests/RectangleTextureTest.cpp @@ -119,7 +119,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(RectangleTexture, reporter, ctxInfo) { rectangleInfo.fID = rectTexID; rectangleInfo.fTarget = GR_GL_TEXTURE_RECTANGLE; - GrBackendTexture rectangleTex(kWidth, kHeight, kRGBA_8888_GrPixelConfig, &rectangleInfo); + GrBackendTexture rectangleTex(kWidth, kHeight, kRGBA_8888_GrPixelConfig, rectangleInfo); GrColor refPixels[kWidth * kHeight]; for (int y = 0; y < kHeight; ++y) { diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp index 0ae3402da2..fc19bb33ef 100644 --- a/tests/VkWrapTests.cpp +++ b/tests/VkWrapTests.cpp @@ -33,7 +33,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) { false); const GrVkImageInfo* imageInfo = reinterpret_cast<const GrVkImageInfo*>(backendObj); - GrBackendTexture backendTex = GrBackendTexture(kW, kH, imageInfo); + GrBackendTexture backendTex = GrBackendTexture(kW, kH, *imageInfo); sk_sp<GrTexture> tex = gpu->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin, kNone_GrBackendTextureFlag, @@ -44,7 +44,7 @@ void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) { // image is null GrVkImageInfo backendCopy = *imageInfo; backendCopy.fImage = VK_NULL_HANDLE; - backendTex = GrBackendTexture(kW, kH, &backendCopy); + backendTex = GrBackendTexture(kW, kH, backendCopy); tex = gpu->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin, kNone_GrBackendTextureFlag, @@ -125,7 +125,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) { true); const GrVkImageInfo* imageInfo = reinterpret_cast<const GrVkImageInfo*>(backendObj); - GrBackendTexture backendTex = GrBackendTexture(kW, kH, imageInfo); + GrBackendTexture backendTex = GrBackendTexture(kW, kH, *imageInfo); sk_sp<GrTexture> tex = gpu->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin, kRenderTarget_GrBackendTextureFlag, @@ -136,7 +136,7 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) { // image is null GrVkImageInfo backendCopy = *imageInfo; backendCopy.fImage = VK_NULL_HANDLE; - backendTex = GrBackendTexture(kW, kH, &backendCopy); + backendTex = GrBackendTexture(kW, kH, backendCopy); tex = gpu->wrapBackendTexture(backendTex, kTopLeft_GrSurfaceOrigin, kRenderTarget_GrBackendTextureFlag, diff --git a/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp index 7fe9a43f28..f5459b1bba 100644 --- a/tools/gpu/GrTest.cpp +++ b/tools/gpu/GrTest.cpp @@ -60,11 +60,11 @@ GrBackendTexture CreateBackendTexture(GrBackend backend, int width, int height, GrPixelConfig config, GrBackendObject handle) { if (kOpenGL_GrBackend == backend) { GrGLTextureInfo* glInfo = (GrGLTextureInfo*)(handle); - return GrBackendTexture(width, height, config, glInfo); + return GrBackendTexture(width, height, config, *glInfo); } else { SkASSERT(kVulkan_GrBackend == backend); GrVkImageInfo* vkInfo = (GrVkImageInfo*)(handle); - return GrBackendTexture(width, height, vkInfo); + return GrBackendTexture(width, height, *vkInfo); } } }; diff --git a/tools/viewer/sk_app/VulkanWindowContext.cpp b/tools/viewer/sk_app/VulkanWindowContext.cpp index f483c27163..809c6142ac 100644 --- a/tools/viewer/sk_app/VulkanWindowContext.cpp +++ b/tools/viewer/sk_app/VulkanWindowContext.cpp @@ -274,7 +274,7 @@ void VulkanWindowContext::createBuffers(VkFormat format) { info.fFormat = format; info.fLevelCount = 1; - GrBackendTexture backendTex(fWidth, fHeight, &info); + GrBackendTexture backendTex(fWidth, fHeight, info); fSurfaces[i] = SkSurface::MakeFromBackendTextureAsRenderTarget(fContext, backendTex, kTopLeft_GrSurfaceOrigin, |