MSL: Always emit block variable for block types.
authorHans-Kristian Arntzen <post@arntzen-software.no>
Wed, 7 Apr 2021 08:55:40 +0000 (10:55 +0200)
committerHans-Kristian Arntzen <post@arntzen-software.no>
Mon, 19 Apr 2021 10:10:49 +0000 (12:10 +0200)
reference/opt/shaders-msl/masking/write-outputs-block.mask-location-0.for-tess.vert
reference/opt/shaders-msl/masking/write-outputs-block.mask-location-1.for-tess.vert
reference/shaders-msl/masking/write-outputs-block.mask-location-0.for-tess.vert
reference/shaders-msl/masking/write-outputs-block.mask-location-1.for-tess.vert
spirv_msl.cpp

index 89f9679..f7b1acb 100644 (file)
@@ -21,6 +21,7 @@ struct main0_out
 
 kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
 {
+    V _22 = {};
     device main0_out& out = spvOut[gl_GlobalInvocationID.y * spvStageInputSize.x + gl_GlobalInvocationID.x];
     if (any(gl_GlobalInvocationID >= spvStageInputSize))
         return;
index ad36282..25fd5f5 100644 (file)
@@ -21,6 +21,7 @@ struct main0_out
 
 kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
 {
+    V _22 = {};
     device main0_out& out = spvOut[gl_GlobalInvocationID.y * spvStageInputSize.x + gl_GlobalInvocationID.x];
     if (any(gl_GlobalInvocationID >= spvStageInputSize))
         return;
index 89f9679..f7b1acb 100644 (file)
@@ -21,6 +21,7 @@ struct main0_out
 
 kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
 {
+    V _22 = {};
     device main0_out& out = spvOut[gl_GlobalInvocationID.y * spvStageInputSize.x + gl_GlobalInvocationID.x];
     if (any(gl_GlobalInvocationID >= spvStageInputSize))
         return;
index ad36282..25fd5f5 100644 (file)
@@ -21,6 +21,7 @@ struct main0_out
 
 kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], uint3 spvStageInputSize [[grid_size]], device main0_out* spvOut [[buffer(28)]])
 {
+    V _22 = {};
     device main0_out& out = spvOut[gl_GlobalInvocationID.y * spvStageInputSize.x + gl_GlobalInvocationID.x];
     if (any(gl_GlobalInvocationID >= spvStageInputSize))
         return;
index 1ffd937..4b93092 100644 (file)
@@ -2907,7 +2907,7 @@ void CompilerMSL::add_variable_to_interface_block(StorageClass storage, const st
 
        if (var_type.basetype == SPIRType::Struct)
        {
-               if (!is_builtin_type(var_type) && (!capture_output_to_buffer || storage == StorageClassInput) &&
+               if (!is_builtin_type(var_type) && (!capture_output_to_buffer || is_block || storage == StorageClassInput) &&
                    !meta.strip_array)
                {
                        // For I/O blocks or structs, we will need to pass the block itself around