Add support for 3D textures in compute shaders.

This commit is contained in:
Andrew Mac 2015-08-08 09:49:12 -03:00
parent 9c9dc90336
commit 933d59591b

View file

@ -57,6 +57,13 @@ vec2 unpackHalf2x16(uint _x)
#define IMAGE2D_RW( _name, _reg) RWTexture2D<float> _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 UIMAGE2D_RW(_name, _reg) RWTexture2D<uint> _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_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 BUFFER_RO(_name, _struct, _reg) Buffer<_struct> _name : register(t[_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]) #define BUFFER_RW(_name, _struct, _reg) RWBuffer<_struct> _name : register(u[_reg])
#define BUFFER_WR(_name, _struct, _reg) BUFFER_RW(_name, _struct, _reg) #define BUFFER_WR(_name, _struct, _reg) BUFFER_RW(_name, _struct, _reg)
@ -70,6 +77,16 @@ vec2 unpackHalf2x16(uint _x)
} \ } \
\ \
void imageStore(RWTexture2D<_textureType> _image, ivec2 _uv, _type _value) \ void imageStore(RWTexture2D<_textureType> _image, ivec2 _uv, _type _value) \
{ \
_image[_uv] = _value._storeComponents; \
} \
\
_type imageLoad(Texture3D<_textureType> _image, ivec3 _uv) \
{ \
return _image[_uv]._loadComponents; \
} \
\
void imageStore(RWTexture3D<_textureType> _image, ivec3 _uv, _type _value) \
{ \ { \
_image[_uv] = _value._storeComponents; \ _image[_uv] = _value._storeComponents; \
} }
@ -180,6 +197,13 @@ uint atomicCompSwap(uint _mem, uint _compare, uint _data)
#define IMAGE2D_RW( _name, _reg) __IMAGE_XX(_name, r32f, _reg, image2D, readwrite) #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 UIMAGE2D_RW(_name, _reg) __IMAGE_XX(_name, r32ui, _reg, uimage2D, 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, image2D, readwrite)
#define UIMAGE3D_RW(_name, _reg) __IMAGE_XX(_name, r32ui, _reg, uimage2D, readwrite)
#define __BUFFER_XX(_name, _type, _reg, _access) \ #define __BUFFER_XX(_name, _type, _reg, _access) \
layout(std430, binding=_reg) _access buffer _name ## Buffer \ layout(std430, binding=_reg) _access buffer _name ## Buffer \
{ \ { \