[Mesa-dev] [PATCH 2/6] radv: keep track of whether NGG is used for GS on GFX10

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Jul 9 06:43:57 UTC 2019


Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 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 b72d1aa0023..f93ee779f0a 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -3971,6 +3971,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 fc09bad5fe1..bb6f877a6ee 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.22.0



More information about the mesa-dev mailing list