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:
-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
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.multi-patch.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.multi-patch.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.multi-patch.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.multi-patch.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.multi-patch.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.multi-patch.asm.tesc12
-rw-r--r--reference/shaders-msl-no-opt/tesc/passthrough-clip-cull.multi-patch.tesc49
-rw-r--r--reference/shaders-msl-no-opt/vert/cull-distance.for-tess.vert43
-rw-r--r--reference/shaders-msl/frag/clip-distance-varying.frag43
-rw-r--r--reference/shaders-msl/frag/cull-distance-varying.frag43
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-clip-distance.vert41
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert41
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert41
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert41
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc4
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-point-size.tesc4
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc4
-rw-r--r--reference/shaders-msl/masking/write-outputs.mask-position.tesc4
-rw-r--r--reference/shaders-msl/tese/read-tess-level-in-func.msl2.tese41
-rw-r--r--reference/shaders-msl/tese/triangle-tess-level.tese45
-rw-r--r--spirv_msl.cpp45
39 files changed, 848 insertions, 147 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;
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.msl2.asm.tesc
index 9dfd7d4e..fc872a1a 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.msl2.asm.tesc
@@ -58,8 +58,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;
};
constant spvUnsafeArray<float, 1> _51 = spvUnsafeArray<float, 1>({ 0.0 });
@@ -69,8 +69,8 @@ struct main0_out
{
float4 C_v;
float4 gl_Position;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -87,8 +87,8 @@ kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_
device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4];
gl_out[gl_InvocationID].C_v = _18[gl_InvocationID].v;
gl_out[gl_InvocationID].gl_Position = _33[gl_InvocationID].gl_Position;
- gl_out[gl_InvocationID].gl_ClipDistance[0] = _33[gl_InvocationID].gl_ClipDistance[0];
- gl_out[gl_InvocationID].gl_CullDistance[0] = _33[gl_InvocationID].gl_CullDistance[0];
+ gl_out[gl_InvocationID].gl_ClipDistance = _33[gl_InvocationID].gl_ClipDistance;
+ gl_out[gl_InvocationID].gl_CullDistance = _33[gl_InvocationID].gl_CullDistance;
gl_out_masked[gl_InvocationID] = _33[gl_InvocationID];
device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID];
patchOut.P_v = float4(0.0);
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.multi-patch.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.multi-patch.msl2.asm.tesc
index aec4d3c8..daf07834 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.multi-patch.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-point-size.multi-patch.msl2.asm.tesc
@@ -58,8 +58,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;
};
constant spvUnsafeArray<float, 1> _51 = spvUnsafeArray<float, 1>({ 0.0 });
@@ -69,8 +69,8 @@ struct main0_out
{
float4 C_v;
float4 gl_Position;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -86,8 +86,8 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
device main0_out* gl_out = &spvOut[gl_GlobalInvocationID.x - gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].C_v = _18[gl_GlobalInvocationID.x % 4].v;
gl_out[gl_GlobalInvocationID.x % 4].gl_Position = _33[gl_GlobalInvocationID.x % 4].gl_Position;
- gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0] = _33[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0];
- gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance[0] = _33[gl_GlobalInvocationID.x % 4].gl_CullDistance[0];
+ gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _33[gl_GlobalInvocationID.x % 4].gl_ClipDistance;
+ gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _33[gl_GlobalInvocationID.x % 4].gl_CullDistance;
threadgroup gl_PerVertex spvStoragegl_out_masked[8][4];
threadgroup gl_PerVertex (&gl_out_masked)[4] = spvStoragegl_out_masked[(gl_GlobalInvocationID.x / 4) % 8];
gl_out_masked[gl_GlobalInvocationID.x % 4] = _33[gl_GlobalInvocationID.x % 4];
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.msl2.asm.tesc
index cdd14d91..62b528b9 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.msl2.asm.tesc
@@ -58,8 +58,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;
};
constant spvUnsafeArray<float, 1> _51 = spvUnsafeArray<float, 1>({ 0.0 });
@@ -69,8 +69,8 @@ struct main0_out
{
float4 C_v;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -87,8 +87,8 @@ kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_
device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4];
gl_out[gl_InvocationID].C_v = _18[gl_InvocationID].v;
gl_out[gl_InvocationID].gl_PointSize = _33[gl_InvocationID].gl_PointSize;
- gl_out[gl_InvocationID].gl_ClipDistance[0] = _33[gl_InvocationID].gl_ClipDistance[0];
- gl_out[gl_InvocationID].gl_CullDistance[0] = _33[gl_InvocationID].gl_CullDistance[0];
+ gl_out[gl_InvocationID].gl_ClipDistance = _33[gl_InvocationID].gl_ClipDistance;
+ gl_out[gl_InvocationID].gl_CullDistance = _33[gl_InvocationID].gl_CullDistance;
gl_out_masked[gl_InvocationID] = _33[gl_InvocationID];
device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID];
patchOut.P_v = float4(0.0);
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.multi-patch.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.multi-patch.msl2.asm.tesc
index ec00a00d..c20467af 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.multi-patch.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers-block.mask-position.multi-patch.msl2.asm.tesc
@@ -58,8 +58,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;
};
constant spvUnsafeArray<float, 1> _51 = spvUnsafeArray<float, 1>({ 0.0 });
@@ -69,8 +69,8 @@ struct main0_out
{
float4 C_v;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -86,8 +86,8 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
device main0_out* gl_out = &spvOut[gl_GlobalInvocationID.x - gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].C_v = _18[gl_GlobalInvocationID.x % 4].v;
gl_out[gl_GlobalInvocationID.x % 4].gl_PointSize = _33[gl_GlobalInvocationID.x % 4].gl_PointSize;
- gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0] = _33[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0];
- gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance[0] = _33[gl_GlobalInvocationID.x % 4].gl_CullDistance[0];
+ gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _33[gl_GlobalInvocationID.x % 4].gl_ClipDistance;
+ gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _33[gl_GlobalInvocationID.x % 4].gl_CullDistance;
threadgroup gl_PerVertex spvStoragegl_out_masked[8][4];
threadgroup gl_PerVertex (&gl_out_masked)[4] = spvStoragegl_out_masked[(gl_GlobalInvocationID.x / 4) % 8];
gl_out_masked[gl_GlobalInvocationID.x % 4] = _33[gl_GlobalInvocationID.x % 4];
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.asm.tesc
index 5fcd3b3e..25fe13bf 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.asm.tesc
@@ -48,8 +48,8 @@ struct _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex
{
float4 _RESERVED_IDENTIFIER_FIXUP_gl_Position;
float _RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- float _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[1];
- float _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[1];
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -60,8 +60,8 @@ struct main0_out
{
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_patchOut
@@ -78,8 +78,8 @@ kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_
foo[gl_InvocationID] = _15[gl_InvocationID];
gl_out[gl_InvocationID].gl_Position = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_Position;
gl_out[gl_InvocationID].gl_PointSize = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- gl_out[gl_InvocationID].gl_ClipDistance[0] = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[0];
- gl_out[gl_InvocationID].gl_CullDistance[0] = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[0];
+ gl_out[gl_InvocationID].gl_ClipDistance = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ gl_out[gl_InvocationID].gl_CullDistance = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID];
patchOut.foo_patch = float4(0.0);
foo[gl_InvocationID] = float4(1.0);
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.multi-patch.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.multi-patch.asm.tesc
index a598710a..b58ba996 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.multi-patch.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-0.msl2.multi-patch.asm.tesc
@@ -48,8 +48,8 @@ struct _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex
{
float4 _RESERVED_IDENTIFIER_FIXUP_gl_Position;
float _RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- float _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[1];
- float _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[1];
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -60,8 +60,8 @@ struct main0_out
{
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_patchOut
@@ -79,8 +79,8 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
foo[gl_GlobalInvocationID.x % 4] = _15[gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].gl_Position = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_Position;
gl_out[gl_GlobalInvocationID.x % 4].gl_PointSize = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0] = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[0];
- gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance[0] = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[0];
+ gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
device main0_patchOut& patchOut = spvPatchOut[gl_GlobalInvocationID.x / 4];
patchOut.foo_patch = float4(0.0);
uint gl_InvocationID = gl_GlobalInvocationID.x % 4;
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.asm.tesc
index 0e188838..e8f1146b 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.asm.tesc
@@ -48,8 +48,8 @@ struct _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex
{
float4 _RESERVED_IDENTIFIER_FIXUP_gl_Position;
float _RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- float _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[1];
- float _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[1];
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -61,8 +61,8 @@ struct main0_out
float4 foo;
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_patchOut
@@ -77,8 +77,8 @@ kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_
gl_out[gl_InvocationID].foo = _15[gl_InvocationID];
gl_out[gl_InvocationID].gl_Position = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_Position;
gl_out[gl_InvocationID].gl_PointSize = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- gl_out[gl_InvocationID].gl_ClipDistance[0] = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[0];
- gl_out[gl_InvocationID].gl_CullDistance[0] = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[0];
+ gl_out[gl_InvocationID].gl_ClipDistance = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ gl_out[gl_InvocationID].gl_CullDistance = _29[gl_InvocationID]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID];
foo_patch = float4(0.0);
gl_out[gl_InvocationID].foo = float4(1.0);
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.multi-patch.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.multi-patch.asm.tesc
index 57e5ce12..167c24c5 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.multi-patch.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-location-1.multi-patch.asm.tesc
@@ -48,8 +48,8 @@ struct _RESERVED_IDENTIFIER_FIXUP_gl_PerVertex
{
float4 _RESERVED_IDENTIFIER_FIXUP_gl_Position;
float _RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- float _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[1];
- float _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[1];
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ spvUnsafeArray<float, 1> _RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -61,8 +61,8 @@ struct main0_out
float4 foo;
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_patchOut
@@ -76,8 +76,8 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
gl_out[gl_GlobalInvocationID.x % 4].foo = _15[gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].gl_Position = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_Position;
gl_out[gl_GlobalInvocationID.x % 4].gl_PointSize = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_PointSize;
- gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0] = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance[0];
- gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance[0] = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance[0];
+ gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_ClipDistance;
+ gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _29[gl_GlobalInvocationID.x % 4]._RESERVED_IDENTIFIER_FIXUP_gl_CullDistance;
device main0_patchOut& patchOut = spvPatchOut[gl_GlobalInvocationID.x / 4];
threadgroup float4 spvStoragefoo_patch[8];
threadgroup float4 (&foo_patch) = spvStoragefoo_patch[(gl_GlobalInvocationID.x / 4) % 8];
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.asm.tesc
index 355d4237..344751b0 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.asm.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;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -60,8 +60,8 @@ struct main0_out
{
float4 foo;
float4 gl_Position;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -77,8 +77,8 @@ kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_
device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4];
gl_out[gl_InvocationID].foo = _15[gl_InvocationID];
gl_out[gl_InvocationID].gl_Position = _29[gl_InvocationID].gl_Position;
- gl_out[gl_InvocationID].gl_ClipDistance[0] = _29[gl_InvocationID].gl_ClipDistance[0];
- gl_out[gl_InvocationID].gl_CullDistance[0] = _29[gl_InvocationID].gl_CullDistance[0];
+ gl_out[gl_InvocationID].gl_ClipDistance = _29[gl_InvocationID].gl_ClipDistance;
+ gl_out[gl_InvocationID].gl_CullDistance = _29[gl_InvocationID].gl_CullDistance;
gl_out_masked[gl_InvocationID] = _29[gl_InvocationID];
device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID];
patchOut.foo_patch = float4(0.0);
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.multi-patch.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.multi-patch.asm.tesc
index e81dbad6..33379f2c 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.multi-patch.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-point-size.msl2.multi-patch.asm.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;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -60,8 +60,8 @@ struct main0_out
{
float4 foo;
float4 gl_Position;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -76,8 +76,8 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
device main0_out* gl_out = &spvOut[gl_GlobalInvocationID.x - gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].foo = _15[gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].gl_Position = _29[gl_GlobalInvocationID.x % 4].gl_Position;
- gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0] = _29[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0];
- gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance[0] = _29[gl_GlobalInvocationID.x % 4].gl_CullDistance[0];
+ gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _29[gl_GlobalInvocationID.x % 4].gl_ClipDistance;
+ gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _29[gl_GlobalInvocationID.x % 4].gl_CullDistance;
threadgroup gl_PerVertex spvStoragegl_out_masked[8][4];
threadgroup gl_PerVertex (&gl_out_masked)[4] = spvStoragegl_out_masked[(gl_GlobalInvocationID.x / 4) % 8];
gl_out_masked[gl_GlobalInvocationID.x % 4] = _29[gl_GlobalInvocationID.x % 4];
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.asm.tesc
index 1845d8e7..2f11636a 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.asm.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;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -60,8 +60,8 @@ struct main0_out
{
float4 foo;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -77,8 +77,8 @@ kernel void main0(uint gl_InvocationID [[thread_index_in_threadgroup]], uint gl_
device main0_out* gl_out = &spvOut[gl_PrimitiveID * 4];
gl_out[gl_InvocationID].foo = _15[gl_InvocationID];
gl_out[gl_InvocationID].gl_PointSize = _29[gl_InvocationID].gl_PointSize;
- gl_out[gl_InvocationID].gl_ClipDistance[0] = _29[gl_InvocationID].gl_ClipDistance[0];
- gl_out[gl_InvocationID].gl_CullDistance[0] = _29[gl_InvocationID].gl_CullDistance[0];
+ gl_out[gl_InvocationID].gl_ClipDistance = _29[gl_InvocationID].gl_ClipDistance;
+ gl_out[gl_InvocationID].gl_CullDistance = _29[gl_InvocationID].gl_CullDistance;
gl_out_masked[gl_InvocationID] = _29[gl_InvocationID];
device main0_patchOut& patchOut = spvPatchOut[gl_PrimitiveID];
patchOut.foo_patch = float4(0.0);
diff --git a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.multi-patch.asm.tesc b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.multi-patch.asm.tesc
index af8be746..1fa5d1eb 100644
--- a/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.multi-patch.asm.tesc
+++ b/reference/shaders-msl-no-opt/asm/masking/initializers.mask-position.msl2.multi-patch.asm.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;
};
constant spvUnsafeArray<float4, 4> _15 = spvUnsafeArray<float4, 4>({ float4(0.0), float4(0.0), float4(0.0), float4(0.0) });
@@ -60,8 +60,8 @@ struct main0_out
{
float4 foo;
float gl_PointSize;
- float gl_ClipDistance[1];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 1> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_patchOut
@@ -76,8 +76,8 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
device main0_out* gl_out = &spvOut[gl_GlobalInvocationID.x - gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].foo = _15[gl_GlobalInvocationID.x % 4];
gl_out[gl_GlobalInvocationID.x % 4].gl_PointSize = _29[gl_GlobalInvocationID.x % 4].gl_PointSize;
- gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0] = _29[gl_GlobalInvocationID.x % 4].gl_ClipDistance[0];
- gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance[0] = _29[gl_GlobalInvocationID.x % 4].gl_CullDistance[0];
+ gl_out[gl_GlobalInvocationID.x % 4].gl_ClipDistance = _29[gl_GlobalInvocationID.x % 4].gl_ClipDistance;
+ gl_out[gl_GlobalInvocationID.x % 4].gl_CullDistance = _29[gl_GlobalInvocationID.x % 4].gl_CullDistance;
threadgroup gl_PerVertex spvStoragegl_out_masked[8][4];
threadgroup gl_PerVertex (&gl_out_masked)[4] = spvStoragegl_out_masked[(gl_GlobalInvocationID.x / 4) % 8];
gl_out_masked[gl_GlobalInvocationID.x % 4] = _29[gl_GlobalInvocationID.x % 4];
diff --git a/reference/shaders-msl-no-opt/tesc/passthrough-clip-cull.multi-patch.tesc b/reference/shaders-msl-no-opt/tesc/passthrough-clip-cull.multi-patch.tesc
index c2c3c4b6..34a1bf4b 100644
--- a/reference/shaders-msl-no-opt/tesc/passthrough-clip-cull.multi-patch.tesc
+++ b/reference/shaders-msl-no-opt/tesc/passthrough-clip-cull.multi-patch.tesc
@@ -1,20 +1,61 @@
+#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
{
- float gl_ClipDistance[2];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 2> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
struct main0_in
{
uint3 m_57;
ushort2 m_61;
- float gl_ClipDistance[2];
- float gl_CullDistance[1];
+ spvUnsafeArray<float, 2> gl_ClipDistance;
+ spvUnsafeArray<float, 1> gl_CullDistance;
};
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device main0_out* spvOut [[buffer(28)]], constant uint* spvIndirectParams [[buffer(29)]], device MTLQuadTessellationFactorsHalf* spvTessLevel [[buffer(26)]], device main0_in* spvIn [[buffer(22)]])
diff --git a/reference/shaders-msl-no-opt/vert/cull-distance.for-tess.vert b/reference/shaders-msl-no-opt/vert/cull-distance.for-tess.vert
index 0e66293d..5c2311d7 100644
--- a/reference/shaders-msl-no-opt/vert/cull-distance.for-tess.vert
+++ b/reference/shaders-msl-no-opt/vert/cull-distance.for-tess.vert
@@ -1,12 +1,53 @@
+#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;
- float gl_CullDistance[2];
+ spvUnsafeArray<float, 2> gl_CullDistance;
};
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
diff --git a/reference/shaders-msl/frag/clip-distance-varying.frag b/reference/shaders-msl/frag/clip-distance-varying.frag
index 6c3f1739..9a72d5ba 100644
--- a/reference/shaders-msl/frag/clip-distance-varying.frag
+++ b/reference/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/shaders-msl/frag/cull-distance-varying.frag b/reference/shaders-msl/frag/cull-distance-varying.frag
index ddde8e1d..708a2957 100644
--- a/reference/shaders-msl/frag/cull-distance-varying.frag
+++ b/reference/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/shaders-msl/masking/write-outputs.mask-clip-distance.vert b/reference/shaders-msl/masking/write-outputs.mask-clip-distance.vert
index b0fb7441..6f63fb41 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-clip-distance.vert
+++ b/reference/shaders-msl/masking/write-outputs.mask-clip-distance.vert
@@ -1,10 +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)]];
@@ -27,7 +66,7 @@ void write_in_func(thread float4& v0, thread float4& v1, thread float4& gl_Posit
vertex main0_out main0()
{
main0_out out = {};
- float gl_ClipDistance[2] = {};
+ spvUnsafeArray<float, 2> gl_ClipDistance = {};
write_in_func(out.v0, out.v1, out.gl_Position, out.gl_PointSize, gl_ClipDistance);
return out;
}
diff --git a/reference/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert b/reference/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert
index 6aaefd1e..a004a380 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert
+++ b/reference/shaders-msl/masking/write-outputs.mask-location-0.for-tess.vert
@@ -1,16 +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;
};
static inline __attribute__((always_inline))
diff --git a/reference/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert b/reference/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert
index 7f77f945..02288822 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert
+++ b/reference/shaders-msl/masking/write-outputs.mask-location-1.for-tess.vert
@@ -1,16 +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;
};
static inline __attribute__((always_inline))
diff --git a/reference/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert b/reference/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert
index 63ebd678..1307b5b8 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert
+++ b/reference/shaders-msl/masking/write-outputs.mask-point-size.for-tess.vert
@@ -1,16 +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;
};
static inline __attribute__((always_inline))
diff --git a/reference/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc b/reference/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc
index d2c5a13f..a5ed8fdf 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-point-size.multi-patch.tesc
+++ b/reference/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/shaders-msl/masking/write-outputs.mask-point-size.tesc b/reference/shaders-msl/masking/write-outputs.mask-point-size.tesc
index 8bc18b64..8ec2a663 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-point-size.tesc
+++ b/reference/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/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc b/reference/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc
index f48d707e..84d7da36 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-position.multi-patch.tesc
+++ b/reference/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/shaders-msl/masking/write-outputs.mask-position.tesc b/reference/shaders-msl/masking/write-outputs.mask-position.tesc
index e39db69c..da0d2a2d 100644
--- a/reference/shaders-msl/masking/write-outputs.mask-position.tesc
+++ b/reference/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/shaders-msl/tese/read-tess-level-in-func.msl2.tese b/reference/shaders-msl/tese/read-tess-level-in-func.msl2.tese
index 4bcf22d6..1dc3be33 100644
--- a/reference/shaders-msl/tese/read-tess-level-in-func.msl2.tese
+++ b/reference/shaders-msl/tese/read-tess-level-in-func.msl2.tese
@@ -1,10 +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]];
@@ -24,7 +63,7 @@ float4 read_tess_levels(thread float (&gl_TessLevelOuter)[4])
[[ 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/shaders-msl/tese/triangle-tess-level.tese b/reference/shaders-msl/tese/triangle-tess-level.tese
index 975e6298..6930e147 100644
--- a/reference/shaders-msl/tese/triangle-tess-level.tese
+++ b/reference/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;
diff --git a/spirv_msl.cpp b/spirv_msl.cpp
index 4e716d06..f13e8451 100644
--- a/spirv_msl.cpp
+++ b/spirv_msl.cpp
@@ -2771,34 +2771,12 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor
auto &type = this->get<SPIRType>(var.basetype);
uint32_t index = get_extended_member_decoration(var.self, mbr_idx, SPIRVCrossDecorationInterfaceMemberIndex);
- auto &mbr_type = this->get<SPIRType>(type.member_types[mbr_idx]);
-
- bool unroll_array = !mbr_type.array.empty() && is_builtin;
-
auto invocation = to_tesc_invocation_id();
auto constant_chain = join(to_expression(var.initializer), "[", invocation, "]");
-
- if (unroll_array)
- {
- // Member arrays in these blocks are always native arrays, unroll copy.
- uint32_t len = to_array_size_literal(mbr_type);
-
- for (uint32_t i = 0; i < len; i++)
- {
- statement(to_expression(stage_out_ptr_var_id), "[",
- invocation, "].",
- to_member_name(ib_type, index), "[", i, "] = ",
- constant_chain, ".",
- to_member_name(type, mbr_idx), "[", i, "];");
- }
- }
- else
- {
- statement(to_expression(stage_out_ptr_var_id), "[",
- invocation, "].",
- to_member_name(ib_type, index), " = ",
- constant_chain, ".", to_member_name(type, mbr_idx), ";");
- }
+ statement(to_expression(stage_out_ptr_var_id), "[",
+ invocation, "].",
+ to_member_name(ib_type, index), " = ",
+ constant_chain, ".", to_member_name(type, mbr_idx), ";");
});
}
else
@@ -10419,8 +10397,10 @@ string CompilerMSL::to_struct_member(const SPIRType &type, uint32_t member_type_
// we need flat arrays, but if we're somehow declaring gl_PerVertex for constant array reasons, we want
// template array types to be declared.
bool is_ib_in_out =
- ((stage_out_var_id && get_stage_out_struct_type().self == type.self) ||
- (stage_in_var_id && get_stage_in_struct_type().self == type.self));
+ ((stage_out_var_id && get_stage_out_struct_type().self == type.self &&
+ variable_storage_requires_stage_io(StorageClassOutput)) ||
+ (stage_in_var_id && get_stage_in_struct_type().self == type.self &&
+ variable_storage_requires_stage_io(StorageClassInput)));
if (is_ib_in_out && is_member_builtin(type, index, &builtin))
is_using_builtin_array = true;
array_type = type_to_array_glsl(physical_type);
@@ -10446,11 +10426,8 @@ void CompilerMSL::emit_struct_member(const SPIRType &type, uint32_t member_type_
// Handle HLSL-style 0-based vertex/instance index.
builtin_declaration = true;
- bool old_is_using_builtin_array = is_using_builtin_array;
- is_using_builtin_array = has_member_decoration(type.self, index, DecorationBuiltIn);
statement(to_struct_member(type, member_type_id, index, qualifier));
builtin_declaration = false;
- is_using_builtin_array = old_is_using_builtin_array;
}
void CompilerMSL::emit_struct_padding_target(const SPIRType &type)
@@ -13256,11 +13233,7 @@ std::string CompilerMSL::variable_decl(const SPIRVariable &variable)
bool old_is_using_builtin_array = is_using_builtin_array;
// Threadgroup arrays can't have a wrapper type.
- // More special cases. ClipDistance and CullDistance are emitted as plain arrays in stage out,
- // so preserve that property when emitting them as masked variables. Avoids lots of extra special casing
- // in argument_decl(). Similar argument for TessLevels.
- if (variable_decl_is_remapped_storage(variable, StorageClassWorkgroup) ||
- has_decoration(variable.self, DecorationBuiltIn))
+ if (variable_decl_is_remapped_storage(variable, StorageClassWorkgroup))
is_using_builtin_array = true;
std::string expr = CompilerGLSL::variable_decl(variable);