Mesa (master): radv: Set VGT_GS_MODE properly for gfx9

Dave Airlie airlied at kemper.freedesktop.org
Fri Oct 20 04:55:46 UTC 2017


Module: Mesa
Branch: master
Commit: e6acc20b6a4acd4b80249700863141674ff8da31
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e6acc20b6a4acd4b80249700863141674ff8da31

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Fri Oct 20 03:17:14 2017 +0200

radv: Set VGT_GS_MODE properly for gfx9

Reviewed-by: Dave Airlie <airlied at redhat.com>

---

 src/amd/vulkan/radv_pipeline.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 6e8067a11a..fa87a458b0 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1388,7 +1388,8 @@ static const struct radv_prim_vertex_count prim_size_table[] = {
 	[V_008958_DI_PT_2D_TRI_STRIP] = {0, 0},
 };
 
-static uint32_t si_vgt_gs_mode(struct radv_shader_variant *gs)
+static uint32_t si_vgt_gs_mode(struct radv_shader_variant *gs,
+                               enum chip_class chip_class)
 {
 	unsigned gs_max_vert_out = gs->info.gs.vertices_out;
 	unsigned cut_mode;
@@ -1406,8 +1407,9 @@ static uint32_t si_vgt_gs_mode(struct radv_shader_variant *gs)
 
 	return S_028A40_MODE(V_028A40_GS_SCENARIO_G) |
 	       S_028A40_CUT_MODE(cut_mode)|
-	       S_028A40_ES_WRITE_OPTIMIZE(1) |
-	       S_028A40_GS_WRITE_OPTIMIZE(1);
+	       S_028A40_ES_WRITE_OPTIMIZE(chip_class <= VI) |
+	       S_028A40_GS_WRITE_OPTIMIZE(1) |
+	       S_028A40_ONCHIP(chip_class >= GFX9 ? 1 : 0);
 }
 
 static struct ac_vs_output_info *get_vs_output_info(struct radv_pipeline *pipeline)
@@ -1428,7 +1430,8 @@ static void calculate_vgt_gs_mode(struct radv_pipeline *pipeline)
 	pipeline->graphics.vgt_gs_mode = 0;
 
 	if (radv_pipeline_has_gs(pipeline)) {
-		pipeline->graphics.vgt_gs_mode = si_vgt_gs_mode(pipeline->shaders[MESA_SHADER_GEOMETRY]);
+		pipeline->graphics.vgt_gs_mode = si_vgt_gs_mode(pipeline->shaders[MESA_SHADER_GEOMETRY],
+		                                                pipeline->device->physical_device->rad_info.chip_class);
 	} else if (outinfo->export_prim_id) {
 		pipeline->graphics.vgt_gs_mode = S_028A40_MODE(V_028A40_GS_SCENARIO_A);
 		pipeline->graphics.vgt_primitiveid_en = true;




More information about the mesa-commit mailing list