From: Dave Airlie <airl...@redhat.com> This pre calculates the used descriptor sets.
Signed-off-by: Dave Airlie <airl...@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 b319bb1..e1732f2 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) { @@ -40,12 +46,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) { @@ -53,6 +84,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 3d644ab..ddfa175 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_base_vertex_start_instance; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev