aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrGpu.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2018-02-01 12:54:30 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-01 18:16:58 +0000
commit48825b11ad25c98b9a4884d5cc0edd4e290c4409 (patch)
tree4278b01107ad8da03453c879ee50ce1a471d2ee2 /src/gpu/GrGpu.cpp
parentf8393c861975350c4ca9d4f6c95b186c081dbbcf (diff)
Redefine the meaning of sample counts in GPU backend.
Old: 0 -> nonMSAA 1+ -> MSAA New: 0 -> error/unsupported 1 -> nonMSAA 2+ -> MSAA We still allow 0 to mean nonMSAA in three sets of public APIs for backwards compatibility: 1) SkSurface factories 2) GrBackendRenderTarget constructors 3) GrCaps::getSampleCnt()'s requestedCount parameter However, we immediately clamp to 1 and treat 0 as invalid/non-renderable internally. This also changes the behavior when using a large sample count. We now fail in that case rather than using the largest sample available sample count. GrCaps::getSampleCount() will return 0 in this case. Bug: skia: Change-Id: Ida22c6b22c1365e563c9046b611e88bf5eb3ff33 Reviewed-on: https://skia-review.googlesource.com/101560 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrGpu.cpp')
-rw-r--r--src/gpu/GrGpu.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
index eb005d110a..bea6a601e6 100644
--- a/src/gpu/GrGpu.cpp
+++ b/src/gpu/GrGpu.cpp
@@ -94,12 +94,16 @@ static bool check_texture_creation_params(const GrCaps& caps, const GrSurfaceDes
}
*isRT = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag);
- if (*isRT && !caps.isConfigRenderable(desc.fConfig, desc.fSampleCnt > 0)) {
+ if (*isRT && !caps.isConfigRenderable(desc.fConfig, desc.fSampleCnt > 1)) {
+ return false;
+ }
+
+ if (desc.fSampleCnt < 1) {
return false;
}
// We currently do not support multisampled textures
- if (!*isRT && desc.fSampleCnt > 0) {
+ if (!*isRT && desc.fSampleCnt > 1) {
return false;
}
@@ -131,9 +135,14 @@ sk_sp<GrTexture> GrGpu::createTexture(const GrSurfaceDesc& origDesc, SkBudgeted
return nullptr;
}
- desc.fSampleCnt = caps->getSampleCount(desc.fSampleCnt, desc.fConfig);
+ if (isRT) {
+ desc.fSampleCnt = caps->getSampleCount(desc.fSampleCnt, desc.fConfig);
+ if (!desc.fSampleCnt) {
+ return nullptr;
+ }
+ }
// Attempt to catch un- or wrongly initialized sample counts.
- SkASSERT(desc.fSampleCnt >= 0 && desc.fSampleCnt <= 64);
+ SkASSERT(desc.fSampleCnt > 0 && desc.fSampleCnt <= 64);
if (mipLevelCount && (desc.fFlags & kPerformInitialClear_GrSurfaceFlag)) {
return nullptr;
@@ -179,8 +188,11 @@ sk_sp<GrTexture> GrGpu::wrapBackendTexture(const GrBackendTexture& backendTex,
sk_sp<GrTexture> GrGpu::wrapRenderableBackendTexture(const GrBackendTexture& backendTex,
int sampleCnt, GrWrapOwnership ownership) {
this->handleDirtyContext();
+ if (sampleCnt < 1) {
+ return nullptr;
+ }
if (!this->caps()->isConfigTexturable(backendTex.config()) ||
- !this->caps()->isConfigRenderable(backendTex.config(), sampleCnt > 0)) {
+ !this->caps()->isConfigRenderable(backendTex.config(), sampleCnt > 1)) {
return nullptr;
}
@@ -197,7 +209,7 @@ sk_sp<GrTexture> GrGpu::wrapRenderableBackendTexture(const GrBackendTexture& bac
}
sk_sp<GrRenderTarget> GrGpu::wrapBackendRenderTarget(const GrBackendRenderTarget& backendRT) {
- if (!this->caps()->isConfigRenderable(backendRT.config(), backendRT.sampleCnt() > 0)) {
+ if (!this->caps()->isConfigRenderable(backendRT.config(), backendRT.sampleCnt() > 1)) {
return nullptr;
}
this->handleDirtyContext();
@@ -207,7 +219,7 @@ sk_sp<GrRenderTarget> GrGpu::wrapBackendRenderTarget(const GrBackendRenderTarget
sk_sp<GrRenderTarget> GrGpu::wrapBackendTextureAsRenderTarget(const GrBackendTexture& tex,
int sampleCnt) {
this->handleDirtyContext();
- if (!this->caps()->isConfigRenderable(tex.config(), sampleCnt > 0)) {
+ if (!this->caps()->isConfigRenderable(tex.config(), sampleCnt > 1)) {
return nullptr;
}
int maxSize = this->caps()->maxTextureSize();