Mesa (master): radv: gather layer in the shader info pass

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Sep 6 14:20:48 UTC 2019


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Sep  3 18:09:00 2019 +0200

radv: gather layer in the shader info pass

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_nir_to_llvm.c | 10 ----------
 src/amd/vulkan/radv_shader_info.c | 20 ++++++++++++++++++++
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index e2d3447879f..334ee1883b4 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2788,10 +2788,6 @@ handle_vs_outputs_post(struct radv_shader_context *ctx,
 	       sizeof(outinfo->vs_output_param_offset));
 	outinfo->pos_exports = 0;
 
-	if (ctx->output_mask & (1ull << VARYING_SLOT_LAYER)) {
-		outinfo->writes_layer = true;
-	}
-
 	if (ctx->shader_info->so.num_outputs &&
 	    !ctx->is_gs_copy_shader) {
 		/* The GS copy shader emission already emits streamout. */
@@ -3506,10 +3502,6 @@ static void gfx10_ngg_gs_emit_epilogue_2(struct radv_shader_context *ctx)
 		tmp = LLVMBuildZExt(builder, tmp, ctx->ac.i32, "");
 		const LLVMValueRef vertexptr = ngg_gs_vertex_ptr(ctx, tmp);
 
-		if (ctx->output_mask & (1ull << VARYING_SLOT_LAYER)) {
-			outinfo->writes_layer = true;
-		}
-
 		unsigned out_idx = 0;
 		gep_idx[1] = ctx->ac.i32_0;
 		for (unsigned i = 0; i < AC_LLVM_MAX_OUTPUTS; ++i) {
@@ -3544,8 +3536,6 @@ static void gfx10_ngg_gs_emit_epilogue_2(struct radv_shader_context *ctx)
 
 		/* Export ViewIndex. */
 		if (export_view_index) {
-			outinfo->writes_layer = true;
-
 			outputs[noutput].slot_name = VARYING_SLOT_LAYER;
 			outputs[noutput].slot_index = 0;
 			outputs[noutput].usage_mask = 0x1;
diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c
index 614a20d5921..ce9823f8485 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -574,6 +574,9 @@ gather_info_output_decl(const nir_shader *nir, const nir_variable *var,
 		case VARYING_SLOT_VIEWPORT:
 			vs_info->writes_viewport_index = true;
 			break;
+		case VARYING_SLOT_LAYER:
+			vs_info->writes_layer = true;
+			break;
 		default:
 			break;
 		}
@@ -667,6 +670,23 @@ radv_nir_shader_info_pass(const struct nir_shader *nir,
 		}
 	}
 
+	/* Make sure to export the LayerID if the subpass has multiviews. */
+	if (options->key.has_multiview_view_index) {
+		switch (nir->info.stage) {
+		case MESA_SHADER_VERTEX:
+			info->vs.outinfo.writes_layer = true;
+			break;
+		case MESA_SHADER_TESS_EVAL:
+			info->tes.outinfo.writes_layer = true;
+			break;
+		case MESA_SHADER_GEOMETRY:
+			info->vs.outinfo.writes_layer = true;
+			break;
+		default:
+			break;
+		}
+	}
+
 	if (nir->info.stage == MESA_SHADER_FRAGMENT)
 		info->ps.num_interp = nir->num_inputs;
 




More information about the mesa-commit mailing list