diff options
author | 2016-11-10 11:19:51 -0500 | |
---|---|---|
committer | 2016-11-10 17:13:34 +0000 | |
commit | 434c534bd0ec08cb355fecfb6d2110197b523e74 (patch) | |
tree | 119167b88683157346ab8250bbc553903e046f7f /src/gpu/GrContext.cpp | |
parent | e13a69baac9dc326510009fa7c0c5966aee9240c (diff) |
Add integer texture support.
This allows us to create integer textures and sample them from a GrProcessor's code.
Filtering is limited to NEAREST.
Adds tests for reading/writing pixels, copying, and drawing. These operations are not allowed to convert to fixed/float configs.
Vulkan support is TBD.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4348
Change-Id: If38d89a03285d4bd98d1f14f9638b0320977e43d
Reviewed-on: https://skia-review.googlesource.com/4348
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/GrContext.cpp')
-rw-r--r-- | src/gpu/GrContext.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp index ff8de9da45..71203d6442 100644 --- a/src/gpu/GrContext.cpp +++ b/src/gpu/GrContext.cpp @@ -266,11 +266,15 @@ bool GrContext::writeSurfacePixels(GrSurface* surface, bool applyPremulToSrc = false; if (kUnpremul_PixelOpsFlag & pixelOpsFlags) { - if (!GrPixelConfigIs8888(srcConfig)) { + if (!GrPixelConfigIs8888Unorm(srcConfig)) { return false; } applyPremulToSrc = true; } + // We don't allow conversion between integer configs and float/fixed configs. + if (GrPixelConfigIsSint(surface->config()) != GrPixelConfigIsSint(srcConfig)) { + return false; + } GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference; // Don't prefer to draw for the conversion (and thereby access a texture from the cache) when @@ -411,10 +415,14 @@ bool GrContext::readSurfacePixels(GrSurface* src, } bool unpremul = SkToBool(kUnpremul_PixelOpsFlag & flags); - if (unpremul && !GrPixelConfigIs8888(dstConfig)) { + if (unpremul && !GrPixelConfigIs8888Unorm(dstConfig)) { // The unpremul flag is only allowed for 8888 configs. return false; } + // We don't allow conversion between integer configs and float/fixed configs. + if (GrPixelConfigIsSint(src->config()) != GrPixelConfigIsSint(dstConfig)) { + return false; + } GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference; // Don't prefer to draw for the conversion (and thereby access a texture from the cache) when @@ -540,6 +548,11 @@ bool GrContext::copySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRe ASSERT_OWNED_RESOURCE(src); ASSERT_OWNED_RESOURCE(dst); + // We don't allow conversion between integer configs and float/fixed configs. + if (GrPixelConfigIsSint(dst->config()) != GrPixelConfigIsSint(src->config())) { + return false; + } + if (!dst->asRenderTarget()) { SkIRect clippedSrcRect; SkIPoint clippedDstPoint; @@ -683,6 +696,7 @@ static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) { kRGBA_8888_GrPixelConfig, // kBGRA_8888_GrPixelConfig kUnknown_GrPixelConfig, // kSRGBA_8888_GrPixelConfig kSRGBA_8888_GrPixelConfig, // kSBGRA_8888_GrPixelConfig + kUnknown_GrPixelConfig, // kRGBA_8888_sint_GrPixelConfig kUnknown_GrPixelConfig, // kETC1_GrPixelConfig kUnknown_GrPixelConfig, // kLATC_GrPixelConfig kUnknown_GrPixelConfig, // kR11_EAC_GrPixelConfig @@ -702,13 +716,14 @@ static inline GrPixelConfig GrPixelConfigFallback(GrPixelConfig config) { 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 == kETC1_GrPixelConfig); - GR_STATIC_ASSERT(10 == kLATC_GrPixelConfig); - GR_STATIC_ASSERT(11 == kR11_EAC_GrPixelConfig); - GR_STATIC_ASSERT(12 == kASTC_12x12_GrPixelConfig); - GR_STATIC_ASSERT(13 == kRGBA_float_GrPixelConfig); - GR_STATIC_ASSERT(14 == kAlpha_half_GrPixelConfig); - GR_STATIC_ASSERT(15 == kRGBA_half_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(SK_ARRAY_COUNT(kFallback) == kGrPixelConfigCnt); } |