update parallel rdp

This commit is contained in:
Logan McNaughton
2024-08-25 16:51:49 +02:00
parent 80376fafd5
commit 4f239cbc7d
21 changed files with 49460 additions and 54257 deletions
+7 -1
View File
@@ -502,6 +502,8 @@ const PipelineLayout *Device::request_pipeline_layout(const CombinedResourceLayo
h.data(layout.spec_constant_mask, sizeof(layout.spec_constant_mask));
h.u32(layout.attribute_mask);
h.u32(layout.render_target_mask);
// Drivers with and without push descriptor support need to observe different hashes for Fossilize.
h.s32(int(ext.supports_push_descriptor));
for (unsigned set = 0; set < VULKAN_NUM_DESCRIPTOR_SETS; set++)
{
Util::for_each_bit(layout.sets[set].immutable_sampler_mask, [&](unsigned bit) {
@@ -874,7 +876,11 @@ void Device::init_workarounds()
workarounds.emulate_event_as_pipeline_barrier = true;
}
if (ext.driver_id == VK_DRIVER_ID_NVIDIA_PROPRIETARY && gpu_props.driverVersion < VK_VERSION_MAJOR(535))
// For whatever ridiculous reason, pipeline cache control causes GPU hangs on Pascal cards in parallel-rdp.
// Use mesh shaders as the sentinel to check for that.
if (ext.driver_id == VK_DRIVER_ID_NVIDIA_PROPRIETARY &&
(gpu_props.driverVersion < VK_VERSION_MAJOR(535) ||
!ext.mesh_shader_features.meshShader))
{
LOGW("Disabling pipeline cache control.\n");
workarounds.broken_pipeline_cache_control = true;