|
|
@@ -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 \
|