mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-06 06:00:26 +01:00
nir/spirv: Handle the WorkgroupSize builtin decoration
This fixes the 7 dEQP-VK.pipeline.spec_constant.compute.local_size.* tests
in the latest dev version of the Vulkan CTS.
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 1f7b54ed29)
This commit is contained in:
parent
6efd37f30d
commit
09b2be7a51
1 changed files with 22 additions and 0 deletions
|
|
@ -931,6 +931,25 @@ get_specialization(struct vtn_builder *b, struct vtn_value *val,
|
|||
return const_value;
|
||||
}
|
||||
|
||||
static void
|
||||
handle_workgroup_size_decoration_cb(struct vtn_builder *b,
|
||||
struct vtn_value *val,
|
||||
int member,
|
||||
const struct vtn_decoration *dec,
|
||||
void *data)
|
||||
{
|
||||
assert(member == -1);
|
||||
if (dec->decoration != SpvDecorationBuiltIn ||
|
||||
dec->literals[0] != SpvBuiltInWorkgroupSize)
|
||||
return;
|
||||
|
||||
assert(val->const_type == glsl_vector_type(GLSL_TYPE_UINT, 3));
|
||||
|
||||
b->shader->info.cs.local_size[0] = val->constant->value.u[0];
|
||||
b->shader->info.cs.local_size[1] = val->constant->value.u[1];
|
||||
b->shader->info.cs.local_size[2] = val->constant->value.u[2];
|
||||
}
|
||||
|
||||
static void
|
||||
vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
|
||||
const uint32_t *w, unsigned count)
|
||||
|
|
@ -1151,6 +1170,9 @@ vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
|
|||
default:
|
||||
unreachable("Unhandled opcode");
|
||||
}
|
||||
|
||||
/* Now that we have the value, update the workgroup size if needed */
|
||||
vtn_foreach_decoration(b, val, handle_workgroup_size_decoration_cb, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue