aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-12-18 14:48:15 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-18 21:17:46 +0000
commitf5d8758f29390fd5c135df12bc8a5e196854eda2 (patch)
treea7de0b54b030dda4549bc9feb0a0e2ff65ded7d6 /src/gpu/vk
parent4fafedd33add9948db1147c60d681ed9340984fd (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.cpp54
-rw-r--r--src/gpu/vk/GrVkCaps.h2
-rw-r--r--src/gpu/vk/GrVkGpu.cpp1
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;
}
+