summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp')
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp129
1 files changed, 129 insertions, 0 deletions
diff --git a/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp
new file mode 100644
index 00000000000..bce2d27d814
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/glslang/Test/hlsl.intrinsics.comp
@@ -0,0 +1,129 @@
+
+
+groupshared uint gs_ua;
+groupshared uint gs_ub;
+groupshared uint gs_uc;
+groupshared uint2 gs_ua2;
+groupshared uint2 gs_ub2;
+groupshared uint2 gs_uc2;
+groupshared uint3 gs_ua3;
+groupshared uint3 gs_ub3;
+groupshared uint3 gs_uc3;
+groupshared uint4 gs_ua4;
+groupshared uint4 gs_ub4;
+groupshared uint4 gs_uc4;
+
+float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
+{
+ uint out_u1;
+
+ // Don't repeat all the pixel/vertex fns - just one for sanity.
+ all(inF0);
+
+ // Test atomics
+ InterlockedAdd(gs_ua, gs_ub);
+ InterlockedAdd(gs_ua, gs_ub, out_u1);
+ InterlockedAnd(gs_ua, gs_ub);
+ InterlockedAnd(gs_ua, gs_ub, out_u1);
+ InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1);
+ InterlockedExchange(gs_ua, gs_ub, out_u1);
+ InterlockedMax(gs_ua, gs_ub);
+ InterlockedMax(gs_ua, gs_ub, out_u1);
+ InterlockedMin(gs_ua, gs_ub);
+ InterlockedMin(gs_ua, gs_ub, out_u1);
+ InterlockedOr(gs_ua, gs_ub);
+ InterlockedOr(gs_ua, gs_ub, out_u1);
+ InterlockedXor(gs_ua, gs_ub);
+ InterlockedXor(gs_ua, gs_ub, out_u1);
+
+ // CheckAccessFullyMapped(3); // TODO: ...
+
+ return 0.0;
+}
+
+float1 ComputeShaderFunction1(float1 inF0, float1 inF1, float1 inF2)
+{
+ // TODO: ... add when float1 prototypes are generated
+ return 0.0;
+}
+
+float2 ComputeShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
+{
+ uint2 out_u2;
+
+ // Don't repeat all the pixel/vertex fns - just one for sanity.
+ all(inF0);
+
+ // Test atomics
+ InterlockedAdd(gs_ua2, gs_ub2);
+ InterlockedAdd(gs_ua2, gs_ub2, out_u2);
+ InterlockedAnd(gs_ua2, gs_ub2);
+ InterlockedAnd(gs_ua2, gs_ub2, out_u2);
+ InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2);
+ InterlockedExchange(gs_ua2, gs_ub2, out_u2);
+ InterlockedMax(gs_ua2, gs_ub2);
+ InterlockedMax(gs_ua2, gs_ub2, out_u2);
+ InterlockedMin(gs_ua2, gs_ub2);
+ InterlockedMin(gs_ua2, gs_ub2, out_u2);
+ InterlockedOr(gs_ua2, gs_ub2);
+ InterlockedOr(gs_ua2, gs_ub2, out_u2);
+ InterlockedXor(gs_ua2, gs_ub2);
+ InterlockedXor(gs_ua2, gs_ub2, out_u2);
+
+ // TODO: ... add when float1 prototypes are generated
+ return float2(1,2);
+}
+
+float3 ComputeShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
+{
+ uint3 out_u3;
+
+ // Don't repeat all the pixel/vertex fns - just one for sanity.
+ all(inF0);
+
+ // Test atomics
+ InterlockedAdd(gs_ua3, gs_ub3);
+ InterlockedAdd(gs_ua3, gs_ub3, out_u3);
+ InterlockedAnd(gs_ua3, gs_ub3);
+ InterlockedAnd(gs_ua3, gs_ub3, out_u3);
+ InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3);
+ InterlockedExchange(gs_ua3, gs_ub3, out_u3);
+ InterlockedMax(gs_ua3, gs_ub3);
+ InterlockedMax(gs_ua3, gs_ub3, out_u3);
+ InterlockedMin(gs_ua3, gs_ub3);
+ InterlockedMin(gs_ua3, gs_ub3, out_u3);
+ InterlockedOr(gs_ua3, gs_ub3);
+ InterlockedOr(gs_ua3, gs_ub3, out_u3);
+ InterlockedXor(gs_ua3, gs_ub3);
+ InterlockedXor(gs_ua3, gs_ub3, out_u3);
+
+ // TODO: ... add when float1 prototypes are generated
+ return float3(1,2,3);
+}
+
+float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
+{
+ uint4 out_u4;
+
+ // Don't repeat all the pixel/vertex fns - just one for sanity.
+ all(inF0);
+
+ // Test atomics
+ InterlockedAdd(gs_ua4, gs_ub4);
+ InterlockedAdd(gs_ua4, gs_ub4, out_u4);
+ InterlockedAnd(gs_ua4, gs_ub4);
+ InterlockedAnd(gs_ua4, gs_ub4, out_u4);
+ InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4);
+ InterlockedExchange(gs_ua4, gs_ub4, out_u4);
+ InterlockedMax(gs_ua4, gs_ub4);
+ InterlockedMax(gs_ua4, gs_ub4, out_u4);
+ InterlockedMin(gs_ua4, gs_ub4);
+ InterlockedMin(gs_ua4, gs_ub4, out_u4);
+ InterlockedOr(gs_ua4, gs_ub4);
+ InterlockedOr(gs_ua4, gs_ub4, out_u4);
+ InterlockedXor(gs_ua4, gs_ub4);
+ InterlockedXor(gs_ua4, gs_ub4, out_u4);
+
+ // TODO: ... add when float1 prototypes are generated
+ return float4(1,2,3,4);
+}