i965/nir/gs: Implement support for gl_InvocationID system value

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
Iago Toral Quiroga 2015-07-01 10:12:10 +02:00 committed by Jason Ekstrand
parent 7eced3aa86
commit 287b006a67
2 changed files with 29 additions and 0 deletions

View file

@ -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);
}

View file

@ -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,