diff options
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrCaps.cpp | 1 | ||||
-rw-r--r-- | src/gpu/GrContext.cpp | 25 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 10 | ||||
-rw-r--r-- | src/gpu/SkGr.cpp | 5 | ||||
-rw-r--r-- | src/gpu/effects/GrDitherEffect.fp | 1 | ||||
-rw-r--r-- | src/gpu/effects/GrDitherEffect.h | 1 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 24 | ||||
-rw-r--r-- | src/gpu/gl/GrGLDefines.h | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 1 | ||||
-rw-r--r-- | src/gpu/gl/GrGLUtil.cpp | 2 | ||||
-rw-r--r-- | src/gpu/mtl/GrMtlUtil.mm | 7 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCaps.cpp | 5 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUtil.cpp | 8 |
13 files changed, 75 insertions, 17 deletions
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp index 8cfbc5faea..37c31001d1 100644 --- a/src/gpu/GrCaps.cpp +++ b/src/gpu/GrCaps.cpp @@ -27,6 +27,7 @@ static const char* pixel_config_name(GrPixelConfig config) { 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 38e170b7a0..931357f113 100644 --- a/src/gpu/GrContext.cpp +++ b/src/gpu/GrContext.cpp @@ -533,6 +533,7 @@ static bool valid_premul_config(GrPixelConfig config) { 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; @@ -549,17 +550,18 @@ static bool valid_premul_config(GrPixelConfig config) { 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; @@ -1224,6 +1226,7 @@ static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) { 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 1a4538af72..2722292506 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1713,9 +1713,15 @@ SkBaseDevice* SkGpuDevice::onCreateDevice(const CreateInfo& cinfo, const SkPaint 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 37e4c8f430..095a867605 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -264,7 +264,7 @@ GrPixelConfig SkImageInfo2GrPixelConfig(const SkColorType type, SkColorSpace* cs 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 @@ bool GrPixelConfigToColorType(GrPixelConfig config, SkColorType* ctOut) { 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 8ae323e089..7cf07da311 100644 --- a/src/gpu/effects/GrDitherEffect.fp +++ b/src/gpu/effects/GrDitherEffect.fp @@ -28,6 +28,7 @@ layout(key) in int rangeType; 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 c614982538..2e650a68f4 100644 --- a/src/gpu/effects/GrDitherEffect.h +++ b/src/gpu/effects/GrDitherEffect.h @@ -37,6 +37,7 @@ public: 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 9068525148..487b17d095 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -1603,6 +1603,25 @@ void GrGLCaps::initConfigTable(const GrContextOptions& contextOptions, } 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)); @@ -2511,7 +2530,10 @@ bool validate_sized_format(GrGLenum format, SkColorType ct, GrPixelConfig* confi } 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 9da060b412..e5e74eb68e 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 af7c4706d3..a571f5a81e 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -800,6 +800,7 @@ static inline GrGLint config_alignment(GrPixelConfig config) { 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 791d9ecfcb..6b44402c1b 100644 --- a/src/gpu/gl/GrGLUtil.cpp +++ b/src/gpu/gl/GrGLUtil.cpp @@ -504,6 +504,8 @@ GrPixelConfig GrGLSizedFormatToPixelConfig(GrGLenum sizedFormat) { 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 a188afe4ad..383cc98264 100644 --- a/src/gpu/mtl/GrMtlUtil.mm +++ b/src/gpu/mtl/GrMtlUtil.mm @@ -30,9 +30,12 @@ bool GrPixelConfigToMTLFormat(GrPixelConfig config, MTLPixelFormat* format) { 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 @@ GrPixelConfig GrMTLFormatToPixelConfig(MTLPixelFormat format) { 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 e5037dfb3e..6644ca6fde 100644 --- a/src/gpu/vk/GrVkCaps.cpp +++ b/src/gpu/vk/GrVkCaps.cpp @@ -472,7 +472,10 @@ bool validate_image_info(VkFormat format, SkColorType ct, GrPixelConfig* config) } 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 330a1de7a2..4f0acdb8f4 100644 --- a/src/gpu/vk/GrVkUtil.cpp +++ b/src/gpu/vk/GrVkUtil.cpp @@ -31,6 +31,9 @@ bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format) { 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 @@ GrPixelConfig GrVkFormatToPixelConfig(VkFormat format) { 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 @@ bool GrVkFormatPixelConfigPairIsValid(VkFormat format, GrPixelConfig config) { 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 @@ bool GrVkFormatIsSupported(VkFormat format) { 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: |