mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-07 01:10:39 +01:00
i965/nir/gs: Implement support for gl_InvocationID system value
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
7eced3aa86
commit
287b006a67
2 changed files with 29 additions and 0 deletions
|
|
@ -66,6 +66,25 @@ vec4_gs_visitor::nir_setup_inputs(nir_shader *shader)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
vec4_gs_visitor::nir_setup_system_value_intrinsic(nir_intrinsic_instr *instr)
|
||||
{
|
||||
dst_reg *reg;
|
||||
|
||||
switch (instr->intrinsic) {
|
||||
case nir_intrinsic_load_invocation_id:
|
||||
reg = &this->nir_system_values[SYSTEM_VALUE_INVOCATION_ID];
|
||||
if (reg->file == BAD_FILE)
|
||||
*reg = *this->make_reg_for_system_value(SYSTEM_VALUE_INVOCATION_ID,
|
||||
glsl_type::int_type);
|
||||
break;
|
||||
|
||||
default:
|
||||
vec4_visitor::nir_setup_system_value_intrinsic(instr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
vec4_gs_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
||||
{
|
||||
|
|
@ -83,6 +102,15 @@ vec4_gs_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||
gs_end_primitive();
|
||||
break;
|
||||
|
||||
case nir_intrinsic_load_invocation_id: {
|
||||
src_reg invocation_id =
|
||||
src_reg(nir_system_values[SYSTEM_VALUE_INVOCATION_ID]);
|
||||
assert(invocation_id.file != BAD_FILE);
|
||||
dest = get_nir_dest(instr->dest, invocation_id.type);
|
||||
emit(MOV(dest, invocation_id));
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
vec4_visitor::nir_emit_intrinsic(instr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ public:
|
|||
int shader_time_index);
|
||||
|
||||
virtual void nir_setup_inputs(nir_shader *shader);
|
||||
virtual void nir_setup_system_value_intrinsic(nir_intrinsic_instr *instr);
|
||||
|
||||
protected:
|
||||
virtual dst_reg *make_reg_for_system_value(int location,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue