mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 12:30:11 +01:00
nir/spirv: Add support for more CS intrinsics
This commit is contained in:
parent
1035108a7f
commit
2d4b7eda23
1 changed files with 24 additions and 5 deletions
|
|
@ -818,14 +818,12 @@ vtn_get_builtin_location(struct vtn_builder *b,
|
|||
assert(*mode == nir_var_shader_out);
|
||||
break;
|
||||
case SpvBuiltInNumWorkgroups:
|
||||
*location = SYSTEM_VALUE_NUM_WORK_GROUPS;
|
||||
set_mode_system_value(mode);
|
||||
case SpvBuiltInWorkgroupSize:
|
||||
/* these are constants, need to be handled specially */
|
||||
/* This should already be handled */
|
||||
unreachable("unsupported builtin");
|
||||
break;
|
||||
case SpvBuiltInGlobalInvocationId:
|
||||
case SpvBuiltInLocalInvocationIndex:
|
||||
/* these are computed values, need to be handled specially */
|
||||
unreachable("unsupported builtin");
|
||||
case SpvBuiltInWorkgroupId:
|
||||
*location = SYSTEM_VALUE_WORK_GROUP_ID;
|
||||
set_mode_system_value(mode);
|
||||
|
|
@ -834,6 +832,14 @@ vtn_get_builtin_location(struct vtn_builder *b,
|
|||
*location = SYSTEM_VALUE_LOCAL_INVOCATION_ID;
|
||||
set_mode_system_value(mode);
|
||||
break;
|
||||
case SpvBuiltInLocalInvocationIndex:
|
||||
*location = SYSTEM_VALUE_LOCAL_INVOCATION_INDEX;
|
||||
set_mode_system_value(mode);
|
||||
break;
|
||||
case SpvBuiltInGlobalInvocationId:
|
||||
*location = SYSTEM_VALUE_GLOBAL_INVOCATION_ID;
|
||||
set_mode_system_value(mode);
|
||||
break;
|
||||
case SpvBuiltInHelperInvocation:
|
||||
default:
|
||||
unreachable("unsupported builtin");
|
||||
|
|
@ -894,6 +900,19 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
|
|||
case SpvDecorationBuiltIn: {
|
||||
SpvBuiltIn builtin = dec->literals[0];
|
||||
|
||||
if (builtin == SpvBuiltInWorkgroupSize) {
|
||||
/* This shouldn't be a builtin. It's actually a constant. */
|
||||
var->data.mode = nir_var_global;
|
||||
var->data.read_only = true;
|
||||
|
||||
nir_constant *val = ralloc(var, nir_constant);
|
||||
val->value.u[0] = b->shader->info.cs.local_size[0];
|
||||
val->value.u[1] = b->shader->info.cs.local_size[1];
|
||||
val->value.u[2] = b->shader->info.cs.local_size[2];
|
||||
var->constant_initializer = val;
|
||||
break;
|
||||
}
|
||||
|
||||
nir_variable_mode mode = var->data.mode;
|
||||
vtn_get_builtin_location(b, builtin, &var->data.location, &mode);
|
||||
var->data.explicit_location = true;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue