From 748a9af62a9464eb04ddb6789e2c021b483ac1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Fri, 28 Apr 2017 16:18:59 -0700 Subject: [PATCH] compute: Fixed imageSize. --- src/bgfx_compute.sh | 85 +++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 53 deletions(-) diff --git a/src/bgfx_compute.sh b/src/bgfx_compute.sh index 2bef24d24..8802aa71d 100644 --- a/src/bgfx_compute.sh +++ b/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 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_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 _name : register(u[_reg]) -#define UIMAGE2D_RW(_name, _reg) RWTexture2D _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 _name : register(u[_reg]) -#define UIMAGE2D_ARRAY_RW(_name, _reg) RWTexture2DArray _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 _name : register(u[_reg]) -#define UIMAGE3D_RW(_name, _reg) RWTexture3D _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 _image) -{ - ivec2 result; - _image.GetDimensions(result.x, result.y); - return result; -} - -ivec2 imageSize(RWTexture2D _image) -{ - ivec2 result; - _image.GetDimensions(result.x, result.y); - return result; -} - -ivec2 imageSize(RWTexture2D _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 \