Explorar el Código

compute: Fixed imageSize.

Branimir Karadžić hace 8 años
padre
commit
748a9af62a
Se han modificado 1 ficheros con 33 adiciones y 54 borrados
  1. 33 54
      src/bgfx_compute.sh

+ 33 - 54
src/bgfx_compute.sh

@@ -14,33 +14,35 @@
 
 #define SHARED groupshared
 
-#define r32ui   uint
-#define r32f    float
-#define rg16f   float2
-#define rgba16f float4
-#define rgba8   float4
-#define rgba32f float4
-
-#define IMAGE2D_RO( _name, _format, _reg) Texture2D<_format>   _name : register(t[_reg])
-#define UIMAGE2D_RO(_name, _format, _reg) Texture2D<_format>   _name : register(t[_reg])
+#define r32ui    uint
+#define rg32ui   uint2
+#define rgba32ui uint4
+#define r32f     float
+#define rg16f    float2
+#define rgba16f  float4
+#define rgba8    float4
+#define rgba32f  float4
+
+#define IMAGE2D_RO( _name, _format, _reg)   Texture2D<_format> _name : register(t[_reg])
+#define UIMAGE2D_RO(_name, _format, _reg)   Texture2D<_format> _name : register(t[_reg])
 #define IMAGE2D_WR( _name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
 #define UIMAGE2D_WR(_name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
-#define IMAGE2D_RW( _name,          _reg) RWTexture2D<float>   _name : register(u[_reg])
-#define UIMAGE2D_RW(_name,          _reg) RWTexture2D<uint>    _name : register(u[_reg])
+#define IMAGE2D_RW( _name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
+#define UIMAGE2D_RW(_name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
 
-#define IMAGE2D_ARRAY_RO( _name, _format, _reg) Texture2DArray<_format>   _name : register(t[_reg])
-#define UIMAGE2D_ARRAY_RO(_name, _format, _reg) Texture2DArray<_format>   _name : register(t[_reg])
+#define IMAGE2D_ARRAY_RO( _name, _format, _reg)   Texture2DArray<_format> _name : register(t[_reg])
+#define UIMAGE2D_ARRAY_RO(_name, _format, _reg)   Texture2DArray<_format> _name : register(t[_reg])
 #define IMAGE2D_ARRAY_WR( _name, _format, _reg) RWTexture2DArray<_format> _name : register(u[_reg])
 #define UIMAGE2D_ARRAY_WR(_name, _format, _reg) RWTexture2DArray<_format> _name : register(u[_reg])
-#define IMAGE2D_ARRAY_RW( _name,          _reg) RWTexture2DArray<float>   _name : register(u[_reg])
-#define UIMAGE2D_ARRAY_RW(_name,          _reg) RWTexture2DArray<uint>    _name : register(u[_reg])
+#define IMAGE2D_ARRAY_RW( _name, _format, _reg) RWTexture2DArray<_format> _name : register(u[_reg])
+#define UIMAGE2D_ARRAY_RW(_name, _format, _reg) RWTexture2DArray<_format> _name : register(u[_reg])
 
-#define IMAGE3D_RO( _name, _format, _reg) Texture3D<_format>   _name : register(t[_reg])
-#define UIMAGE3D_RO(_name, _format, _reg) Texture3D<_format>   _name : register(t[_reg])
+#define IMAGE3D_RO( _name, _format, _reg)   Texture3D<_format> _name : register(t[_reg])
+#define UIMAGE3D_RO(_name, _format, _reg)   Texture3D<_format> _name : register(t[_reg])
 #define IMAGE3D_WR( _name, _format, _reg) RWTexture3D<_format> _name : register(u[_reg])
 #define UIMAGE3D_WR(_name, _format, _reg) RWTexture3D<_format> _name : register(u[_reg])
-#define IMAGE3D_RW( _name,          _reg) RWTexture3D<float>   _name : register(u[_reg])
-#define UIMAGE3D_RW(_name,          _reg) RWTexture3D<uint>    _name : register(u[_reg])
+#define IMAGE3D_RW( _name, _format, _reg) RWTexture3D<_format> _name : register(u[_reg])
+#define UIMAGE3D_RW(_name, _format, _reg) RWTexture3D<_format> _name : register(u[_reg])
 
 #define BUFFER_RO(_name, _struct, _reg) Buffer<_struct>   _name : register(t[_reg])
 #define BUFFER_RW(_name, _struct, _reg) RWBuffer<_struct> _name : register(u[_reg])
@@ -56,7 +58,12 @@
 	_type imageLoad(     RWTexture3D<_textureType> _image, ivec3 _uvw)               { return _image[_uvw]._loadComponents;    } \
 	void imageStore(     RWTexture2D<_textureType> _image, ivec2 _uv,  _type _value) { _image[_uv ] = _value._storeComponents; } \
 	void imageStore(RWTexture2DArray<_textureType> _image, ivec3 _uvw, _type _value) { _image[_uvw] = _value._storeComponents; } \
-	void imageStore(     RWTexture3D<_textureType> _image, ivec3 _uvw, _type _value) { _image[_uvw] = _value._storeComponents; }
+	void imageStore(     RWTexture3D<_textureType> _image, ivec3 _uvw, _type _value) { _image[_uvw] = _value._storeComponents; } \
+	ivec2 imageSize(       Texture2D<_textureType> _image)                           { ivec2 result; _image.GetDimensions(result.x, result.y); return result; } \
+	ivec2 imageSize(     RWTexture2D<_textureType> _image)                           { ivec2 result; _image.GetDimensions(result.x, result.y); return result; } \
+	ivec3 imageSize(RWTexture2DArray<_textureType> _image)                           { ivec3 result; _image.GetDimensions(result.x, result.y, result.z); return result; } \
+	ivec3 imageSize(       Texture3D<_textureType> _image)                           { ivec3 result; _image.GetDimensions(result.x, result.y, result.z); return result; } \
+	ivec3 imageSize(     RWTexture3D<_textureType> _image)                           { ivec3 result; _image.GetDimensions(result.x, result.y, result.z); return result; }
 
 __IMAGE_IMPL(float, x,    vec4,  xxxx)
 __IMAGE_IMPL(vec2,  xy,   vec4,  xyyy)
@@ -71,34 +78,6 @@ __IMAGE_IMPL(ivec2, xy,   ivec4, xyyy)
 __IMAGE_IMPL(ivec3, xyz,  ivec4, xyzz)
 __IMAGE_IMPL(ivec4, xyzw, ivec4, xyzw)
 
-ivec2 imageSize(Texture2D _image)
-{
-	ivec2 result;
-	_image.GetDimensions(result.x, result.y);
-	return result;
-}
-
-ivec2 imageSize(Texture2D<uint> _image)
-{
-	ivec2 result;
-	_image.GetDimensions(result.x, result.y);
-	return result;
-}
-
-ivec2 imageSize(RWTexture2D<float4> _image)
-{
-	ivec2 result;
-	_image.GetDimensions(result.x, result.y);
-	return result;
-}
-
-ivec2 imageSize(RWTexture2D<uint> _image)
-{
-	ivec2 result;
-	_image.GetDimensions(result.x, result.y);
-	return result;
-}
-
 #define __ATOMIC_IMPL_TYPE(_genType, _glFunc, _dxFunc)      \
 			_genType _glFunc(_genType _mem, _genType _data) \
 			{                                               \
@@ -155,22 +134,22 @@ uint atomicCompSwap(uint _mem, uint _compare, uint _data)
 #define UIMAGE2D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, readonly)
 #define IMAGE2D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D,  writeonly)
 #define UIMAGE2D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, writeonly)
-#define IMAGE2D_RW( _name,          _reg) __IMAGE_XX(_name, r32f,    _reg, image2D,  readwrite)
-#define UIMAGE2D_RW(_name,          _reg) __IMAGE_XX(_name, r32ui,   _reg, uimage2D, readwrite)
+#define IMAGE2D_RW( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D,  readwrite)
+#define UIMAGE2D_RW(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, readwrite)
 
 #define IMAGE2D_ARRAY_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray,  readonly)
 #define UIMAGE2D_ARRAY_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, readonly)
 #define IMAGE2D_ARRAY_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray,  writeonly)
 #define UIMAGE2D_ARRAY_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, writeonly)
-#define IMAGE2D_ARRAY_RW( _name,          _reg) __IMAGE_XX(_name, r32f,    _reg, image2DArray,  readwrite)
-#define UIMAGE2D_ARRAY_RW(_name,          _reg) __IMAGE_XX(_name, r32ui,   _reg, uimage2DArray, readwrite)
+#define IMAGE2D_ARRAY_RW( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2DArray,  readwrite)
+#define UIMAGE2D_ARRAY_RW(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2DArray, readwrite)
 
 #define IMAGE3D_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D,  readonly)
 #define UIMAGE3D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, readonly)
 #define IMAGE3D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D,  writeonly)
 #define UIMAGE3D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, writeonly)
-#define IMAGE3D_RW( _name,          _reg) __IMAGE_XX(_name, r32f,    _reg, image3D,  readwrite)
-#define UIMAGE3D_RW(_name,          _reg) __IMAGE_XX(_name, r32ui,   _reg, uimage3D, readwrite)
+#define IMAGE3D_RW( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image3D,  readwrite)
+#define UIMAGE3D_RW(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage3D, readwrite)
 
 #define __BUFFER_XX(_name, _type, _reg, _access)                        \
 			layout(std430, binding=_reg) _access buffer _name ## Buffer \