aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-12-13 10:20:04 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-13 15:46:12 +0000
commit81b8059d8b8c87aed19f773a4cc59f4528122d67 (patch)
tree496e34e60bf5d28ac7f30a27aa6a5fc42cae041c
parentc25db637532cd10dde7855d868c0d033e96f61f2 (diff)
Start removing uses of VkFormatToPixelConfig in vulkan backend
Bug: skia: Change-Id: I2c8e86b9e8ca6a33913be347a3c65af963c5fd12 Reviewed-on: https://skia-review.googlesource.com/84341 Commit-Queue: Greg Daniel <egdaniel@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>
-rw-r--r--src/gpu/vk/GrVkGpu.cpp4
-rw-r--r--src/gpu/vk/GrVkImage.cpp2
-rw-r--r--src/gpu/vk/GrVkUtil.cpp57
-rw-r--r--src/gpu/vk/GrVkUtil.h7
-rw-r--r--tools/sk_app/VulkanWindowContext.cpp8
5 files changed, 71 insertions, 7 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.
diff --git a/tools/sk_app/VulkanWindowContext.cpp b/tools/sk_app/VulkanWindowContext.cpp
index 35177494f7..711791df18 100644
--- a/tools/sk_app/VulkanWindowContext.cpp
+++ b/tools/sk_app/VulkanWindowContext.cpp
@@ -185,10 +185,10 @@ bool VulkanWindowContext::createSwapchain(int width, int height,
auto srgbColorSpace = SkColorSpace::MakeSRGB();
bool wantSRGB = srgbColorSpace == params.fColorSpace;
for (uint32_t i = 0; i < surfaceFormatCount; ++i) {
- GrPixelConfig config = GrVkFormatToPixelConfig(surfaceFormats[i].format);
- if (kUnknown_GrPixelConfig != config &&
- GrPixelConfigIsSRGB(config) == wantSRGB) {
- surfaceFormat = surfaceFormats[i].format;
+ VkFormat localFormat = surfaceFormats[i].format;
+ if (GrVkFormatIsSupported(localFormat) &&
+ GrVkFormatIsSRGB(localFormat, nullptr) == wantSRGB) {
+ surfaceFormat = localFormat;
colorSpace = surfaceFormats[i].colorSpace;
break;
}