diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrCaps.cpp | 32 | ||||
-rw-r--r-- | src/gpu/GrContext.cpp | 32 | ||||
-rw-r--r-- | src/gpu/GrShaderCaps.cpp | 3 | ||||
-rw-r--r-- | src/gpu/SkGr.cpp | 24 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 33 | ||||
-rw-r--r-- | src/gpu/gl/GrGLDefines.h | 3 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 1 | ||||
-rw-r--r-- | src/gpu/vk/GrVkCaps.cpp | 4 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUtil.cpp | 3 |
9 files changed, 83 insertions, 52 deletions
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp index 0cc33462eb..2b18fac767 100644 --- a/src/gpu/GrCaps.cpp +++ b/src/gpu/GrCaps.cpp @@ -170,6 +170,7 @@ SkString GrCaps::dump() const { static const char* kConfigNames[] = { "Unknown", // kUnknown_GrPixelConfig "Alpha8", // kAlpha_8_GrPixelConfig, + "Gray8", // kGray_8_GrPixelConfig, "Index8", // kIndex_8_GrPixelConfig, "RGB565", // kRGB_565_GrPixelConfig, "RGBA444", // kRGBA_4444_GrPixelConfig, @@ -188,21 +189,22 @@ SkString GrCaps::dump() const { }; GR_STATIC_ASSERT(0 == kUnknown_GrPixelConfig); GR_STATIC_ASSERT(1 == kAlpha_8_GrPixelConfig); - GR_STATIC_ASSERT(2 == kIndex_8_GrPixelConfig); - GR_STATIC_ASSERT(3 == kRGB_565_GrPixelConfig); - GR_STATIC_ASSERT(4 == kRGBA_4444_GrPixelConfig); - GR_STATIC_ASSERT(5 == kRGBA_8888_GrPixelConfig); - GR_STATIC_ASSERT(6 == kBGRA_8888_GrPixelConfig); - GR_STATIC_ASSERT(7 == kSRGBA_8888_GrPixelConfig); - GR_STATIC_ASSERT(8 == kSBGRA_8888_GrPixelConfig); - GR_STATIC_ASSERT(9 == kRGBA_8888_sint_GrPixelConfig); - GR_STATIC_ASSERT(10 == kETC1_GrPixelConfig); - GR_STATIC_ASSERT(11 == kLATC_GrPixelConfig); - GR_STATIC_ASSERT(12 == kR11_EAC_GrPixelConfig); - GR_STATIC_ASSERT(13 == kASTC_12x12_GrPixelConfig); - GR_STATIC_ASSERT(14 == kRGBA_float_GrPixelConfig); - GR_STATIC_ASSERT(15 == kAlpha_half_GrPixelConfig); - GR_STATIC_ASSERT(16 == kRGBA_half_GrPixelConfig); + GR_STATIC_ASSERT(2 == kGray_8_GrPixelConfig); + GR_STATIC_ASSERT(3 == kIndex_8_GrPixelConfig); + GR_STATIC_ASSERT(4 == kRGB_565_GrPixelConfig); + GR_STATIC_ASSERT(5 == kRGBA_4444_GrPixelConfig); + GR_STATIC_ASSERT(6 == kRGBA_8888_GrPixelConfig); + GR_STATIC_ASSERT(7 == kBGRA_8888_GrPixelConfig); + GR_STATIC_ASSERT(8 == kSRGBA_8888_GrPixelConfig); + GR_STATIC_ASSERT(9 == kSBGRA_8888_GrPixelConfig); + GR_STATIC_ASSERT(10 == kRGBA_8888_sint_GrPixelConfig); + GR_STATIC_ASSERT(11 == kETC1_GrPixelConfig); + GR_STATIC_ASSERT(12 == kLATC_GrPixelConfig); + GR_STATIC_ASSERT(13 == kR11_EAC_GrPixelConfig); + GR_STATIC_ASSERT(14 == kASTC_12x12_GrPixelConfig); + GR_STATIC_ASSERT(15 == kRGBA_float_GrPixelConfig); + GR_STATIC_ASSERT(16 == kAlpha_half_GrPixelConfig); + GR_STATIC_ASSERT(17 == kRGBA_half_GrPixelConfig); GR_STATIC_ASSERT(SK_ARRAY_COUNT(kConfigNames) == kGrPixelConfigCnt); SkASSERT(!this->isConfigRenderable(kUnknown_GrPixelConfig, false)); diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp index 30f596fe10..fd8aba0ae7 100644 --- a/src/gpu/GrContext.cpp +++ b/src/gpu/GrContext.cpp @@ -680,6 +680,7 @@ static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) { static const GrPixelConfig kFallback[] = { kUnknown_GrPixelConfig, // kUnknown_GrPixelConfig kRGBA_8888_GrPixelConfig, // kAlpha_8_GrPixelConfig + kUnknown_GrPixelConfig, // kGray_8_GrPixelConfig kUnknown_GrPixelConfig, // kIndex_8_GrPixelConfig kRGBA_8888_GrPixelConfig, // kRGB_565_GrPixelConfig kRGBA_8888_GrPixelConfig, // kRGBA_4444_GrPixelConfig @@ -700,21 +701,22 @@ static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) { GR_STATIC_ASSERT(0 == kUnknown_GrPixelConfig); GR_STATIC_ASSERT(1 == kAlpha_8_GrPixelConfig); - GR_STATIC_ASSERT(2 == kIndex_8_GrPixelConfig); - GR_STATIC_ASSERT(3 == kRGB_565_GrPixelConfig); - GR_STATIC_ASSERT(4 == kRGBA_4444_GrPixelConfig); - GR_STATIC_ASSERT(5 == kRGBA_8888_GrPixelConfig); - GR_STATIC_ASSERT(6 == kBGRA_8888_GrPixelConfig); - GR_STATIC_ASSERT(7 == kSRGBA_8888_GrPixelConfig); - GR_STATIC_ASSERT(8 == kSBGRA_8888_GrPixelConfig); - GR_STATIC_ASSERT(9 == kRGBA_8888_sint_GrPixelConfig); - GR_STATIC_ASSERT(10 == kETC1_GrPixelConfig); - GR_STATIC_ASSERT(11 == kLATC_GrPixelConfig); - GR_STATIC_ASSERT(12 == kR11_EAC_GrPixelConfig); - GR_STATIC_ASSERT(13 == kASTC_12x12_GrPixelConfig); - GR_STATIC_ASSERT(14 == kRGBA_float_GrPixelConfig); - GR_STATIC_ASSERT(15 == kAlpha_half_GrPixelConfig); - GR_STATIC_ASSERT(16 == kRGBA_half_GrPixelConfig); + GR_STATIC_ASSERT(2 == kGray_8_GrPixelConfig); + GR_STATIC_ASSERT(3 == kIndex_8_GrPixelConfig); + GR_STATIC_ASSERT(4 == kRGB_565_GrPixelConfig); + GR_STATIC_ASSERT(5 == kRGBA_4444_GrPixelConfig); + GR_STATIC_ASSERT(6 == kRGBA_8888_GrPixelConfig); + GR_STATIC_ASSERT(7 == kBGRA_8888_GrPixelConfig); + GR_STATIC_ASSERT(8 == kSRGBA_8888_GrPixelConfig); + GR_STATIC_ASSERT(9 == kSBGRA_8888_GrPixelConfig); + GR_STATIC_ASSERT(10 == kRGBA_8888_sint_GrPixelConfig); + GR_STATIC_ASSERT(11 == kETC1_GrPixelConfig); + GR_STATIC_ASSERT(12 == kLATC_GrPixelConfig); + GR_STATIC_ASSERT(13 == kR11_EAC_GrPixelConfig); + GR_STATIC_ASSERT(14 == kASTC_12x12_GrPixelConfig); + GR_STATIC_ASSERT(15 == kRGBA_float_GrPixelConfig); + GR_STATIC_ASSERT(16 == kAlpha_half_GrPixelConfig); + GR_STATIC_ASSERT(17 == kRGBA_half_GrPixelConfig); GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFallback) == kGrPixelConfigCnt); } diff --git a/src/gpu/GrShaderCaps.cpp b/src/gpu/GrShaderCaps.cpp index 3e6323f255..90df176051 100644 --- a/src/gpu/GrShaderCaps.cpp +++ b/src/gpu/GrShaderCaps.cpp @@ -202,6 +202,7 @@ void GrShaderCaps::initSamplerPrecisionTable() { uint8_t* table = fSamplerPrecisions[visibility]; table[kUnknown_GrPixelConfig] = kDefault_GrSLPrecision; table[kAlpha_8_GrPixelConfig] = lowp; + table[kGray_8_GrPixelConfig] = lowp; table[kIndex_8_GrPixelConfig] = lowp; table[kRGB_565_GrPixelConfig] = lowp; table[kRGBA_4444_GrPixelConfig] = lowp; @@ -218,7 +219,7 @@ void GrShaderCaps::initSamplerPrecisionTable() { table[kAlpha_half_GrPixelConfig] = mediump; table[kRGBA_half_GrPixelConfig] = mediump; - GR_STATIC_ASSERT(17 == kGrPixelConfigCnt); + GR_STATIC_ASSERT(18 == kGrPixelConfigCnt); } } diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 4147855e13..9d6072c551 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -253,25 +253,6 @@ GrTexture* GrUploadPixmapToTexture(GrContext* ctx, const SkPixmap& pixmap, SkBud pmap = &tmpPixmap; // must rebuild desc, since we've forced the info to be N32 desc = GrImageInfoToSurfaceDesc(pmap->info(), *caps); - } else if (kGray_8_SkColorType == pixmap.colorType()) { - // We don't have Gray8 support as a pixel config, so expand to 8888 - - // We should have converted sRGB Gray8 above (if we have sRGB support): - SkASSERT(!caps->srgbSupport() || !pixmap.info().colorSpace() || - !pixmap.info().colorSpace()->gammaCloseToSRGB()); - - SkImageInfo info = SkImageInfo::MakeN32(pixmap.width(), pixmap.height(), - kOpaque_SkAlphaType); - tmpBitmap.allocPixels(info); - if (!pixmap.readPixels(info, tmpBitmap.getPixels(), tmpBitmap.rowBytes())) { - return nullptr; - } - if (!tmpBitmap.peekPixels(&tmpPixmap)) { - return nullptr; - } - pmap = &tmpPixmap; - // must rebuild desc, since we've forced the info to be N32 - desc = GrImageInfoToSurfaceDesc(pmap->info(), *caps); } else if (kIndex_8_SkColorType == pixmap.colorType()) { if (caps->isConfigTexturable(kIndex_8_GrPixelConfig)) { size_t imageSize = GrCompressedFormatDataSize(kIndex_8_GrPixelConfig, @@ -482,7 +463,7 @@ GrPixelConfig SkImageInfo2GrPixelConfig(SkColorType ct, SkAlphaType, const SkCol case kIndex_8_SkColorType: return kIndex_8_GrPixelConfig; case kGray_8_SkColorType: - return kAlpha_8_GrPixelConfig; // TODO: gray8 support on gpu + return kGray_8_GrPixelConfig; case kRGBA_F16_SkColorType: return kRGBA_half_GrPixelConfig; } @@ -496,6 +477,9 @@ bool GrPixelConfigToColorType(GrPixelConfig config, SkColorType* ctOut) { case kAlpha_8_GrPixelConfig: ct = kAlpha_8_SkColorType; break; + case kGray_8_GrPixelConfig: + ct = kGray_8_SkColorType; + break; case kIndex_8_GrPixelConfig: ct = kIndex_8_SkColorType; break; diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index d3adc28d4c..bd9380cd20 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -1756,6 +1756,39 @@ void GrGLCaps::initConfigTable(const GrContextOptions& contextOptions, fConfigTable[kAlpha_8_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag; } + if (this->textureRedSupport()) { + fConfigTable[kGray_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RED; + fConfigTable[kGray_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_R8; + fConfigTable[kGray_8_GrPixelConfig].fFormats.fExternalFormat[kOther_ExternalFormatUsage] = + GR_GL_RED; + fConfigTable[kGray_8_GrPixelConfig].fSwizzle = GrSwizzle::RRRA(); + if (texelBufferSupport) { + fConfigTable[kGray_8_GrPixelConfig].fFlags |= ConfigInfo::kCanUseWithTexelBuffer_Flag; + } + } else { + fConfigTable[kGray_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_LUMINANCE; + fConfigTable[kGray_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_LUMINANCE8; + fConfigTable[kGray_8_GrPixelConfig].fFormats.fExternalFormat[kOther_ExternalFormatUsage] = + GR_GL_LUMINANCE; + fConfigTable[kGray_8_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); + } + fConfigTable[kGray_8_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED_BYTE; + fConfigTable[kGray_8_GrPixelConfig].fFormatType = kNormalizedFixedPoint_FormatType; + fConfigTable[kGray_8_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag; +#if 0 // Leaving Gray8 as non-renderable, to keep things simple and match raster + if (this->textureRedSupport() || + (kDesktop_ARB_MSFBOType == this->msFBOType() && + ctxInfo.renderer() != kOSMesa_GrGLRenderer)) { + // desktop ARB extension/3.0+ supports LUMINANCE8 as renderable. + // However, osmesa fails if it used even when GL_ARB_framebuffer_object is present. + // Core profile removes LUMINANCE8 support, but we should have chosen R8 in that case. + fConfigTable[kGray_8_GrPixelConfig].fFlags |= allRenderFlags; + } +#endif + if (texStorageSupported) { + fConfigTable[kGray_8_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag; + } + // Check for [half] floating point texture support // NOTE: We disallow floating point textures on ES devices if linear filtering modes are not // supported. This is for simplicity, but a more granular approach is possible. Coincidentally, diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h index 18dee280f0..05a594e0e6 100644 --- a/src/gpu/gl/GrGLDefines.h +++ b/src/gpu/gl/GrGLDefines.h @@ -461,6 +461,9 @@ #define GR_GL_R32I 0x8235 #define GR_GL_R32UI 0x8236 +/* Luminance sized formats */ +#define GR_GL_LUMINANCE8 0x8040 + /* Alpha sized formats */ #define GR_GL_ALPHA8 0x803C #define GR_GL_ALPHA16 0x803E diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index 577aca844f..74e52583dd 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -927,6 +927,7 @@ static inline GrGLint config_alignment(GrPixelConfig config) { SkASSERT(!GrPixelConfigIsCompressed(config)); switch (config) { case kAlpha_8_GrPixelConfig: + case kGray_8_GrPixelConfig: return 1; case kRGB_565_GrPixelConfig: case kRGBA_4444_GrPixelConfig: diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp index 0c52643ee8..f614ae39c6 100644 --- a/src/gpu/vk/GrVkCaps.cpp +++ b/src/gpu/vk/GrVkCaps.cpp @@ -148,7 +148,9 @@ void GrVkCaps::initShaderCaps(const VkPhysicalDeviceProperties& properties, uint shaderCaps->fConfigTextureSwizzle[i] = GrSwizzle::RRRR(); shaderCaps->fConfigOutputSwizzle[i] = GrSwizzle::AAAA(); } else { - if (kRGBA_4444_GrPixelConfig == config) { + if (kGray_8_GrPixelConfig == config) { + shaderCaps->fConfigTextureSwizzle[i] = GrSwizzle::RRRA(); + } else if (kRGBA_4444_GrPixelConfig == config) { // The vulkan spec does not require R4G4B4A4 to be supported for texturing so we // store the data in a B4G4R4A4 texture and then swizzle it when doing texture reads // or writing to outputs. Since we're not actually changing the data at all, the diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp index 3071fc8d83..b92f03e7d8 100644 --- a/src/gpu/vk/GrVkUtil.cpp +++ b/src/gpu/vk/GrVkUtil.cpp @@ -48,6 +48,9 @@ bool GrPixelConfigToVkFormat(GrPixelConfig config, VkFormat* format) { case kAlpha_8_GrPixelConfig: *format = VK_FORMAT_R8_UNORM; return true; + case kGray_8_GrPixelConfig: + *format = VK_FORMAT_R8_UNORM; + return true; case kETC1_GrPixelConfig: // converting to ETC2 which is a superset of ETC1 *format = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK; |