From 63e0675d986744a9ed2d9a15b7cba84ff4a24fc2 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 9 Jul 2019 08:43:57 +0200 Subject: [PATCH] radv: keep track of whether NGG is used for GS on GFX10 Signed-off-by: Samuel Pitoiset Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_nir_to_llvm.c | 1 + src/amd/vulkan/radv_pipeline.c | 4 +++- src/amd/vulkan/radv_shader.h | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c index 67630c4ee92..1b89518a383 100644 --- a/src/amd/vulkan/radv_nir_to_llvm.c +++ b/src/amd/vulkan/radv_nir_to_llvm.c @@ -3972,6 +3972,7 @@ ac_fill_shader_info(struct radv_shader_variant_info *shader_info, struct nir_sha shader_info->gs.vertices_out = nir->info.gs.vertices_out; shader_info->gs.output_prim = nir->info.gs.output_primitive; shader_info->gs.invocations = nir->info.gs.invocations; + shader_info->is_ngg = options->key.gs.as_ngg; break; case MESA_SHADER_TESS_EVAL: shader_info->tes.primitive_mode = nir->info.tess.primitive_mode; diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 23aefc5ffd0..419263c63b6 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2254,7 +2254,9 @@ radv_fill_shader_keys(struct radv_device *device, } if (device->physical_device->rad_info.chip_class >= GFX10) { - if (nir[MESA_SHADER_TESS_CTRL]) { + if (nir[MESA_SHADER_GEOMETRY]) { + keys[MESA_SHADER_GEOMETRY].gs.as_ngg = true; + } else if (nir[MESA_SHADER_TESS_CTRL]) { keys[MESA_SHADER_TESS_EVAL].tes.out.as_ngg = true; } else { keys[MESA_SHADER_VERTEX].vs.out.as_ngg = true; diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index f8933614bd7..b4f833d7570 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -112,12 +112,18 @@ struct radv_fs_variant_key { uint32_t is_int10; }; + +struct radv_gs_variant_key { + uint32_t as_ngg:1; +}; + struct radv_shader_variant_key { union { struct radv_vs_variant_key vs; struct radv_fs_variant_key fs; struct radv_tes_variant_key tes; struct radv_tcs_variant_key tcs; + struct radv_gs_variant_key gs; }; bool has_multiview_view_index; }; -- 2.30.2