nir: Make lowering gl_LocalInvocationIndex optional
Cc: "12.0" <mesa-stable@lists.freedesktop.org> Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -1752,6 +1752,8 @@ nir_intrinsic_from_system_value(gl_system_value val)
|
||||
return nir_intrinsic_load_sample_mask_in;
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_ID:
|
||||
return nir_intrinsic_load_local_invocation_id;
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_INDEX:
|
||||
return nir_intrinsic_load_local_invocation_index;
|
||||
case SYSTEM_VALUE_WORK_GROUP_ID:
|
||||
return nir_intrinsic_load_work_group_id;
|
||||
case SYSTEM_VALUE_NUM_WORK_GROUPS:
|
||||
@@ -1801,6 +1803,8 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
|
||||
return SYSTEM_VALUE_SAMPLE_MASK_IN;
|
||||
case nir_intrinsic_load_local_invocation_id:
|
||||
return SYSTEM_VALUE_LOCAL_INVOCATION_ID;
|
||||
case nir_intrinsic_load_local_invocation_index:
|
||||
return SYSTEM_VALUE_LOCAL_INVOCATION_INDEX;
|
||||
case nir_intrinsic_load_num_work_groups:
|
||||
return SYSTEM_VALUE_NUM_WORK_GROUPS;
|
||||
case nir_intrinsic_load_work_group_id:
|
||||
|
@@ -1682,6 +1682,8 @@ typedef struct nir_shader_compiler_options {
|
||||
|
||||
/* Indicates that the driver only has zero-based vertex id */
|
||||
bool vertex_id_zero_based;
|
||||
|
||||
bool lower_cs_local_index_from_id;
|
||||
} nir_shader_compiler_options;
|
||||
|
||||
typedef struct nir_shader_info {
|
||||
|
@@ -44,6 +44,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader)
|
||||
case nir_intrinsic_load_primitive_id:
|
||||
case nir_intrinsic_load_invocation_id:
|
||||
case nir_intrinsic_load_local_invocation_id:
|
||||
case nir_intrinsic_load_local_invocation_index:
|
||||
case nir_intrinsic_load_work_group_id:
|
||||
case nir_intrinsic_load_num_work_groups:
|
||||
shader->info.system_values_read |=
|
||||
|
@@ -299,6 +299,7 @@ SYSTEM_VALUE(tess_level_outer, 4, 0, xx, xx, xx)
|
||||
SYSTEM_VALUE(tess_level_inner, 2, 0, xx, xx, xx)
|
||||
SYSTEM_VALUE(patch_vertices_in, 1, 0, xx, xx, xx)
|
||||
SYSTEM_VALUE(local_invocation_id, 3, 0, xx, xx, xx)
|
||||
SYSTEM_VALUE(local_invocation_index, 1, 0, xx, xx, xx)
|
||||
SYSTEM_VALUE(work_group_id, 3, 0, xx, xx, xx)
|
||||
SYSTEM_VALUE(user_clip_plane, 4, 1, UCP_ID, xx, xx)
|
||||
SYSTEM_VALUE(num_work_groups, 3, 0, xx, xx, xx)
|
||||
|
@@ -48,7 +48,7 @@ convert_block(nir_block *block, nir_builder *b)
|
||||
|
||||
b->cursor = nir_after_instr(&load_var->instr);
|
||||
|
||||
nir_ssa_def *sysval;
|
||||
nir_ssa_def *sysval = NULL;
|
||||
switch (var->data.location) {
|
||||
case SYSTEM_VALUE_GLOBAL_INVOCATION_ID: {
|
||||
/* From the GLSL man page for gl_GlobalInvocationID:
|
||||
@@ -74,6 +74,12 @@ convert_block(nir_block *block, nir_builder *b)
|
||||
}
|
||||
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_INDEX: {
|
||||
/* If lower_cs_local_index_from_id is true, then we derive the local
|
||||
* index from the local id.
|
||||
*/
|
||||
if (!b->shader->options->lower_cs_local_index_from_id)
|
||||
break;
|
||||
|
||||
/* From the GLSL man page for gl_LocalInvocationIndex:
|
||||
*
|
||||
* "The value of gl_LocalInvocationIndex is equal to
|
||||
@@ -111,12 +117,14 @@ convert_block(nir_block *block, nir_builder *b)
|
||||
nir_load_system_value(b, nir_intrinsic_load_base_instance, 0));
|
||||
break;
|
||||
|
||||
default: {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (sysval == NULL) {
|
||||
nir_intrinsic_op sysval_op =
|
||||
nir_intrinsic_from_system_value(var->data.location);
|
||||
sysval = nir_load_system_value(b, sysval_op, 0);
|
||||
break;
|
||||
} /* default */
|
||||
}
|
||||
|
||||
nir_ssa_def_rewrite_uses(&load_var->dest.ssa, nir_src_for_ssa(sysval));
|
||||
|
@@ -40,7 +40,8 @@
|
||||
.lower_fdiv = true, \
|
||||
.lower_flrp64 = true, \
|
||||
.native_integers = true, \
|
||||
.vertex_id_zero_based = true
|
||||
.vertex_id_zero_based = true, \
|
||||
.lower_cs_local_index_from_id = true
|
||||
|
||||
static const struct nir_shader_compiler_options scalar_nir_options = {
|
||||
COMMON_OPTIONS,
|
||||
|
Reference in New Issue
Block a user