vulkan: Blacklist MSAA path renderer on Qualcomm drivers

Bug: skia:7758
Change-Id: I96b5c259352949d67f5e0263a7164cdce54b3269
Reviewed-on: https://skia-review.googlesource.com/117152
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This commit is contained in:
Chris Dalton 2018-03-29 12:34:41 -06:00 committed by Skia Commit-Bot
parent 9329689045
commit 0361657402
4 changed files with 19 additions and 3 deletions

View File

@ -73,6 +73,8 @@ public:
bool blacklistCoverageCounting() const { return fBlacklistCoverageCounting; }
bool blacklistMSAAPathRenderer() const { return fBlacklistMSAAPathRenderer; }
bool avoidStencilBuffers() const { return fAvoidStencilBuffers; }
/**
@ -292,6 +294,7 @@ protected:
// Driver workaround
bool fBlacklistCoverageCounting : 1;
bool fBlacklistMSAAPathRenderer : 1;
bool fAvoidStencilBuffers : 1;
// ANGLE performance workaround

View File

@ -91,6 +91,7 @@ GrCaps::GrCaps(const GrContextOptions& options) {
#endif
fBufferMapThreshold = options.fBufferMapThreshold;
fBlacklistCoverageCounting = false;
fBlacklistMSAAPathRenderer = false;
fAvoidStencilBuffers = false;
fPreferVRAMUseOverFlushes = true;
@ -102,6 +103,7 @@ void GrCaps::applyOptionsOverrides(const GrContextOptions& options) {
// We always blacklist coverage counting on Vulkan currently. TODO: Either stop doing that
// or disambiguate blacklisting from incomplete implementation.
// SkASSERT(!fBlacklistCoverageCounting);
SkASSERT(!fBlacklistMSAAPathRenderer);
SkASSERT(!fAvoidStencilBuffers);
SkASSERT(!fAdvBlendEqBlacklist);
}
@ -173,6 +175,7 @@ void GrCaps::dumpJSON(SkJSONWriter* writer) const {
writer->appendBool("Blacklist Coverage Counting Path Renderer [workaround]",
fBlacklistCoverageCounting);
writer->appendBool("Blacklist MSAA Path Renderer [workaround]", fBlacklistMSAAPathRenderer);
writer->appendBool("Prefer VRAM Use over flushes [workaround]", fPreferVRAMUseOverFlushes);
writer->appendBool("Avoid stencil buffers [workaround]", fAvoidStencilBuffers);

View File

@ -41,7 +41,7 @@ GrPathRendererChain::GrPathRendererChain(GrContext* context, const Options& opti
}
#ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK
if (options.fGpuPathRenderers & GpuPathRenderers::kMSAA) {
if (caps.sampleShadingSupport()) {
if (caps.sampleShadingSupport() && !caps.blacklistMSAAPathRenderer()) {
fChain.push_back(sk_make_sp<GrMSAAPathRenderer>());
}
}

View File

@ -131,6 +131,10 @@ void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDevicePropertie
fNewCBOnPipelineChange = true;
}
if (kIntel_VkVendor == properties.vendorID) {
fCanUseWholeSizeOnFlushMappedMemory = false;
}
////////////////////////////////////////////////////////////////////////////
// GrCaps workarounds
////////////////////////////////////////////////////////////////////////////
@ -144,8 +148,14 @@ void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDevicePropertie
fMaxVertexAttributes = SkTMin(fMaxVertexAttributes, 32);
}
if (kIntel_VkVendor == properties.vendorID) {
fCanUseWholeSizeOnFlushMappedMemory = false;
if (kQualcomm_VkVendor == properties.vendorID) {
// http://skbug.com/7758 -- the bots have a rendering issue related to the MSAA path
// renderer. It doesn't repro locally, and there doesn't seem to be a correlation between it
// and the driver version. Blacklisting across-the-board for now.
//
// properties.driverVersion=93622907, Android 8.1 -> no repro
// properties.driverVersion=159578699, Android 8.0 -> repros
fBlacklistMSAAPathRenderer = true;
}
////////////////////////////////////////////////////////////////////////////