aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrContext.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2016-11-10 11:19:51 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-10 17:13:34 +0000
commit434c534bd0ec08cb355fecfb6d2110197b523e74 (patch)
tree119167b88683157346ab8250bbc553903e046f7f /src/gpu/GrContext.cpp
parente13a69baac9dc326510009fa7c0c5966aee9240c (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.cpp33
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);
}