2022-05-27 22:42:57 +02:00
|
|
|
R"(
|
|
|
|
|
#version 430
|
|
|
|
|
layout(local_size_x=%ws, local_size_y=1, local_size_z=1) in;
|
|
|
|
|
layout(%set, binding=%loc, std430) buffer ssbo{ uint data[]; };
|
|
|
|
|
%ub
|
|
|
|
|
|
|
|
|
|
#define KERNEL_SIZE %ks
|
|
|
|
|
|
|
|
|
|
// Generic swap routines
|
|
|
|
|
#define bswap_u16(bits) (bits & 0xFF) << 8 | (bits & 0xFF00) >> 8 | (bits & 0xFF0000) << 8 | (bits & 0xFF000000) >> 8
|
|
|
|
|
#define bswap_u32(bits) (bits & 0xFF) << 24 | (bits & 0xFF00) << 8 | (bits & 0xFF0000) >> 8 | (bits & 0xFF000000) >> 24
|
|
|
|
|
#define bswap_u16_u32(bits) (bits & 0xFFFF) << 16 | (bits & 0xFFFF0000) >> 16
|
|
|
|
|
|
|
|
|
|
// Depth format conversions
|
2022-06-03 01:07:24 +02:00
|
|
|
#define d24_to_f32(bits) floatBitsToUint(float(bits) / 16777215.f)
|
|
|
|
|
#define f32_to_d24(bits) uint(uintBitsToFloat(bits) * 16777215.f)
|
|
|
|
|
#define d24f_to_f32(bits) (bits << 7)
|
|
|
|
|
#define f32_to_d24f(bits) (bits >> 7)
|
|
|
|
|
#define d24x8_to_f32(bits) d24_to_f32(bits >> 8)
|
|
|
|
|
#define d24x8_to_d24x8_swapped(bits) (bits & 0xFF00) | (bits & 0xFF0000) >> 16 | (bits & 0xFF) << 16
|
|
|
|
|
#define f32_to_d24x8_swapped(bits) d24x8_to_d24x8_swapped(f32_to_d24(bits))
|
2022-05-27 22:42:57 +02:00
|
|
|
|
|
|
|
|
uint linear_invocation_id()
|
|
|
|
|
{
|
|
|
|
|
uint size_in_x = (gl_NumWorkGroups.x * gl_WorkGroupSize.x);
|
|
|
|
|
return (gl_GlobalInvocationID.y * size_in_x) + gl_GlobalInvocationID.x;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
%md
|
|
|
|
|
void main()
|
|
|
|
|
{
|
|
|
|
|
uint invocation_id = linear_invocation_id();
|
|
|
|
|
uint index = invocation_id * KERNEL_SIZE;
|
|
|
|
|
uint value;
|
|
|
|
|
%vars
|
|
|
|
|
|
|
|
|
|
)"
|