2ed171e525
Storage was in place already, so mostly just dealing with bitcasts and constants. Simplies some of the bitcasting logic, and this exposed some bugs in the implementation. Refactor to use correct width integers with explicit bitcast opcodes.
40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
#version 450
|
|
#if defined(GL_AMD_gpu_shader_int16)
|
|
#extension GL_AMD_gpu_shader_int16 : require
|
|
#else
|
|
#error No extension available for Int16.
|
|
#endif
|
|
#if defined(GL_AMD_gpu_shader_half_float)
|
|
#extension GL_AMD_gpu_shader_half_float : require
|
|
#elif defined(GL_NV_gpu_shader5)
|
|
#extension GL_NV_gpu_shader5 : require
|
|
#else
|
|
#error No extension available for FP16.
|
|
#endif
|
|
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
|
|
|
layout(binding = 1, std430) buffer SSBO1
|
|
{
|
|
i16vec4 outputs[];
|
|
} _21;
|
|
|
|
layout(binding = 0, std430) buffer SSBO0
|
|
{
|
|
ivec4 inputs[];
|
|
} _29;
|
|
|
|
layout(binding = 2, std140) uniform UBO
|
|
{
|
|
f16vec4 const0;
|
|
} _40;
|
|
|
|
void main()
|
|
{
|
|
uint ident = gl_GlobalInvocationID.x;
|
|
i16vec2 _47 = unpackInt2x16(_29.inputs[ident].x) + float16BitsToInt16(_40.const0.xy);
|
|
_21.outputs[ident] = i16vec4(_47.x, _47.y, _21.outputs[ident].z, _21.outputs[ident].w);
|
|
i16vec2 _66 = i16vec2(unpackUint2x16(uint(_29.inputs[ident].y)) - float16BitsToUint16(_40.const0.zw));
|
|
_21.outputs[ident] = i16vec4(_21.outputs[ident].x, _21.outputs[ident].y, _66.x, _66.y);
|
|
}
|
|
|