From 34aa059c1502d67c9a5f4db449667a8709b69fb9 Mon Sep 17 00:00:00 2001 From: Ethan Nicholas Date: Tue, 3 Jul 2018 16:38:32 +0000 Subject: Revert "Remove setting/use of GrPixelConfig in GrBackendTex/RT ctors." This reverts commit ff2181e62e79ffd2ce628fc8c05b5457d4f54163. Reason for revert: suspect it's behind Chrome roll failure Original change's description: > Remove setting/use of GrPixelConfig in GrBackendTex/RT ctors. > > Bug: skia: > Change-Id: I1466668e3502cd1e6e1f6aed4105e0f626d293dd > Reviewed-on: https://skia-review.googlesource.com/138987 > Commit-Queue: Greg Daniel > Reviewed-by: Robert Phillips TBR=egdaniel@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: I4cba44858aafffbadc45e18349b93c741d7cfc66 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: skia: Reviewed-on: https://skia-review.googlesource.com/139220 Reviewed-by: Ethan Nicholas Commit-Queue: Ethan Nicholas --- src/gpu/GrAHardwareBufferImageGenerator.cpp | 4 +-- src/gpu/GrBackendSurface.cpp | 48 ++++++++++++++++++++++++++--- src/gpu/gl/GrGLGpu.cpp | 12 ++------ src/gpu/gl/GrGLUtil.cpp | 37 ++++++++++++++++++++++ src/gpu/gl/GrGLUtil.h | 2 ++ src/gpu/vk/GrVkGpu.cpp | 12 ++------ src/gpu/vk/GrVkUtil.cpp | 34 ++++++++++++++++++++ src/gpu/vk/GrVkUtil.h | 5 +++ 8 files changed, 127 insertions(+), 27 deletions(-) (limited to 'src/gpu') diff --git a/src/gpu/GrAHardwareBufferImageGenerator.cpp b/src/gpu/GrAHardwareBufferImageGenerator.cpp index 40be392230..e3ae782d9a 100644 --- a/src/gpu/GrAHardwareBufferImageGenerator.cpp +++ b/src/gpu/GrAHardwareBufferImageGenerator.cpp @@ -213,14 +213,12 @@ sk_sp GrAHardwareBufferImageGenerator::makeProxy(GrContext* cont return nullptr; } - GrBackendTexture backendTex(getInfo().width(), getInfo().height(), GrMipMapped::kNo, - textureInfo); + GrBackendTexture backendTex(getInfo().width(), getInfo().height(), pixelConfig, textureInfo); if (backendTex.width() <= 0 || backendTex.height() <= 0) { glDeleteTextures(1, &texID); eglDestroyImageKHR(display, image); return nullptr; } - backendTex.fConfig = pixelConfig; sk_sp tex = context->contextPriv().resourceProvider()->wrapBackendTexture( backendTex, kAdopt_GrWrapOwnership); if (!tex) { diff --git a/src/gpu/GrBackendSurface.cpp b/src/gpu/GrBackendSurface.cpp index 7e10cb20a2..9977555093 100644 --- a/src/gpu/GrBackendSurface.cpp +++ b/src/gpu/GrBackendSurface.cpp @@ -96,7 +96,7 @@ GrBackendTexture::GrBackendTexture(int width, : fIsValid(true) , fWidth(width) , fHeight(height) - , fConfig(kUnknown_GrPixelConfig) + , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat)) , fMipMapped(GrMipMapped(vkInfo.fLevelCount > 1)) , fBackend(kVulkan_GrBackend) , fVkInfo(vkInfo, layout.release()) { @@ -117,6 +117,28 @@ GrBackendTexture::GrBackendTexture(int width, , fMtlInfo(mtlInfo) {} #endif +#if GR_TEST_UTILS + +GrBackendTexture::GrBackendTexture(int width, + int height, + GrPixelConfig config, + const GrGLTextureInfo& glInfo) + : GrBackendTexture(width, height, config, GrMipMapped::kNo, glInfo) {} + +GrBackendTexture::GrBackendTexture(int width, + int height, + GrPixelConfig config, + GrMipMapped mipMapped, + const GrGLTextureInfo& glInfo) + : fIsValid(true) + , fWidth(width) + , fHeight(height) + , fConfig(config) + , fMipMapped(mipMapped) + , fBackend(kOpenGL_GrBackend) + , fGLInfo(glInfo) {} +#endif + GrBackendTexture::GrBackendTexture(int width, int height, GrMipMapped mipMapped, @@ -124,7 +146,7 @@ GrBackendTexture::GrBackendTexture(int width, : fIsValid(true) , fWidth(width) , fHeight(height) - , fConfig(kUnknown_GrPixelConfig) + , fConfig(GrGLSizedFormatToPixelConfig(glInfo.fFormat)) , fMipMapped(mipMapped) , fBackend(kOpenGL_GrBackend) , fGLInfo(glInfo) {} @@ -312,7 +334,7 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width, , fHeight(height) , fSampleCnt(SkTMax(1, sampleCnt)) , fStencilBits(0) // We always create stencil buffers internally for vulkan - , fConfig(kUnknown_GrPixelConfig) + , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat)) , fBackend(kVulkan_GrBackend) , fVkInfo(vkInfo, layout.release()) {} #endif @@ -332,6 +354,24 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width, , fMtlInfo(mtlInfo) {} #endif +#if GR_TEST_UTILS + +GrBackendRenderTarget::GrBackendRenderTarget(int width, + int height, + int sampleCnt, + int stencilBits, + GrPixelConfig config, + const GrGLFramebufferInfo& glInfo) + : fIsValid(true) + , fWidth(width) + , fHeight(height) + , fSampleCnt(SkTMax(1, sampleCnt)) + , fStencilBits(stencilBits) + , fConfig(config) + , fBackend(kOpenGL_GrBackend) + , fGLInfo(glInfo) {} +#endif + GrBackendRenderTarget::GrBackendRenderTarget(int width, int height, int sampleCnt, @@ -342,7 +382,7 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width, , fHeight(height) , fSampleCnt(SkTMax(1, sampleCnt)) , fStencilBits(stencilBits) - , fConfig(kUnknown_GrPixelConfig) + , fConfig(GrGLSizedFormatToPixelConfig(glInfo.fFormat)) , fBackend(kOpenGL_GrBackend) , fGLInfo(glInfo) {} diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index 58aad4d18e..d5c3cc3de2 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -3975,11 +3975,7 @@ GrBackendTexture GrGLGpu::createTestingOnlyBackendTexture(const void* pixels, in // unbind the texture from the texture unit to avoid asserts GL_CALL(BindTexture(info.fTarget, 0)); - GrBackendTexture beTex = GrBackendTexture(w, h, mipMapped, info); - // Lots of tests don't go through Skia's public interface which will set the config so for - // testing we make sure we set a config here. - beTex.setPixelConfig(config); - return beTex; + return GrBackendTexture(w, h, mipMapped, info); } bool GrGLGpu::isTestingOnlyBackendTexture(const GrBackendTexture& tex) const { @@ -4073,11 +4069,7 @@ GrBackendRenderTarget GrGLGpu::createTestingOnlyBackendRenderTarget(int w, int h return {}; } auto stencilBits = SkToInt(this->glCaps().stencilFormats()[sFormatIdx].fStencilBits); - GrBackendRenderTarget beRT = GrBackendRenderTarget(w, h, 1, stencilBits, info); - // Lots of tests don't go through Skia's public interface which will set the config so for - // testing we make sure we set a config here. - beRT.setPixelConfig(config); - return beRT; + return {w, h, 1, stencilBits, config, info}; } void GrGLGpu::deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget& backendRT) { diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp index 3732b481a9..e785c1e2f6 100644 --- a/src/gpu/gl/GrGLUtil.cpp +++ b/src/gpu/gl/GrGLUtil.cpp @@ -532,3 +532,40 @@ GrGLenum GrToGLStencilFunc(GrStencilTest test) { return gTable[(int)test]; } +GrPixelConfig GrGLSizedFormatToPixelConfig(GrGLenum sizedFormat) { + switch (sizedFormat) { + case GR_GL_R8: + return kAlpha_8_as_Red_GrPixelConfig; + case GR_GL_ALPHA8: + return kAlpha_8_as_Alpha_GrPixelConfig; + case GR_GL_RGBA8: + return kRGBA_8888_GrPixelConfig; + case GR_GL_RGB8: + return kRGB_888_GrPixelConfig; + case GR_GL_BGRA8: + return kBGRA_8888_GrPixelConfig; + case GR_GL_SRGB8_ALPHA8: + return kSRGBA_8888_GrPixelConfig; + case GR_GL_RGB565: + return kRGB_565_GrPixelConfig; + case GR_GL_RGB5: + return kRGB_565_GrPixelConfig; + case GR_GL_RGBA4: + return kRGBA_4444_GrPixelConfig; + case GR_GL_RGB10_A2: + return kRGBA_1010102_GrPixelConfig; + case GR_GL_LUMINANCE8: + return kGray_8_GrPixelConfig; + case GR_GL_RGBA32F: + return kRGBA_float_GrPixelConfig; + case GR_GL_RG32F: + return kRG_float_GrPixelConfig; + case GR_GL_R16F: + return kAlpha_half_as_Red_GrPixelConfig; + case GR_GL_RGBA16F: + return kRGBA_half_GrPixelConfig; + default: + return kUnknown_GrPixelConfig; + } +} + diff --git a/src/gpu/gl/GrGLUtil.h b/src/gpu/gl/GrGLUtil.h index 909c8fd7d5..039c1eea78 100644 --- a/src/gpu/gl/GrGLUtil.h +++ b/src/gpu/gl/GrGLUtil.h @@ -256,4 +256,6 @@ void GrGLClearErr(const GrGLInterface* gl); GrGLenum GrToGLStencilFunc(GrStencilTest test); +GrPixelConfig GrGLSizedFormatToPixelConfig(GrGLenum sizedFormat); + #endif diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index ed45c55758..ba1f7caf2d 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -1359,11 +1359,7 @@ GrBackendTexture GrVkGpu::createTestingOnlyBackendTexture(const void* srcData, i &info)) { return {}; } - GrBackendTexture beTex = GrBackendTexture(w, h, info); - // Lots of tests don't go through Skia's public interface which will set the config so for - // testing we make sure we set a config here. - beTex.setPixelConfig(config); - return beTex; + return GrBackendTexture(w, h, info); } bool GrVkGpu::isTestingOnlyBackendTexture(const GrBackendTexture& tex) const { @@ -1413,11 +1409,7 @@ GrBackendRenderTarget GrVkGpu::createTestingOnlyBackendRenderTarget(int w, int h &info)) { return {}; } - GrBackendRenderTarget beRT = GrBackendRenderTarget(w, h, 1, 0, info); - // Lots of tests don't go through Skia's public interface which will set the config so for - // testing we make sure we set a config here. - beRT.setPixelConfig(config); - return beRT; + return {w, h, 1, 0, info}; } void GrVkGpu::deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget& rt) { diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp index b0aa3d4c14..2b0bba732d 100644 --- a/src/gpu/vk/GrVkUtil.cpp +++ b/src/gpu/vk/GrVkUtil.cpp @@ -75,6 +75,40 @@ bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format) { return false; } +GrPixelConfig GrVkFormatToPixelConfig(VkFormat format) { + switch (format) { + case VK_FORMAT_R8G8B8A8_UNORM: + return kRGBA_8888_GrPixelConfig; + case VK_FORMAT_B8G8R8A8_UNORM: + return kBGRA_8888_GrPixelConfig; + case VK_FORMAT_R8G8B8A8_SRGB: + return kSRGBA_8888_GrPixelConfig; + case VK_FORMAT_B8G8R8A8_SRGB: + return kSBGRA_8888_GrPixelConfig; + case VK_FORMAT_A2B10G10R10_UNORM_PACK32: + return kRGBA_1010102_GrPixelConfig; + case VK_FORMAT_R5G6B5_UNORM_PACK16: + return kRGB_565_GrPixelConfig; + break; + case VK_FORMAT_B4G4R4A4_UNORM_PACK16: + // R4G4B4A4 is not required to be supported so we actually + // store RGBA_4444 data as B4G4R4A4. + return kRGBA_4444_GrPixelConfig; + case VK_FORMAT_R8_UNORM: + return kAlpha_8_GrPixelConfig; + case VK_FORMAT_R32G32B32A32_SFLOAT: + return kRGBA_float_GrPixelConfig; + case VK_FORMAT_R32G32_SFLOAT: + return kRG_float_GrPixelConfig; + case VK_FORMAT_R16G16B16A16_SFLOAT: + return kRGBA_half_GrPixelConfig; + case VK_FORMAT_R16_SFLOAT: + return kAlpha_half_GrPixelConfig; + default: + return kUnknown_GrPixelConfig; + } +} + bool GrVkFormatPixelConfigPairIsValid(VkFormat format, GrPixelConfig config) { switch (format) { case VK_FORMAT_R8G8B8A8_UNORM: diff --git a/src/gpu/vk/GrVkUtil.h b/src/gpu/vk/GrVkUtil.h index 7c56c6941f..71cc5d4e6a 100644 --- a/src/gpu/vk/GrVkUtil.h +++ b/src/gpu/vk/GrVkUtil.h @@ -33,6 +33,11 @@ class GrVkGpu; */ bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format); +/** +* Returns the GrPixelConfig for the given vulkan texture format +*/ +GrPixelConfig GrVkFormatToPixelConfig(VkFormat format); + bool GrVkFormatIsSupported(VkFormat); /** -- cgit v1.2.3