Mesa (master): radv: gather clip/cull distances 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: a99d2d5564fbb817d8a3fc4c5f6a551c8659b453
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a99d2d5564fbb817d8a3fc4c5f6a551c8659b453

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Sep  3 17:55:02 2019 +0200

radv: gather clip/cull distances 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 | 21 ---------------------
 src/amd/vulkan/radv_shader_info.c | 25 +++++++++++++++++++++++++
 2 files changed, 25 insertions(+), 21 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index dd31b848961..9574330a4da 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2277,27 +2277,6 @@ scan_shader_output_decl(struct radv_shader_context *ctx,
 	}
 
 	mask_attribs = ((1ull << attrib_count) - 1) << idx;
-	if (stage == MESA_SHADER_VERTEX ||
-	    stage == MESA_SHADER_TESS_EVAL ||
-	    stage == MESA_SHADER_GEOMETRY) {
-		if (idx == VARYING_SLOT_CLIP_DIST0) {
-			if (stage == MESA_SHADER_VERTEX) {
-				ctx->shader_info->vs.outinfo.clip_dist_mask = (1 << shader->info.clip_distance_array_size) - 1;
-				ctx->shader_info->vs.outinfo.cull_dist_mask = (1 << shader->info.cull_distance_array_size) - 1;
-				ctx->shader_info->vs.outinfo.cull_dist_mask <<= shader->info.clip_distance_array_size;
-			}
-			if (stage == MESA_SHADER_TESS_EVAL) {
-				ctx->shader_info->tes.outinfo.clip_dist_mask = (1 << shader->info.clip_distance_array_size) - 1;
-				ctx->shader_info->tes.outinfo.cull_dist_mask = (1 << shader->info.cull_distance_array_size) - 1;
-				ctx->shader_info->tes.outinfo.cull_dist_mask <<= shader->info.clip_distance_array_size;
-			}
-			if (stage == MESA_SHADER_GEOMETRY) {
-				ctx->shader_info->vs.outinfo.clip_dist_mask = (1 << shader->info.clip_distance_array_size) - 1;
-				ctx->shader_info->vs.outinfo.cull_dist_mask = (1 << shader->info.cull_distance_array_size) - 1;
-				ctx->shader_info->vs.outinfo.cull_dist_mask <<= shader->info.clip_distance_array_size;
-			}
-		}
-	}
 
 	ctx->output_mask |= mask_attribs;
 }
diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c
index 33ee0727373..d639980e56a 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -533,20 +533,45 @@ gather_info_output_decl(const nir_shader *nir, const nir_variable *var,
 			struct radv_shader_info *info,
 			const struct radv_nir_compiler_options *options)
 {
+	struct radv_vs_output_info *vs_info = NULL;
+
 	switch (nir->info.stage) {
 	case MESA_SHADER_FRAGMENT:
 		gather_info_output_decl_ps(nir, var, info);
 		break;
 	case MESA_SHADER_VERTEX:
+		if (!options->key.vs_common_out.as_ls &&
+		    !options->key.vs_common_out.as_es)
+			vs_info = &info->vs.outinfo;
+
 		if (options->key.vs_common_out.as_ls)
 			gather_info_output_decl_ls(nir, var, info);
 		break;
 	case MESA_SHADER_GEOMETRY:
+		vs_info = &info->vs.outinfo;
 		gather_info_output_decl_gs(nir, var, info);
 		break;
+	case MESA_SHADER_TESS_EVAL:
+		if (!options->key.vs_common_out.as_es)
+			vs_info = &info->tes.outinfo;
+		break;
 	default:
 		break;
 	}
+
+	if (vs_info) {
+		switch (var->data.location) {
+		case VARYING_SLOT_CLIP_DIST0:
+			vs_info->clip_dist_mask =
+				(1 << nir->info.clip_distance_array_size) - 1;
+			vs_info->cull_dist_mask =
+				(1 << nir->info.cull_distance_array_size) - 1;
+			vs_info->cull_dist_mask <<= nir->info.clip_distance_array_size;
+			break;
+		default:
+			break;
+		}
+	}
 }
 
 static void




More information about the mesa-commit mailing list