diff options
author | 2017-12-18 14:48:15 -0500 | |
---|---|---|
committer | 2017-12-18 21:17:46 +0000 | |
commit | f5d8758f29390fd5c135df12bc8a5e196854eda2 (patch) | |
tree | a7de0b54b030dda4549bc9feb0a0e2ff65ded7d6 /src/gpu/vk | |
parent | 4fafedd33add9948db1147c60d681ed9340984fd (diff) |
Add new SkImage factory to create from GrBackendTexture with SkColorType
Bug: skia:
Change-Id: I46bdc54b6d9cdacc8f5a06644aa6b110837879f0
Reviewed-on: https://skia-review.googlesource.com/84342
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/vk')
-rw-r--r-- | src/gpu/vk/GrVkCaps.cpp | 54 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCaps.h | 2 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 1 |
3 files changed, 57 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp index 9e48983884..17253a0e04 100644 --- a/src/gpu/vk/GrVkCaps.cpp +++ b/src/gpu/vk/GrVkCaps.cpp @@ -6,6 +6,8 @@ */ #include "GrVkCaps.h" + +#include "GrBackendSurface.h" #include "GrRenderTargetProxy.h" #include "GrShaderCaps.h" #include "GrVkUtil.h" @@ -413,3 +415,55 @@ int GrVkCaps::getSampleCount(int requestedCount, GrPixelConfig config) const { return fConfigTable[config].fColorSampleCounts[count-1]; } +bool GrVkCaps::onValidateBackendTexture(GrBackendTexture* tex, SkColorType ct) const { + const GrVkImageInfo* imageInfo = tex->getVkImageInfo(); + if (!imageInfo) { + return false; + } + VkFormat format = imageInfo->fFormat; + tex->fConfig = kUnknown_GrPixelConfig; + + switch (ct) { + case kUnknown_SkColorType: + return false; + case kAlpha_8_SkColorType: + if (VK_FORMAT_R8_UNORM == format) { + tex->fConfig = kAlpha_8_as_Red_GrPixelConfig; + } + break; + case kRGB_565_SkColorType: + if (VK_FORMAT_R5G6B5_UNORM_PACK16 == format) { + tex->fConfig = kRGB_565_GrPixelConfig; + } + break; + case kARGB_4444_SkColorType: + if (VK_FORMAT_B4G4R4A4_UNORM_PACK16 == format) { + tex->fConfig = kRGBA_4444_GrPixelConfig; + } + break; + case kRGBA_8888_SkColorType: + if (VK_FORMAT_R8G8B8A8_UNORM == format) { + tex->fConfig = kRGBA_8888_GrPixelConfig; + } + break; + case kBGRA_8888_SkColorType: + if (VK_FORMAT_B8G8R8A8_UNORM == format) { + tex->fConfig = kBGRA_8888_GrPixelConfig; + } + break; + case kGray_8_SkColorType: + if (VK_FORMAT_R8_UNORM == format) { + tex->fConfig = kGray_8_as_Red_GrPixelConfig; + } + break; + case kRGBA_F16_SkColorType: + if (VK_FORMAT_R16G16B16A16_SFLOAT == format) { + tex->fConfig = kRGBA_half_GrPixelConfig; + } + break; + } + + return kUnknown_GrPixelConfig != tex->fConfig; +} + + diff --git a/src/gpu/vk/GrVkCaps.h b/src/gpu/vk/GrVkCaps.h index 1a6e1bd32a..8d0ab5dd8a 100644 --- a/src/gpu/vk/GrVkCaps.h +++ b/src/gpu/vk/GrVkCaps.h @@ -112,6 +112,8 @@ public: bool* rectsMustMatch, bool* disallowSubrect) const override; private: + bool onValidateBackendTexture(GrBackendTexture*, SkColorType) const override; + enum VkVendor { kAMD_VkVendor = 4098, kImagination_VkVendor = 4112, diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index 5fdf58e406..baf022185f 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -2200,3 +2200,4 @@ sk_sp<GrSemaphore> GrVkGpu::prepareTextureForCrossContextUsage(GrTexture* textur // The image layout change serves as a barrier, so no semaphore is needed return nullptr; } + |