summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/src/bgfx_compute.sh
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/src/bgfx_compute.sh')
-rw-r--r--3rdparty/bgfx/src/bgfx_compute.sh43
1 files changed, 31 insertions, 12 deletions
diff --git a/3rdparty/bgfx/src/bgfx_compute.sh b/3rdparty/bgfx/src/bgfx_compute.sh
index 5ad2959b50d..4bb11dcdcd3 100644
--- a/3rdparty/bgfx/src/bgfx_compute.sh
+++ b/3rdparty/bgfx/src/bgfx_compute.sh
@@ -16,14 +16,31 @@ float uintBitsToFloat(uint _x) { return asfloat(_x); }
vec2 uintBitsToFloat(uint2 _x) { return asfloat(_x); }
vec3 uintBitsToFloat(uint3 _x) { return asfloat(_x); }
vec4 uintBitsToFloat(uint4 _x) { return asfloat(_x); }
-uint floatBitsToUint(float _x) { return asuint(_x); }
-uvec2 floatBitsToUint(vec2 _x) { return asuint(_x); }
-uvec3 floatBitsToUint(vec3 _x) { return asuint(_x); }
-uvec4 floatBitsToUint(vec4 _x) { return asuint(_x); }
-int floatBitsToInt(float _x) { return asint(_x); }
-ivec2 floatBitsToInt(vec2 _x) { return asint(_x); }
-ivec3 floatBitsToInt(vec3 _x) { return asint(_x); }
-ivec4 floatBitsToInt(vec4 _x) { return asint(_x); }
+
+uint floatBitsToUint(float _x) { return asuint(_x); }
+uvec2 floatBitsToUint(vec2 _x) { return asuint(_x); }
+uvec3 floatBitsToUint(vec3 _x) { return asuint(_x); }
+uvec4 floatBitsToUint(vec4 _x) { return asuint(_x); }
+
+int floatBitsToInt(float _x) { return asint(_x); }
+ivec2 floatBitsToInt(vec2 _x) { return asint(_x); }
+ivec3 floatBitsToInt(vec3 _x) { return asint(_x); }
+ivec4 floatBitsToInt(vec4 _x) { return asint(_x); }
+
+uint bitfieldReverse(uint _x) { return reversebits(_x); }
+uint2 bitfieldReverse(uint2 _x) { return reversebits(_x); }
+uint3 bitfieldReverse(uint3 _x) { return reversebits(_x); }
+uint4 bitfieldReverse(uint4 _x) { return reversebits(_x); }
+
+uint packHalf2x16(vec2 _x)
+{
+ return (f32tof16(_x.x)<<16) | f32tof16(_x.y);
+}
+
+vec2 unpackHalf2x16(uint _x)
+{
+ return vec2(f16tof32(_x >> 16), f16tof32(_x) );
+}
#define SHARED groupshared
@@ -42,14 +59,16 @@ vec4 imageLoad(Texture2D _image, ivec2 _uv)
return _image.Load(uint3(_uv.xy, 0) );
}
-uint imageLoad(Texture2D<uint> _image, ivec2 _uv)
+uint4 imageLoad(Texture2D<uint> _image, ivec2 _uv)
{
- return _image.Load(uint3(_uv.xy, 0) );
+ uint rr = _image.Load(uint3(_uv.xy, 0) );
+ return uint4(rr, rr, rr, rr);
}
-uint imageLoad(RWTexture2D<uint> _image, ivec2 _uv)
+uint4 imageLoad(RWTexture2D<uint> _image, ivec2 _uv)
{
- return _image[_uv.xy];
+ uint rr = _image[_uv.xy];
+ return uint4(rr, rr, rr, rr);
}
ivec2 imageSize(Texture2D _image)