Selaa lähdekoodia

Merge pull request #471 from andr3wmac/compute_3d_textures

Add support for 3D textures in compute shaders.
Branimir Karadžić 10 vuotta sitten
vanhempi
sitoutus
1a13eac2bc
1 muutettua tiedostoa jossa 24 lisäystä ja 0 poistoa
  1. 24 0
      src/bgfx_compute.sh

+ 24 - 0
src/bgfx_compute.sh

@@ -57,6 +57,13 @@ vec2 unpackHalf2x16(uint _x)
 #define IMAGE2D_RW( _name, _reg) RWTexture2D<float> _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_RW(_name, _struct, _reg) RWBuffer<_struct> _name : register(u[_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) \
+			{ \
+				_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; \
 			}
@@ -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 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) \
 			layout(std430, binding=_reg) _access buffer _name ## Buffer \
 			{ \