diff options
author | Brian Salomon <bsalomon@google.com> | 2018-02-01 13:58:00 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-01 21:56:49 +0000 |
commit | d653cac70ed17983125ceed053138c09f1401846 (patch) | |
tree | 1c9c5395e5e16ba1be082f4160381285a8240a1d /src/gpu/mtl/GrMtlCaps.mm | |
parent | 704cff2c0cacdb13b7b0cd8da2cee72f24e4776c (diff) |
More sample count cleanup:
rename getSampleCount -> getRenderTargetSampleCount because it will return
0 when a config is not renderable but *is* supported as a texture format.
(Old name kept around until Chrome stops calling it)
Add virtual GrCaps::maxRenderTargetSampleCount(GrPixelConfig).
Devirtualize isConfigRenderable() and implement as maxRTSC != 0. Separate implementation for version with bool withMSAA param to be removed after Flutter is updated to no longer call.
Consolidate various file static GrSurfaceDesc validators fns into GrCaps::validateSurfaceDesc().
Bug: skia:
Change-Id: Ie30a291aa027e910df3bd90fac8518ccdb39e53f
Reviewed-on: https://skia-review.googlesource.com/102141
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/mtl/GrMtlCaps.mm')
-rw-r--r-- | src/gpu/mtl/GrMtlCaps.mm | 30 |
1 files changed, 20 insertions, 10 deletions
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() { |