Mesa (master): radv/ac: mark used descriptor sets in shader info.

Dave Airlie airlied at kemper.freedesktop.org
Tue Apr 18 23:01:00 UTC 2017


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Apr 18 05:44:46 2017 +1000

radv/ac: mark used descriptor sets in shader info.

This pre calculates the used descriptor sets.

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/amd/common/ac_shader_info.c | 34 ++++++++++++++++++++++++++++++++++
 src/amd/common/ac_shader_info.h |  1 +
 2 files changed, 35 insertions(+)

diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c
index 79c13767f6..33f68550bb 100644
--- a/src/amd/common/ac_shader_info.c
+++ b/src/amd/common/ac_shader_info.c
@@ -23,6 +23,12 @@
 #include "nir.h"
 #include "ac_shader_info.h"
 #include "ac_nir_to_llvm.h"
+
+static void mark_sampler_desc(nir_variable *var, struct ac_shader_info *info)
+{
+	info->desc_set_used_mask = (1 << var->data.descriptor_set);
+}
+
 static void
 gather_intrinsic_info(nir_intrinsic_instr *instr, struct ac_shader_info *info)
 {
@@ -36,12 +42,37 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, struct ac_shader_info *info)
 	case nir_intrinsic_load_num_work_groups:
 		info->cs.grid_components_used = instr->num_components;
 		break;
+	case nir_intrinsic_vulkan_resource_index:
+		info->desc_set_used_mask |= (1 << nir_intrinsic_desc_set(instr));
+		break;
+	case nir_intrinsic_image_load:
+	case nir_intrinsic_image_store:
+	case nir_intrinsic_image_atomic_add:
+	case nir_intrinsic_image_atomic_min:
+	case nir_intrinsic_image_atomic_max:
+	case nir_intrinsic_image_atomic_and:
+	case nir_intrinsic_image_atomic_or:
+	case nir_intrinsic_image_atomic_xor:
+	case nir_intrinsic_image_atomic_exchange:
+	case nir_intrinsic_image_atomic_comp_swap:
+	case nir_intrinsic_image_size:
+		mark_sampler_desc(instr->variables[0]->var, info);
+		break;
 	default:
 		break;
 	}
 }
 
 static void
+gather_tex_info(nir_tex_instr *instr, struct ac_shader_info *info)
+{
+	if (instr->sampler)
+		mark_sampler_desc(instr->sampler->var, info);
+	if (instr->texture)
+		mark_sampler_desc(instr->texture->var, info);
+}
+
+static void
 gather_info_block(nir_block *block, struct ac_shader_info *info)
 {
 	nir_foreach_instr(instr, block) {
@@ -49,6 +80,9 @@ gather_info_block(nir_block *block, struct ac_shader_info *info)
 		case nir_instr_type_intrinsic:
 			gather_intrinsic_info(nir_instr_as_intrinsic(instr), info);
 			break;
+		case nir_instr_type_tex:
+			gather_tex_info(nir_instr_as_tex(instr), info);
+			break;
 		default:
 			break;
 		}
diff --git a/src/amd/common/ac_shader_info.h b/src/amd/common/ac_shader_info.h
index 32153fb67f..3a3d2c471a 100644
--- a/src/amd/common/ac_shader_info.h
+++ b/src/amd/common/ac_shader_info.h
@@ -29,6 +29,7 @@ struct ac_nir_compiler_options;
 
 struct ac_shader_info {
 	bool needs_push_constants;
+	uint32_t desc_set_used_mask;
 	struct {
 		bool has_vertex_buffers; /* needs vertex buffers and base/start */
 		bool needs_draw_id;




More information about the mesa-commit mailing list