Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2021-04-16 13:18:31 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2021-04-19 13:10:49 +0300
commit682a227f4b2e251a5bae89fa76849ace743926ad (patch)
tree386a3a10015b231332157c317f170c2c4479040f /reference/opt/shaders-msl
parentc1edd35d579e708336cf8f8e2c981960ce6dd6e8 (diff)
MSL: Make builtin argument type declaration context sensitive.
Sometimes we'll need array template, sometimes not :shrug:.
Diffstat (limited to 'reference/opt/shaders-msl')
-rw-r--r--reference/opt/shaders-msl/frag/read-cull-clip-distance-in-function.frag72
1 files changed, 72 insertions, 0 deletions
diff --git a/reference/opt/shaders-msl/frag/read-cull-clip-distance-in-function.frag b/reference/opt/shaders-msl/frag/read-cull-clip-distance-in-function.frag
new file mode 100644
index 00000000..3c9757eb
--- /dev/null
+++ b/reference/opt/shaders-msl/frag/read-cull-clip-distance-in-function.frag
@@ -0,0 +1,72 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+#pragma clang diagnostic ignored "-Wmissing-braces"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+template<typename T, size_t Num>
+struct spvUnsafeArray
+{
+ T elements[Num ? Num : 1];
+
+ thread T& operator [] (size_t pos) thread
+ {
+ return elements[pos];
+ }
+ constexpr const thread T& operator [] (size_t pos) const thread
+ {
+ return elements[pos];
+ }
+
+ device T& operator [] (size_t pos) device
+ {
+ return elements[pos];
+ }
+ constexpr const device T& operator [] (size_t pos) const device
+ {
+ return elements[pos];
+ }
+
+ constexpr const constant T& operator [] (size_t pos) const constant
+ {
+ return elements[pos];
+ }
+
+ threadgroup T& operator [] (size_t pos) threadgroup
+ {
+ return elements[pos];
+ }
+ constexpr const threadgroup T& operator [] (size_t pos) const threadgroup
+ {
+ return elements[pos];
+ }
+};
+
+struct main0_out
+{
+ float4 FragColor [[color(0)]];
+};
+
+struct main0_in
+{
+ float gl_ClipDistance_0 [[user(clip0)]];
+ float gl_ClipDistance_1 [[user(clip1)]];
+ float gl_CullDistance_0 [[user(cull0)]];
+ float gl_CullDistance_1 [[user(cull1)]];
+};
+
+fragment main0_out main0(main0_in in [[stage_in]])
+{
+ main0_out out = {};
+ spvUnsafeArray<float, 2> gl_CullDistance = {};
+ spvUnsafeArray<float, 2> gl_ClipDistance = {};
+ gl_CullDistance[0] = in.gl_CullDistance_0;
+ gl_CullDistance[1] = in.gl_CullDistance_1;
+ gl_ClipDistance[0] = in.gl_ClipDistance_0;
+ gl_ClipDistance[1] = in.gl_ClipDistance_1;
+ out.FragColor = float4(gl_CullDistance[0], gl_CullDistance[1], gl_ClipDistance[0], gl_ClipDistance[1]);
+ return out;
+}
+