Revert "Revert "Add 1010102 support to Ganesh""
This reverts commit ded47a50143470d1acdafa03e878cc7da5608038.
Bug: skia:
Change-Id: I7d7552e6ccc8591cae91426407ab13b628b93b68
Reviewed-on: https://skia-review.googlesource.com/111760
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp
index e8e098a..1d25c1a 100644
--- a/src/gpu/GrCaps.cpp
+++ b/src/gpu/GrCaps.cpp
@@ -27,6 +27,7 @@
case kBGRA_8888_GrPixelConfig: return "BGRA8888";
case kSRGBA_8888_GrPixelConfig: return "SRGBA8888";
case kSBGRA_8888_GrPixelConfig: return "SBGRA8888";
+ case kRGBA_1010102_GrPixelConfig: return "RGBA1010102";
case kRGBA_float_GrPixelConfig: return "RGBAFloat";
case kRG_float_GrPixelConfig: return "RGFloat";
case kAlpha_half_GrPixelConfig: return "AlphaHalf";
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 83b876b..45c4f87 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -630,6 +630,7 @@
case kBGRA_8888_GrPixelConfig: return true;
case kSRGBA_8888_GrPixelConfig: return true;
case kSBGRA_8888_GrPixelConfig: return true;
+ case kRGBA_1010102_GrPixelConfig: return true;
case kRGBA_float_GrPixelConfig: return true;
case kRG_float_GrPixelConfig: return false;
case kAlpha_half_GrPixelConfig: return false;
@@ -646,17 +647,18 @@
static bool valid_premul_color_type(GrColorType ct) {
switch (ct) {
- case GrColorType::kUnknown: return false;
- case GrColorType::kAlpha_8: return false;
- case GrColorType::kRGB_565: return false;
- case GrColorType::kABGR_4444: return true;
- case GrColorType::kRGBA_8888: return true;
- case GrColorType::kBGRA_8888: return true;
- case GrColorType::kGray_8: return false;
- case GrColorType::kAlpha_F16: return false;
- case GrColorType::kRGBA_F16: return true;
- case GrColorType::kRG_F32: return false;
- case GrColorType::kRGBA_F32: return true;
+ case GrColorType::kUnknown: return false;
+ case GrColorType::kAlpha_8: return false;
+ case GrColorType::kRGB_565: return false;
+ case GrColorType::kABGR_4444: return true;
+ case GrColorType::kRGBA_8888: return true;
+ case GrColorType::kBGRA_8888: return true;
+ case GrColorType::kRGBA_1010102: return true;
+ case GrColorType::kGray_8: return false;
+ case GrColorType::kAlpha_F16: return false;
+ case GrColorType::kRGBA_F16: return true;
+ case GrColorType::kRG_F32: return false;
+ case GrColorType::kRGBA_F32: return true;
}
SK_ABORT("Invalid GrColorType");
return false;
@@ -1321,6 +1323,7 @@
case kRGB_565_GrPixelConfig:
case kRGBA_4444_GrPixelConfig:
case kBGRA_8888_GrPixelConfig:
+ case kRGBA_1010102_GrPixelConfig:
return kRGBA_8888_GrPixelConfig;
case kSBGRA_8888_GrPixelConfig:
return kSRGBA_8888_GrPixelConfig;
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 1a4538a..2722292 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -1713,9 +1713,15 @@
SkBackingFit fit = kNever_TileUsage == cinfo.fTileUsage ? SkBackingFit::kApprox
: SkBackingFit::kExact;
+ GrPixelConfig config = fRenderTargetContext->colorSpaceInfo().config();
+ if (kRGBA_1010102_GrPixelConfig == config) {
+ // If the original device is 1010102, fall back to 8888 so that we have a usable alpha
+ // channel in the layer.
+ config = kRGBA_8888_GrPixelConfig;
+ }
+
sk_sp<GrRenderTargetContext> rtc(fContext->makeDeferredRenderTargetContext(
- fit, cinfo.fInfo.width(), cinfo.fInfo.height(),
- fRenderTargetContext->colorSpaceInfo().config(),
+ fit, cinfo.fInfo.width(), cinfo.fInfo.height(), config,
fRenderTargetContext->colorSpaceInfo().refColorSpace(),
fRenderTargetContext->numStencilSamples(), GrMipMapped::kNo,
kBottomLeft_GrSurfaceOrigin, &props));
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 37e4c8f..095a867 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -264,7 +264,7 @@
return (caps.srgbSupport() && cs && cs->gammaCloseToSRGB())
? kSBGRA_8888_GrPixelConfig : kBGRA_8888_GrPixelConfig;
case kRGBA_1010102_SkColorType:
- return kUnknown_GrPixelConfig;
+ return kRGBA_1010102_GrPixelConfig;
case kRGB_101010x_SkColorType:
return kUnknown_GrPixelConfig;
case kGray_8_SkColorType:
@@ -311,6 +311,9 @@
case kSBGRA_8888_GrPixelConfig:
ct = kBGRA_8888_SkColorType;
break;
+ case kRGBA_1010102_GrPixelConfig:
+ ct = kRGBA_1010102_SkColorType;
+ break;
case kRGBA_half_GrPixelConfig:
ct = kRGBA_F16_SkColorType;
break;
diff --git a/src/gpu/effects/GrDitherEffect.fp b/src/gpu/effects/GrDitherEffect.fp
index 8ae323e..7cf07da 100644
--- a/src/gpu/effects/GrDitherEffect.fp
+++ b/src/gpu/effects/GrDitherEffect.fp
@@ -28,6 +28,7 @@
rangeType = 2;
break;
case kUnknown_GrPixelConfig:
+ case kRGBA_1010102_GrPixelConfig:
case kAlpha_half_GrPixelConfig:
case kAlpha_half_as_Red_GrPixelConfig:
case kRGBA_float_GrPixelConfig:
diff --git a/src/gpu/effects/GrDitherEffect.h b/src/gpu/effects/GrDitherEffect.h
index c614982..2e650a6 100644
--- a/src/gpu/effects/GrDitherEffect.h
+++ b/src/gpu/effects/GrDitherEffect.h
@@ -37,6 +37,7 @@
rangeType = 2;
break;
case kUnknown_GrPixelConfig:
+ case kRGBA_1010102_GrPixelConfig:
case kAlpha_half_GrPixelConfig:
case kAlpha_half_as_Red_GrPixelConfig:
case kRGBA_float_GrPixelConfig:
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index e70cb9d..ad3cfea 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -1611,6 +1611,25 @@
}
fConfigTable[kRGBA_4444_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RGBA;
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_RGB10_A2;
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFormats.fExternalFormat[kOther_ExternalFormatUsage] =
+ GR_GL_RGBA;
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFormats.fExternalType =
+ GR_GL_UNSIGNED_INT_2_10_10_10_REV;
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFormatType = kNormalizedFixedPoint_FormatType;
+ if (kGL_GrGLStandard == standard || version >= GR_GL_VER(3, 0)) {
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag |
+ allRenderFlags;
+ }
+ if (texStorageSupported) {
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
+ }
+ if (texelBufferSupport) {
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fFlags |= ConfigInfo::kCanUseWithTexelBuffer_Flag;
+ }
+ fConfigTable[kRGBA_1010102_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
+
bool alpha8IsValidForGL = kGL_GrGLStandard == standard &&
(!fIsCoreProfile || version <= GR_GL_VER(3, 0));
@@ -2519,7 +2538,10 @@
}
break;
case kRGBA_1010102_SkColorType:
- return false;
+ if (GR_GL_RGB10_A2 == format) {
+ *config = kRGBA_1010102_GrPixelConfig;
+ }
+ break;
case kRGB_101010x_SkColorType:
return false;
case kGray_8_SkColorType:
diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h
index 9da060b..e5e74eb 100644
--- a/src/gpu/gl/GrGLDefines.h
+++ b/src/gpu/gl/GrGLDefines.h
@@ -508,6 +508,7 @@
#define GR_GL_RGBA4 0x8056
#define GR_GL_RGB5_A1 0x8057
#define GR_GL_RGBA8 0x8058
+#define GR_GL_RGB10_A2 0x8059
#define GR_GL_SRGB8_ALPHA8 0x8C43
#define GR_GL_RGBA16F 0x881A
#define GR_GL_RGBA32F 0x8814
@@ -529,6 +530,7 @@
#define GR_GL_UNSIGNED_SHORT_4_4_4_4 0x8033
#define GR_GL_UNSIGNED_SHORT_5_5_5_1 0x8034
#define GR_GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GR_GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
/* Shaders */
#define GR_GL_FRAGMENT_SHADER 0x8B30
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index af7c470..a571f5a 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -800,6 +800,7 @@
case kBGRA_8888_GrPixelConfig:
case kSRGBA_8888_GrPixelConfig:
case kSBGRA_8888_GrPixelConfig:
+ case kRGBA_1010102_GrPixelConfig:
case kRGBA_float_GrPixelConfig:
case kRG_float_GrPixelConfig:
return 4;
diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp
index 791d9ec..6b44402 100644
--- a/src/gpu/gl/GrGLUtil.cpp
+++ b/src/gpu/gl/GrGLUtil.cpp
@@ -504,6 +504,8 @@
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:
diff --git a/src/gpu/mtl/GrMtlUtil.mm b/src/gpu/mtl/GrMtlUtil.mm
index a188afe..383cc98 100644
--- a/src/gpu/mtl/GrMtlUtil.mm
+++ b/src/gpu/mtl/GrMtlUtil.mm
@@ -30,9 +30,12 @@
case kSBGRA_8888_GrPixelConfig:
*format = MTLPixelFormatBGRA8Unorm_sRGB;
return true;
+ case kRGBA_1010102_GrPixelConfig:
+ *format = MTLPixelFormatRGB10A2Unorm;
+ return true;
case kRGB_565_GrPixelConfig:
#ifdef SK_BUILD_FOR_IOS
- *format = MTLPixelFormatR5G6B5Unorm;
+ *format = MTLPixelFormatB5G6R5Unorm;
return true;
#else
return false;
@@ -84,6 +87,8 @@
return kSRGBA_8888_GrPixelConfig;
case MTLPixelFormatBGRA8Unorm_sRGB:
return kSBGRA_8888_GrPixelConfig;
+ case MTLPixelFormatRGB10A2Unorm:
+ return kRGBA_1010102_GrPixelConfig;
#ifdef SK_BUILD_FOR_IOS
case MTLPixelFormatB5G6R5Unorm:
return kRGB_565_GrPixelConfig;
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index 08d8790..9132c32 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -489,7 +489,10 @@
}
break;
case kRGBA_1010102_SkColorType:
- return false;
+ if (VK_FORMAT_A2B10G10R10_UNORM_PACK32 == format) {
+ *config = kRGBA_1010102_GrPixelConfig;
+ }
+ break;
case kRGB_101010x_SkColorType:
return false;
case kGray_8_SkColorType:
diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp
index 330a1de..4f0acdb 100644
--- a/src/gpu/vk/GrVkUtil.cpp
+++ b/src/gpu/vk/GrVkUtil.cpp
@@ -31,6 +31,9 @@
case kSBGRA_8888_GrPixelConfig:
*format = VK_FORMAT_B8G8R8A8_SRGB;
return true;
+ case kRGBA_1010102_GrPixelConfig:
+ *format = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
+ return true;
case kRGB_565_GrPixelConfig:
*format = VK_FORMAT_R5G6B5_UNORM_PACK16;
return true;
@@ -79,6 +82,8 @@
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;
@@ -111,6 +116,8 @@
return kSRGBA_8888_GrPixelConfig == config;
case VK_FORMAT_B8G8R8A8_SRGB:
return kSBGRA_8888_GrPixelConfig == config;
+ case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+ return kRGBA_1010102_GrPixelConfig == config;
case VK_FORMAT_R5G6B5_UNORM_PACK16:
return kRGB_565_GrPixelConfig == config;
case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
@@ -143,6 +150,7 @@
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_R8G8B8A8_SINT:
+ case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R8_UNORM: