Block MSAA CCPR on NVIDIA without mixed samples

We are still seeing problems on the GTX660. It's not crashing, but
still is producing incorrect renderings. For now let's just block MSAA
CCPR completely on non-mixed-sampled NVIDIA.

Change-Id: I505281cc0731f3c106cbb4c685d41f801955d648
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/255416
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This commit is contained in:
Chris Dalton 2019-11-19 15:10:56 -07:00 committed by Skia Commit-Bot
parent e7b8e4144f
commit c6a278aa71
2 changed files with 12 additions and 11 deletions

View File

@ -385,14 +385,13 @@ void GrVkCaps::init(const GrContextOptions& contextOptions, const GrVkInterface*
this->initStencilFormat(vkInterface, physDev);
if (!contextOptions.fDisableDriverCorrectnessWorkarounds) {
this->applyDriverCorrectnessWorkarounds(properties, extensions);
this->applyDriverCorrectnessWorkarounds(properties);
}
this->finishInitialization(contextOptions);
}
void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDeviceProperties& properties,
const GrVkExtensions& extensions) {
void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDeviceProperties& properties) {
if (kQualcomm_VkVendor == properties.vendorID) {
fMustDoCopiesFromOrigin = true;
// Transfer doesn't support this workaround.
@ -442,13 +441,16 @@ void GrVkCaps::applyDriverCorrectnessWorkarounds(const VkPhysicalDevicePropertie
// GrCaps workarounds
////////////////////////////////////////////////////////////////////////////
// The GTX660 bot experiences crashes when running msaa ccpr with 8k textures.
// (We get VK_ERROR_DEVICE_LOST when calling vkGetFenceStatus.)
// ((Checking for mixed samples is an easy way to detect pre-maxwell architectures.))
bool isNVIDIAPreMaxwell = (kNvidia_VkVendor == properties.vendorID) &&
!extensions.hasExtension(VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME, 1);
// The GTX660 bot experiences crashes and incorrect rendering with MSAA CCPR. Block this path
// renderer on non-mixed-sampled NVIDIA.
// NOTE: We may lose mixed samples support later if the context options suppress dual source
// blending, but that shouldn't be an issue because MSAA CCPR seems to work fine (even without
// mixed samples) on later NVIDIA hardware where mixed samples would be supported.
if ((kNvidia_VkVendor == properties.vendorID) && !fMixedSamplesSupport) {
fDriverBlacklistMSAACCPR = true;
}
if (isNVIDIAPreMaxwell || fDriverBugWorkarounds.max_texture_size_limit_4096) {
if (fDriverBugWorkarounds.max_texture_size_limit_4096) {
fMaxTextureSize = SkTMin(fMaxTextureSize, 4096);
fMaxRenderTargetSize = SkTMin(fMaxRenderTargetSize, fMaxTextureSize);
fMaxPreferredRenderTargetSize = SkTMin(fMaxPreferredRenderTargetSize, fMaxRenderTargetSize);

View File

@ -216,8 +216,7 @@ private:
void initFormatTable(const GrVkInterface*, VkPhysicalDevice, const VkPhysicalDeviceProperties&);
void initStencilFormat(const GrVkInterface* iface, VkPhysicalDevice physDev);
void applyDriverCorrectnessWorkarounds(const VkPhysicalDeviceProperties&,
const GrVkExtensions&);
void applyDriverCorrectnessWorkarounds(const VkPhysicalDeviceProperties&);
bool onSurfaceSupportsWritePixels(const GrSurface*) const override;
bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src,