summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/src/bgfx_compute.sh
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/src/bgfx_compute.sh')
-rw-r--r--3rdparty/bgfx/src/bgfx_compute.sh41
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)