Fix #135516: Vulkan: Shader output viewport broken on RDNA2

When using the official RDNA2 driver +vulkan we see the same issue we
as #123787. Adding the same workaround to vulkan as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/135565
This commit is contained in:
Jeroen Bakker
2025-03-06 16:28:47 +01:00
parent b834ca4fb1
commit 37d781aa2a
2 changed files with 21 additions and 2 deletions

View File

@@ -502,8 +502,8 @@ static void detect_workarounds()
}
}
/* Multi viewport creates small triangle discard on RDNA2 GPUs with official drivers.
* Using geometry shader workaround fixes the issue. */
/* Fix #123787: Multi viewport creates small triangle discard on RDNA2 GPUs with official
* drivers. Using geometry shader workaround fixes the issue. */
if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_OFFICIAL)) {
if (strstr(renderer, "RX 6300") || strstr(renderer, "RX 6400") ||
strstr(renderer, "RX 6450") || strstr(renderer, "RX 6500") ||

View File

@@ -425,6 +425,25 @@ void VKBackend::detect_workarounds(VKDevice &device)
}
#endif
/* Fix #123787: Multi viewport creates small triangle discard on RDNA2 GPUs with official
* drivers. Using geometry shader workaround fixes the issue. */
if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_OFFICIAL)) {
const char *renderer = device.physical_device_properties_get().deviceName;
if (strstr(renderer, "RX 6300") || strstr(renderer, "RX 6400") ||
strstr(renderer, "RX 6450") || strstr(renderer, "RX 6500") ||
strstr(renderer, "RX 6550") || strstr(renderer, "RX 6600") ||
strstr(renderer, "RX 6650") || strstr(renderer, "RX 6700") ||
strstr(renderer, "RX 6750") || strstr(renderer, "RX 6800") ||
strstr(renderer, "RX 6850") || strstr(renderer, "RX 6900") ||
strstr(renderer, "RX 6950") || strstr(renderer, "W6300") || strstr(renderer, "W6400") ||
strstr(renderer, "W6500") || strstr(renderer, "W6600") ||
/* NOTE: `W6700` was never released, so it's not in this list. */
strstr(renderer, "W6800") || strstr(renderer, "W6900"))
{
workarounds.shader_output_viewport_index = true;
}
}
device.workarounds_ = workarounds;
}