From 4087eaecd081856ace5c4a161a6dd3ea69194650 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 18 Apr 2017 05:44:46 +1000 Subject: radv/ac: mark used descriptor sets in shader info. This pre calculates the used descriptor sets. Reviewed-by: Bas Nieuwenhuizen Signed-off-by: Dave Airlie --- src/amd/common/ac_shader_info.c | 34 ++++++++++++++++++++++++++++++++++ src/amd/common/ac_shader_info.h | 1 + 2 files changed, 35 insertions(+) (limited to 'src/amd/common') diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c index 79c13767f67..33f68550bbc 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,11 +42,36 @@ 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) { @@ -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 32153fb67fc..3a3d2c471a4 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; -- cgit v1.2.3