blob: 43f3b6dba731c39f75d170dab29b563a9999ff2d [file] [edit]
#version 450
#extension GL_EXT_buffer_reference : require
layout(local_size_x = 32) in;
layout(buffer_reference_align = 4, std430, buffer_reference) readonly buffer Indirect
{
uint values[];
};
layout(buffer_reference_align = 4, std430, buffer_reference) writeonly buffer IndirectOutput
{
uint values[];
};
layout(buffer_reference_align = 4, std430, buffer_reference) readonly buffer IndirectCount
{
uint value;
};
layout(push_constant) uniform Registers
{
Indirect indirect;
IndirectCount count;
IndirectOutput out_dispatch;
uint stride_words;
uint max_commands;
};
void main()
{
uint cmd_index = gl_GlobalInvocationID.x;
if (cmd_index >= max_commands)
return;
uint indirect_count = count.value;
uint offset = cmd_index * stride_words;
uvec3 wgs;
if (cmd_index < indirect_count)
{
wgs = uvec3(indirect.values[offset + 0],
indirect.values[offset + 1],
indirect.values[offset + 2]);
}
else
{
wgs = uvec3(0);
}
out_dispatch.values[3 * cmd_index + 0] = wgs.x;
out_dispatch.values[3 * cmd_index + 1] = wgs.y;
out_dispatch.values[3 * cmd_index + 2] = wgs.z;
}