Module: Mesa Branch: master Commit: b84d1a0c42c5a1973ebc53a49fd941590e540a82 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b84d1a0c42c5a1973ebc53a49fd941590e540a82
Author: Samuel Pitoiset <[email protected]> Date: Tue Oct 13 14:13:15 2020 +0200 radv/aco: disable NGG GS support because it randomly hangs the GPU Disable ACO NGG GS until the random GPU hangs are fixed (one CTS run == one GPU hang here). No hangs so far after 5 full CTS runs with this disabled. Signed-off-by: Samuel Pitoiset <[email protected]> Acked-by: Timur Kristóf <[email protected]> Reviewed-by: Daniel Schürmann <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7108> --- src/amd/vulkan/radv_device.c | 2 ++ src/amd/vulkan/radv_pipeline.c | 9 +++++++++ src/amd/vulkan/radv_private.h | 3 +++ src/amd/vulkan/radv_query.c | 2 +- src/amd/vulkan/radv_shader.c | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 4574465b5a7..160263b5e03 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -402,6 +402,8 @@ radv_physical_device_try_create(struct radv_instance *instance, device->rad_info.has_dedicated_vram && !(device->instance->debug_flags & RADV_DEBUG_NO_NGG); + /* FIXME: ACO NGG GS randomly hangs the GPU with CTS. */ + device->use_ngg_gs = device->use_ngg && device->use_llvm; device->use_ngg_streamout = false; /* Determine the number of threads per wave for all stages. */ diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index bfd65075ca9..70ad869d615 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2577,6 +2577,15 @@ radv_fill_shader_keys(struct radv_device *device, keys[MESA_SHADER_TESS_EVAL].vs_common_out.as_ngg = false; } + if (!device->physical_device->use_ngg_gs) { + if (nir[MESA_SHADER_GEOMETRY]) { + if (nir[MESA_SHADER_TESS_CTRL]) + keys[MESA_SHADER_TESS_EVAL].vs_common_out.as_ngg = false; + else + keys[MESA_SHADER_VERTEX].vs_common_out.as_ngg = false; + } + } + gl_shader_stage last_xfb_stage = MESA_SHADER_VERTEX; for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index d17ab1dc7b8..5bb6bbfae8a 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -299,6 +299,9 @@ struct radv_physical_device { /* Whether to enable NGG. */ bool use_ngg; + /* Whether to enable NGG GS. */ + bool use_ngg_gs; + /* Whether to enable NGG streamout. */ bool use_ngg_streamout; diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index d49bc0f0564..b2e61abc9ae 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -1134,7 +1134,7 @@ radv_query_pool_needs_gds(struct radv_device *device, * TODO: fix use of NGG GS and non-NGG GS inside the same begin/end * query. */ - return device->physical_device->use_ngg && + return device->physical_device->use_ngg_gs && (pool->pipeline_stats_mask & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT); } diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 25705e9cea0..5740ba7bd39 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -557,7 +557,7 @@ radv_shader_compile_to_nir(struct radv_device *device, if (nir->info.stage == MESA_SHADER_GEOMETRY) { unsigned nir_gs_flags = nir_lower_gs_intrinsics_per_stream; - if (device->physical_device->use_ngg && !radv_use_llvm_for_stage(device, stage)) { + if (device->physical_device->use_ngg_gs && !radv_use_llvm_for_stage(device, stage)) { /* ACO needs NIR to do some of the hard lifting */ nir_gs_flags |= nir_lower_gs_intrinsics_count_primitives | nir_lower_gs_intrinsics_count_vertices_per_primitive | _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
