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

Reply via email to