diff options
author | Brian Salomon <bsalomon@google.com> | 2018-02-02 13:51:50 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-02 23:37:59 +0000 |
commit | 5bb82cbecd740d21b92e8d2944280ab6eb6af7a6 (patch) | |
tree | 8171a4ea5d7f72dbba276b58a89a7e115066f24c /src/gpu/mtl | |
parent | 1e5ef4f81ca18cd9448426891cda5120cea51de8 (diff) |
Revert "Revert "Revert "Revert "Redefine the meaning of sample counts in GPU backend.""""
This reverts commit 18c52a7b52211de5d0dcd86dc048adef758c6c75.
Also relands "More sample count cleanup:" and "Add new GrContext queries for imagability, surfacability, and max sample count of color types"
Bug: skia:
Change-Id: I4028105a3a1f16ce3944e134619eb6245af6b947
Reviewed-on: https://skia-review.googlesource.com/102940
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/mtl')
-rw-r--r-- | src/gpu/mtl/GrMtlCaps.h | 12 | ||||
-rw-r--r-- | src/gpu/mtl/GrMtlCaps.mm | 30 | ||||
-rw-r--r-- | src/gpu/mtl/GrMtlRenderTarget.h | 5 |
3 files changed, 26 insertions, 21 deletions
diff --git a/src/gpu/mtl/GrMtlCaps.h b/src/gpu/mtl/GrMtlCaps.h index 6204eaac5a..935cb07822 100644 --- a/src/gpu/mtl/GrMtlCaps.h +++ b/src/gpu/mtl/GrMtlCaps.h @@ -24,20 +24,12 @@ public: GrMtlCaps(const GrContextOptions& contextOptions, id<MTLDevice> device, MTLFeatureSet featureSet); - int getSampleCount(int requestedCount, GrPixelConfig config) const override; - bool isConfigTexturable(GrPixelConfig config) const override { return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kTextureable_Flag); } - bool isConfigRenderable(GrPixelConfig config, bool withMSAA) const override { - if (withMSAA) { - return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kRenderable_Flag) && - SkToBool(fConfigTable[config].fFlags & ConfigInfo::kMSAA_Flag); - } else { - return SkToBool(fConfigTable[config].fFlags & ConfigInfo::kRenderable_Flag); - } - } + int getRenderTargetSampleCount(int requestedCount, GrPixelConfig) const override; + int maxRenderTargetSampleCount(GrPixelConfig) const override; bool isConfigCopyable(GrPixelConfig config) const override { return true; diff --git a/src/gpu/mtl/GrMtlCaps.mm b/src/gpu/mtl/GrMtlCaps.mm index 2bce74a261..0bb7530fe2 100644 --- a/src/gpu/mtl/GrMtlCaps.mm +++ b/src/gpu/mtl/GrMtlCaps.mm @@ -121,7 +121,7 @@ void GrMtlCaps::initGrCaps(const id<MTLDevice> device) { fMaxTextureSize = fMaxRenderTargetSize; // Init sample counts. All devices support 1 (i.e. 0 in skia). - fSampleCounts.push(0); + fSampleCounts.push(1); for (auto sampleCnt : {2, 4, 8}) { if ([device supportsTextureSampleCount:sampleCnt]) { fSampleCounts.push(sampleCnt); @@ -164,19 +164,29 @@ void GrMtlCaps::initGrCaps(const id<MTLDevice> device) { fCrossContextTextureSupport = false; } -int GrMtlCaps::getSampleCount(int requestedCount, GrPixelConfig config) const { - int count = fSampleCounts.count(); - SkASSERT(count > 0); // We always add 0 as a valid sample count - if (!this->isConfigRenderable(config, true)) { - return 0; + +int GrMtlCaps::maxRenderTargetSampleCount(GrPixelConfig config) const { + if (fConfigTable[config].fFlags & ConfigInfo::kMSAA_Flag) { + return fSampleCounts[fSampleCounts.count() - 1]; + } else if (fConfigTable[config].fFlags & ConfigInfo::kRenderable_Flag) { + return 1; } + return 0; +} - for (int i = 0; i < count; ++i) { - if (fSampleCounts[i] >= requestedCount) { - return fSampleCounts[i]; +int GrMtlCaps::getRenderTargetSampleCount(int requestedCount, GrPixelConfig config) const { + requestedCount = SkTMax(requestedCount, 1); + if (fConfigTable[config].fFlags & ConfigInfo::kMSAA_Flag) { + int count = fSampleCounts.count(); + for (int i = 0; i < count; ++i) { + if (fSampleCounts[i] >= requestedCount) { + return fSampleCounts[i]; + } } + } else if (fConfigTable[config].fFlags & ConfigInfo::kRenderable_Flag) { + return 1 == requestedCount ? 1 : 0; } - return fSampleCounts[count-1]; + return 0; } void GrMtlCaps::initShaderCaps() { diff --git a/src/gpu/mtl/GrMtlRenderTarget.h b/src/gpu/mtl/GrMtlRenderTarget.h index 4dac306e7e..83e7d3c240 100644 --- a/src/gpu/mtl/GrMtlRenderTarget.h +++ b/src/gpu/mtl/GrMtlRenderTarget.h @@ -63,8 +63,11 @@ protected: // This accounts for the texture's memory and any MSAA renderbuffer's memory. size_t onGpuMemorySize() const override { + int numColorSamples = this->numColorSamples(); // The plus 1 is to account for the resolve texture or if not using msaa the RT itself - int numColorSamples = this->numColorSamples() + 1; + if (numColorSamples > 1) { + ++numColorSamples; + } return GrSurface::ComputeSize(this->config(), this->width(), this->height(), numColorSamples, GrMipMapped::kNo); } |