radv/ac: mark used descriptor sets in shader info.
This pre calculates the used descriptor sets. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
0b62669c8d
commit
4087eaecd0
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue