diff options
Diffstat (limited to '3rdparty/bgfx/src/bgfx_compute.sh')
-rw-r--r-- | 3rdparty/bgfx/src/bgfx_compute.sh | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/3rdparty/bgfx/src/bgfx_compute.sh b/3rdparty/bgfx/src/bgfx_compute.sh index 05eefd88713..f7ebb3758f3 100644 --- a/3rdparty/bgfx/src/bgfx_compute.sh +++ b/3rdparty/bgfx/src/bgfx_compute.sh @@ -1,5 +1,5 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. + * Copyright 2011-2019 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -11,6 +11,20 @@ #ifndef __cplusplus #if BGFX_SHADER_LANGUAGE_GLSL +# define FRAMEBUFFER_IMAGE2D_RW_0(_name, _format) IMAGE2D_RW(_name, _format, 4) +# define FRAMEBUFFER_IMAGE2D_RW_1(_name, _format) IMAGE2D_RW(_name, _format, 5) +# define FRAMEBUFFER_IMAGE2D_RW_2(_name, _format) IMAGE2D_RW(_name, _format, 6) +# define FRAMEBUFFER_IMAGE2D_RW_3(_name, _format) IMAGE2D_RW(_name, _format, 7) +#else +# define FRAMEBUFFER_IMAGE2D_RW_0(_name, _format) IMAGE2D_RW(_name, _format, 16) +# define FRAMEBUFFER_IMAGE2D_RW_1(_name, _format) IMAGE2D_RW(_name, _format, 17) +# define FRAMEBUFFER_IMAGE2D_RW_2(_name, _format) IMAGE2D_RW(_name, _format, 18) +# define FRAMEBUFFER_IMAGE2D_RW_3(_name, _format) IMAGE2D_RW(_name, _format, 19) +#endif // BGFX_SHADER_LANGUAGE_GLSL + +#define FRAMEBUFFER_IMAGE2D_RW(_name, _format, _reg) FRAMEBUFFER_IMAGE2D_RW_ ## _reg(_name, _format) + +#if BGFX_SHADER_LANGUAGE_GLSL #define SHARED shared @@ -68,12 +82,17 @@ #define rg32ui uint2 #define rgba32ui uint4 #define r32f float +#define r16f float #define rg16f float2 #define rgba16f float4 #if BGFX_SHADER_LANGUAGE_HLSL # define rgba8 unorm float4 +# define rg8 unorm float2 +# define r8 unorm float #else # define rgba8 float4 +# define rg8 float2 +# define r8 float #endif // BGFX_SHADER_LANGUAGE_HLSL #define rgba32f float4 @@ -119,9 +138,15 @@ #define IMAGE3D_WR( _name, _format, _reg) IMAGE3D_RW(_name, _format, _reg) #define UIMAGE3D_WR(_name, _format, _reg) IMAGE3D_RW(_name, _format, _reg) +#if BGFX_SHADER_LANGUAGE_METAL || BGFX_SHADER_LANGUAGE_SPIRV +#define BUFFER_RO(_name, _struct, _reg) StructuredBuffer<_struct> _name : REGISTER(t, _reg) +#define BUFFER_RW(_name, _struct, _reg) RWStructuredBuffer <_struct> _name : REGISTER(u, _reg) +#define BUFFER_WR(_name, _struct, _reg) BUFFER_RW(_name, _struct, _reg) +#else #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) +#endif #define NUM_THREADS(_x, _y, _z) [numthreads(_x, _y, _z)] @@ -247,12 +272,24 @@ _image.m_texture[_uvw] = _value._storeComponents; \ } +#define __IMAGE_IMPL_ATOMIC(_format, _storeComponents, _type, _loadComponents) \ + \ + void imageAtomicAdd(BgfxRWImage2D_ ## _format _image, ivec2 _uv, _type _value) \ + { \ + InterlockedAdd(_image.m_texture[_uv], _value._storeComponents); \ + } \ + + __IMAGE_IMPL_A(rgba8, xyzw, vec4, xyzw) +__IMAGE_IMPL_A(rg8, xy, vec4, xyyy) +__IMAGE_IMPL_A(r8, x, vec4, xxxx) __IMAGE_IMPL_A(rg16f, xy, vec4, xyyy) #if BGFX_SHADER_LANGUAGE_HLSL __IMAGE_IMPL_S(rgba16f, xyzw, vec4, xyzw) +__IMAGE_IMPL_S(r16f, x, vec4, xxxx) #else __IMAGE_IMPL_A(rgba16f, xyzw, vec4, xyzw) +__IMAGE_IMPL_A(r16f, x, vec4, xxxx) #endif // BGFX_SHADER_LANGUAGE_HLSL __IMAGE_IMPL_A(r32f, x, vec4, xxxx) __IMAGE_IMPL_A(rgba32f, xyzw, vec4, xyzw) @@ -260,6 +297,8 @@ __IMAGE_IMPL_A(r32ui, x, uvec4, xxxx) __IMAGE_IMPL_A(rg32ui, xy, uvec4, xyyy) __IMAGE_IMPL_A(rgba32ui, xyzw, uvec4, xyzw) +__IMAGE_IMPL_ATOMIC(r32ui, x, uvec4, xxxx) + #define atomicAdd(_mem, _data) InterlockedAdd(_mem, _data) #define atomicAnd(_mem, _data) InterlockedAnd(_mem, _data) #define atomicMax(_mem, _data) InterlockedMax(_mem, _data) |