diff options
Diffstat (limited to 'src/gpu/vk')
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 4 | ||||
-rw-r--r-- | src/gpu/vk/GrVkImage.cpp | 2 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUtil.cpp | 57 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUtil.h | 7 |
4 files changed, 67 insertions, 3 deletions
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index 319e188ab3..5fdf58e406 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -898,7 +898,7 @@ static bool check_backend_texture(const GrBackendTexture& backendTex, return false; } - SkASSERT(config == GrVkFormatToPixelConfig(info->fFormat)); + SkASSERT(GrVkFormatPixelConfigPairIsValid(info->fFormat, config)); return true; } @@ -1072,7 +1072,7 @@ void GrVkGpu::generateMipmap(GrVkTexture* tex, GrSurfaceOrigin texOrigin) { } // setup memory barrier - SkASSERT(kUnknown_GrPixelConfig != GrVkFormatToPixelConfig(tex->imageFormat())); + SkASSERT(GrVkFormatIsSupported(tex->imageFormat())); VkImageAspectFlags aspectFlags = VK_IMAGE_ASPECT_COLOR_BIT; VkImageMemoryBarrier imageMemoryBarrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType diff --git a/src/gpu/vk/GrVkImage.cpp b/src/gpu/vk/GrVkImage.cpp index c3a47dcfdc..d23ebfe360 100644 --- a/src/gpu/vk/GrVkImage.cpp +++ b/src/gpu/vk/GrVkImage.cpp @@ -20,7 +20,7 @@ VkImageAspectFlags vk_format_to_aspect_flags(VkFormat format) { case VK_FORMAT_D32_SFLOAT_S8_UINT: return VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; default: - SkASSERT(kUnknown_GrPixelConfig != GrVkFormatToPixelConfig(format)); + SkASSERT(GrVkFormatIsSupported(format)); return VK_IMAGE_ASPECT_COLOR_BIT; } } diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp index 1b206050c7..cb0046e58c 100644 --- a/src/gpu/vk/GrVkUtil.cpp +++ b/src/gpu/vk/GrVkUtil.cpp @@ -106,6 +106,63 @@ GrPixelConfig GrVkFormatToPixelConfig(VkFormat format) { } } +bool GrVkFormatPixelConfigPairIsValid(VkFormat format, GrPixelConfig config) { + switch (format) { + case VK_FORMAT_R8G8B8A8_UNORM: + return kRGBA_8888_GrPixelConfig == config; + case VK_FORMAT_B8G8R8A8_UNORM: + return kBGRA_8888_GrPixelConfig == config; + case VK_FORMAT_R8G8B8A8_SRGB: + return kSRGBA_8888_GrPixelConfig == config; + case VK_FORMAT_B8G8R8A8_SRGB: + return kSBGRA_8888_GrPixelConfig == config; + case VK_FORMAT_R8G8B8A8_SINT: + return kRGBA_8888_sint_GrPixelConfig == config; + case VK_FORMAT_R5G6B5_UNORM_PACK16: + return kRGB_565_GrPixelConfig == config; + 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 == config; + case VK_FORMAT_R8_UNORM: + return kAlpha_8_GrPixelConfig == config || + kAlpha_8_as_Red_GrPixelConfig == config || + kGray_8_GrPixelConfig == config || + kGray_8_as_Red_GrPixelConfig == config; + case VK_FORMAT_R32G32B32A32_SFLOAT: + return kRGBA_float_GrPixelConfig == config; + case VK_FORMAT_R32G32_SFLOAT: + return kRG_float_GrPixelConfig == config; + case VK_FORMAT_R16G16B16A16_SFLOAT: + return kRGBA_half_GrPixelConfig == config; + case VK_FORMAT_R16_SFLOAT: + return kAlpha_half_GrPixelConfig == config || + kAlpha_half_as_Red_GrPixelConfig == config; + default: + return false; + } +} + +bool GrVkFormatIsSupported(VkFormat format) { + switch (format) { + case VK_FORMAT_R8G8B8A8_UNORM: + case VK_FORMAT_B8G8R8A8_UNORM: + case VK_FORMAT_R8G8B8A8_SRGB: + case VK_FORMAT_B8G8R8A8_SRGB: + case VK_FORMAT_R8G8B8A8_SINT: + case VK_FORMAT_R5G6B5_UNORM_PACK16: + case VK_FORMAT_B4G4R4A4_UNORM_PACK16: + case VK_FORMAT_R8_UNORM: + case VK_FORMAT_R32G32B32A32_SFLOAT: + case VK_FORMAT_R32G32_SFLOAT: + case VK_FORMAT_R16G16B16A16_SFLOAT: + case VK_FORMAT_R16_SFLOAT: + return true; + default: + return false; + } +} + bool GrVkFormatIsSRGB(VkFormat format, VkFormat* linearFormat) { VkFormat linearFmt = format; switch (format) { diff --git a/src/gpu/vk/GrVkUtil.h b/src/gpu/vk/GrVkUtil.h index 72ed483d81..01688c8486 100644 --- a/src/gpu/vk/GrVkUtil.h +++ b/src/gpu/vk/GrVkUtil.h @@ -37,6 +37,13 @@ bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format); */ GrPixelConfig GrVkFormatToPixelConfig(VkFormat format); +bool GrVkFormatIsSupported(VkFormat); + +/** + * Returns true if the passed in VkFormat and GrPixelConfig are compatible with each other. + */ +bool GrVkFormatPixelConfigPairIsValid(VkFormat, GrPixelConfig); + /** * Returns true if the given vulkan texture format is sRGB encoded. * Also provides the non-sRGB version, if there is one. |