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 12:45:50 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2021-04-19 13:10:49 +0300
commitc1edd35d579e708336cf8f8e2c981960ce6dd6e8 (patch)
tree972d1bb564e76eeb60208e91e26666f574d643fe /reference/opt/shaders-msl
parent7b9a591aa7f4cc29b3d8fdf30a84842afa46e750 (diff)
MSL: Use spvUnsafeArray for builtin arrays after all.
It will get too messy to deal with constant initializers any other way, so just deal with complexity in argument_decl instead ...
Diffstat (limited to 'reference/opt/shaders-msl')
-rw-r--r--reference/opt/shaders-msl/frag/clip-distance-varying.frag43
-rw-r--r--reference/opt/shaders-msl/frag/cull-distance-varying.frag43
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-clip-distance.vert43
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert43
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert43
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert43
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc4
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-point-size.tesc4
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc4
-rw-r--r--reference/opt/shaders-msl/masking/write-outputs.mask-position.tesc4
-rw-r--r--reference/opt/shaders-msl/tese/read-tess-level-in-func.msl2.tese43
-rw-r--r--reference/opt/shaders-msl/tese/triangle-tess-level.tese45
12 files changed, 345 insertions, 17 deletions
diff --git a/reference/opt/shaders-msl/frag/clip-distance-varying.frag b/reference/opt/shaders-msl/frag/clip-distance-varying.frag
index 6c3f1739..9a72d5ba 100644
--- a/reference/opt/shaders-msl/frag/clip-distance-varying.frag
+++ b/reference/opt/shaders-msl/frag/clip-distance-varying.frag
@@ -1,8 +1,49 @@
+#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)]];
@@ -17,7 +58,7 @@ struct main0_in
fragment main0_out main0(main0_in in [[stage_in]])
{
main0_out out = {};
- float gl_ClipDistance[2] = {};
+ spvUnsafeArray<float, 2> gl_ClipDistance = {};
gl_ClipDistance[0] = in.gl_ClipDistance_0;
gl_ClipDistance[1] = in.gl_ClipDistance_1;
out.FragColor = float4((1.0 - gl_ClipDistance[0]) - gl_ClipDistance[1]);
diff --git a/reference/opt/shaders-msl/frag/cull-distance-varying.frag b/reference/opt/shaders-msl/frag/cull-distance-varying.frag
index ddde8e1d..708a2957 100644
--- a/reference/opt/shaders-msl/frag/cull-distance-varying.frag
+++ b/reference/opt/shaders-msl/frag/cull-distance-varying.frag
@@ -1,8 +1,49 @@
+#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)]];
@@ -17,7 +58,7 @@ struct main0_in
fragment main0_out main0(main0_in in [[stage_in]])
{
main0_out out = {};
- float gl_CullDistance[2] = {};
+ spvUnsafeArray<float, 2> gl_CullDistance = {};
gl_CullDistance[0] = in.gl_CullDistance_0;
gl_CullDistance[1] = in.gl_CullDistance_1;
out.FragColor = float4((1.0 - gl_CullDistance[0]) - gl_CullDistance[1]);
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-clip-distance.vert b/reference/opt/shaders-msl/masking/write-outputs.mask-clip-distance.vert
index 39fd02c0..1f56f34a 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-clip-distance.vert
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-clip-distance.vert
@@ -1,8 +1,49 @@
+#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 v0 [[user(locn0)]];
@@ -14,7 +55,7 @@ struct main0_out
vertex main0_out main0()
{
main0_out out = {};
- float gl_ClipDistance[2] = {};
+ spvUnsafeArray<float, 2> gl_ClipDistance = {};
out.v0 = float4(1.0);
out.v1 = float4(2.0);
out.gl_Position = float4(3.0);
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert b/reference/opt/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert
index 497cf2d5..1c0aab50 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert
@@ -1,14 +1,55 @@
+#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 v1;
float4 gl_Position;
float gl_PointSize;
- float gl_ClipDistance[2];
+ spvUnsafeArray<float, 2> gl_ClipDistance;
};
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert b/reference/opt/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert
index aaa41d42..d558b7ae 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert
@@ -1,14 +1,55 @@
+#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 v0;
float4 gl_Position;
float gl_PointSize;
- float gl_ClipDistance[2];
+ spvUnsafeArray<float, 2> gl_ClipDistance;
};
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert b/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert
index 3142d14c..463ecc87 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert
@@ -1,14 +1,55 @@
+#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 v0;
float4 v1;
float4 gl_Position;
- float gl_ClipDistance[2];
+ spvUnsafeArray<float, 2> gl_ClipDistance;
};
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc b/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc
index 21360341..3b336780 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc
@@ -48,8 +48,8 @@ struct gl_PerVertex
{
float4 gl_Position;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_out
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.tesc b/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.tesc
index bc61d6ff..da976c9a 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.tesc
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-point-size.tesc
@@ -48,8 +48,8 @@ struct gl_PerVertex
{
float4 gl_Position;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_out
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc b/reference/opt/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc
index 3aea5798..7ef25b9f 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc
@@ -48,8 +48,8 @@ struct gl_PerVertex
{
float4 gl_Position;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_out
diff --git a/reference/opt/shaders-msl/masking/write-outputs.mask-position.tesc b/reference/opt/shaders-msl/masking/write-outputs.mask-position.tesc
index fe814f4f..04584de4 100644
--- a/reference/opt/shaders-msl/masking/write-outputs.mask-position.tesc
+++ b/reference/opt/shaders-msl/masking/write-outputs.mask-position.tesc
@@ -48,8 +48,8 @@ struct gl_PerVertex
{
float4 gl_Position;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_out
diff --git a/reference/opt/shaders-msl/tese/read-tess-level-in-func.msl2.tese b/reference/opt/shaders-msl/tese/read-tess-level-in-func.msl2.tese
index b5b7c15f..43da4ae8 100644
--- a/reference/opt/shaders-msl/tese/read-tess-level-in-func.msl2.tese
+++ b/reference/opt/shaders-msl/tese/read-tess-level-in-func.msl2.tese
@@ -1,8 +1,49 @@
+#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 gl_Position [[position]];
@@ -16,7 +57,7 @@ struct main0_patchIn
[[ patch(triangle, 0) ]] vertex main0_out main0(main0_patchIn patchIn [[stage_in]])
{
main0_out out = {};
- float gl_TessLevelOuter[4] = {};
+ spvUnsafeArray<float, 4> gl_TessLevelOuter = {};
gl_TessLevelOuter[0] = patchIn.gl_TessLevel.x;
gl_TessLevelOuter[1] = patchIn.gl_TessLevel.y;
gl_TessLevelOuter[2] = patchIn.gl_TessLevel.z;
diff --git a/reference/opt/shaders-msl/tese/triangle-tess-level.tese b/reference/opt/shaders-msl/tese/triangle-tess-level.tese
index 975e6298..6930e147 100644
--- a/reference/opt/shaders-msl/tese/triangle-tess-level.tese
+++ b/reference/opt/shaders-msl/tese/triangle-tess-level.tese
@@ -1,8 +1,49 @@
+#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 gl_Position [[position]];
@@ -16,8 +57,8 @@ struct main0_patchIn
[[ patch(triangle, 0) ]] vertex main0_out main0(main0_patchIn patchIn [[stage_in]], float3 gl_TessCoord [[position_in_patch]])
{
main0_out out = {};
- float gl_TessLevelInner[2] = {};
- float gl_TessLevelOuter[4] = {};
+ spvUnsafeArray<float, 2> gl_TessLevelInner = {};
+ spvUnsafeArray<float, 4> gl_TessLevelOuter = {};
gl_TessLevelInner[0] = patchIn.gl_TessLevel.w;
gl_TessLevelOuter[0] = patchIn.gl_TessLevel.x;
gl_TessLevelOuter[1] = patchIn.gl_TessLevel.y;