2cc374a0c8
Buffer objects can contain arbitrary pointers to blocks. We can also implement ConvertPtrToU and ConvertUToPtr. The latter can cast a uint64_t to any type as it pleases, so we will need to generate fake buffer reference blocks to be able to cast the type.
26 lines
509 B
Plaintext
26 lines
509 B
Plaintext
#version 450
|
|
#extension GL_EXT_buffer_reference : require
|
|
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
|
|
|
layout(buffer_reference) buffer Block;
|
|
layout(buffer_reference, std430) buffer Block
|
|
{
|
|
float v;
|
|
};
|
|
|
|
layout(set = 0, binding = 0, std140) uniform UBO
|
|
{
|
|
Block blocks[4];
|
|
} ubo;
|
|
|
|
void main()
|
|
{
|
|
Block blocks[4];
|
|
blocks[0] = ubo.blocks[0];
|
|
blocks[1] = ubo.blocks[1];
|
|
blocks[2] = ubo.blocks[2];
|
|
blocks[3] = ubo.blocks[3];
|
|
blocks[gl_WorkGroupID.x].v = 20.0;
|
|
}
|
|
|