Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
}
}
ctx->shader_info->fs.num_interp = index;
}
}
ctx->shader_info->fs.num_interp = index;
- if (ctx->input_mask & (1 << VARYING_SLOT_PNTC))
- ctx->shader_info->fs.has_pcoord = true;
- if (ctx->input_mask & (1 << VARYING_SLOT_PRIMITIVE_ID))
- ctx->shader_info->fs.prim_id_input = true;
- if (ctx->input_mask & (1 << VARYING_SLOT_LAYER))
- ctx->shader_info->fs.layer_input = true;
ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
if (ctx->shader_info->info.needs_multiview_view_index)
ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
if (ctx->shader_info->info.needs_multiview_view_index)
unsigned num_interp;
uint32_t input_mask;
uint32_t flat_shaded_mask;
unsigned num_interp;
uint32_t input_mask;
uint32_t flat_shaded_mask;
bool can_discard;
bool early_fragment_test;
bool can_discard;
bool early_fragment_test;
- bool prim_id_input;
- bool layer_input;
} fs;
struct {
unsigned block_size[3];
} fs;
struct {
unsigned block_size[3];
struct ac_shader_info *info)
{
const struct glsl_type *type = glsl_without_array(var->type);
struct ac_shader_info *info)
{
const struct glsl_type *type = glsl_without_array(var->type);
+ int idx = var->data.location;
+
+ switch (idx) {
+ case VARYING_SLOT_PNTC:
+ info->ps.has_pcoord = true;
+ break;
+ case VARYING_SLOT_PRIMITIVE_ID:
+ info->ps.prim_id_input = true;
+ break;
+ case VARYING_SLOT_LAYER:
+ info->ps.layer_input = true;
+ break;
+ default:
+ break;
+ }
if (glsl_get_base_type(type) == GLSL_TYPE_FLOAT) {
if (var->data.sample)
if (glsl_get_base_type(type) == GLSL_TYPE_FLOAT) {
if (var->data.sample)
bool writes_z;
bool writes_stencil;
bool writes_sample_mask;
bool writes_z;
bool writes_stencil;
bool writes_sample_mask;
+ bool has_pcoord;
+ bool prim_id_input;
+ bool layer_input;
} ps;
struct {
bool uses_grid_size;
} ps;
struct {
bool uses_grid_size;
/* TODO: These are no longer used as keys we should refactor this */
keys[MESA_SHADER_VERTEX].vs.export_prim_id =
/* TODO: These are no longer used as keys we should refactor this */
keys[MESA_SHADER_VERTEX].vs.export_prim_id =
- pipeline->shaders[MESA_SHADER_FRAGMENT]->info.fs.prim_id_input;
+ pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.prim_id_input;
keys[MESA_SHADER_TESS_EVAL].tes.export_prim_id =
keys[MESA_SHADER_TESS_EVAL].tes.export_prim_id =
- pipeline->shaders[MESA_SHADER_FRAGMENT]->info.fs.prim_id_input;
+ pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.prim_id_input;
}
if (device->physical_device->rad_info.chip_class >= GFX9 && modules[MESA_SHADER_TESS_CTRL]) {
}
if (device->physical_device->rad_info.chip_class >= GFX9 && modules[MESA_SHADER_TESS_CTRL]) {
- if (ps->info.fs.prim_id_input) {
+ if (ps->info.info.ps.prim_id_input) {
unsigned vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID];
if (vs_offset != AC_EXP_PARAM_UNDEFINED) {
ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, true);
unsigned vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID];
if (vs_offset != AC_EXP_PARAM_UNDEFINED) {
ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, true);
- if (ps->info.fs.layer_input) {
+ if (ps->info.info.ps.layer_input ||
+ ps->info.info.ps.uses_input_attachments ||
+ ps->info.info.needs_multiview_view_index) {
unsigned vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_LAYER];
if (vs_offset != AC_EXP_PARAM_UNDEFINED)
ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, true);
unsigned vs_offset = outinfo->vs_output_param_offset[VARYING_SLOT_LAYER];
if (vs_offset != AC_EXP_PARAM_UNDEFINED)
ps_input_cntl[ps_offset] = offset_to_ps_input(vs_offset, true);
- if (ps->info.fs.has_pcoord) {
+ if (ps->info.info.ps.has_pcoord) {
unsigned val;
val = S_028644_PT_SPRITE_TEX(1) | S_028644_OFFSET(0x20);
ps_input_cntl[ps_offset] = val;
unsigned val;
val = S_028644_PT_SPRITE_TEX(1) | S_028644_OFFSET(0x20);
ps_input_cntl[ps_offset] = val;
}
ia_multi_vgt_param.ia_switch_on_eoi = false;
}
ia_multi_vgt_param.ia_switch_on_eoi = false;
- if (pipeline->shaders[MESA_SHADER_FRAGMENT]->info.fs.prim_id_input)
+ if (pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.prim_id_input)
ia_multi_vgt_param.ia_switch_on_eoi = true;
if (radv_pipeline_has_gs(pipeline) &&
pipeline->shaders[MESA_SHADER_GEOMETRY]->info.info.uses_prim_id)
ia_multi_vgt_param.ia_switch_on_eoi = true;
if (radv_pipeline_has_gs(pipeline) &&
pipeline->shaders[MESA_SHADER_GEOMETRY]->info.info.uses_prim_id)