41 lines
874 B
Plaintext
41 lines
874 B
Plaintext
#version 450
|
|
|
|
#extension GL_EXT_buffer_reference : require
|
|
|
|
layout(local_size_x = 1) in;
|
|
|
|
layout(constant_id = 0) const uint c_arg_count = 0;
|
|
layout(constant_id = 1) const bool c_arg_indirect = false;
|
|
|
|
layout(std430, buffer_reference, buffer_reference_align = 4)
|
|
readonly buffer predicate_t {
|
|
uint data;
|
|
};
|
|
|
|
layout(std430, buffer_reference, buffer_reference_align = 4)
|
|
readonly buffer src_args_t {
|
|
uint data[];
|
|
};
|
|
|
|
layout(std430, buffer_reference, buffer_reference_align = 4)
|
|
writeonly buffer dst_args_t {
|
|
uint data[];
|
|
};
|
|
|
|
layout(push_constant)
|
|
uniform u_info_t {
|
|
predicate_t predicate;
|
|
src_args_t src_args;
|
|
dst_args_t dst_args;
|
|
uint cmd_args[5];
|
|
};
|
|
|
|
void main() {
|
|
bool do_exec = predicate.data != 0;
|
|
|
|
for (uint i = 0; i < c_arg_count; i++) {
|
|
uint arg = c_arg_indirect ? src_args.data[i] : cmd_args[i];
|
|
dst_args.data[i] = do_exec ? arg : 0u;
|
|
}
|
|
}
|