Decorate most builtins as Flat in the spirv writer.

Fixes #2032
This commit is contained in:
Nicolas Silva
2022-08-31 11:17:05 +02:00
committed by Jim Blandy
parent 6b3c111f3f
commit b63436af36
13 changed files with 42 additions and 0 deletions

View File

@@ -1263,6 +1263,26 @@ impl Writer {
};
self.decorate(id, Decoration::BuiltIn, &[built_in as u32]);
use crate::ScalarKind as Sk;
// Per the Vulkan spec, `VUID-StandaloneSpirv-Flat-04744`:
//
// > Any variable with integer or double-precision floating-
// > point type and with Input storage class in a fragment
// > shader, must be decorated Flat
let is_flat = match ir_module.types[ty].inner {
crate::TypeInner::Scalar { kind, .. }
| crate::TypeInner::Vector { kind, .. } => match kind {
Sk::Uint | Sk::Sint | Sk::Bool => true,
Sk::Float => false,
},
_ => false,
};
if is_flat {
self.decorate(id, Decoration::Flat, &[]);
}
}
}

View File

@@ -98,6 +98,7 @@ OpDecorate %78 Binding 3
OpDecorate %79 Block
OpMemberDecorate %79 0 Offset 0
OpDecorate %228 BuiltIn VertexIndex
OpDecorate %228 Flat
OpDecorate %231 BuiltIn Position
OpDecorate %273 Location 0
%2 = OpTypeVoid

View File

@@ -61,6 +61,7 @@ OpDecorate %26 DescriptorSet 0
OpDecorate %26 Binding 2
OpDecorate %19 Block
OpDecorate %48 BuiltIn GlobalInvocationId
OpDecorate %48 Flat
%2 = OpTypeVoid
%4 = OpTypeInt 32 0
%3 = OpConstant %4 1500

View File

@@ -24,6 +24,7 @@ OpDecorate %11 DescriptorSet 0
OpDecorate %11 Binding 0
OpDecorate %9 Block
OpDecorate %46 BuiltIn GlobalInvocationId
OpDecorate %46 Flat
%2 = OpTypeVoid
%4 = OpTypeInt 32 0
%3 = OpConstant %4 0

View File

@@ -8,6 +8,7 @@ OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %44 "main" %41
OpExecutionMode %44 LocalSize 1 1 1
OpDecorate %41 BuiltIn GlobalInvocationId
OpDecorate %41 Flat
%2 = OpTypeVoid
%4 = OpTypeInt 32 1
%3 = OpConstant %4 1

View File

@@ -17,6 +17,7 @@ OpDecorate %12 Block
OpMemberDecorate %12 0 Offset 0
OpDecorate %16 Location 0
OpDecorate %19 BuiltIn PrimitiveId
OpDecorate %19 Flat
OpDecorate %22 Location 0
%2 = OpTypeVoid
%4 = OpTypeFloat 32

View File

@@ -95,7 +95,9 @@ OpDecorate %68 Binding 2
OpDecorate %70 DescriptorSet 1
OpDecorate %70 Binding 3
OpDecorate %73 BuiltIn LocalInvocationId
OpDecorate %73 Flat
OpDecorate %119 BuiltIn LocalInvocationId
OpDecorate %119 Flat
OpDecorate %140 BuiltIn Position
OpDecorate %193 BuiltIn Position
OpDecorate %222 Location 0

View File

@@ -16,10 +16,15 @@ OpDecorate %16 ArrayStride 4
OpMemberDecorate %18 0 Offset 0
OpMemberDecorate %19 0 Offset 0
OpDecorate %23 BuiltIn GlobalInvocationId
OpDecorate %23 Flat
OpDecorate %26 BuiltIn LocalInvocationId
OpDecorate %26 Flat
OpDecorate %28 BuiltIn LocalInvocationIndex
OpDecorate %28 Flat
OpDecorate %31 BuiltIn WorkgroupId
OpDecorate %31 Flat
OpDecorate %33 BuiltIn NumWorkgroups
OpDecorate %33 Flat
%2 = OpTypeVoid
%4 = OpTypeFloat 32
%3 = OpConstant %4 1.0

View File

@@ -21,10 +21,14 @@ OpDecorate %22 Invariant
OpDecorate %22 BuiltIn FragCoord
OpDecorate %25 Location 1
OpDecorate %28 BuiltIn FrontFacing
OpDecorate %28 Flat
OpDecorate %31 BuiltIn SampleId
OpDecorate %31 Flat
OpDecorate %34 BuiltIn SampleMask
OpDecorate %34 Flat
OpDecorate %36 BuiltIn FragDepth
OpDecorate %38 BuiltIn SampleMask
OpDecorate %38 Flat
OpDecorate %40 Location 0
%2 = OpTypeVoid
%4 = OpTypeFloat 32

View File

@@ -15,7 +15,9 @@ OpDecorate %16 ArrayStride 4
OpMemberDecorate %18 0 Offset 0
OpMemberDecorate %19 0 Offset 0
OpDecorate %21 BuiltIn VertexIndex
OpDecorate %21 Flat
OpDecorate %24 BuiltIn InstanceIndex
OpDecorate %24 Flat
OpDecorate %26 Location 10
OpDecorate %28 Invariant
OpDecorate %28 BuiltIn Position

View File

@@ -15,7 +15,9 @@ OpDecorate %16 ArrayStride 4
OpMemberDecorate %18 0 Offset 0
OpMemberDecorate %19 0 Offset 0
OpDecorate %24 BuiltIn VertexIndex
OpDecorate %24 Flat
OpDecorate %28 BuiltIn InstanceIndex
OpDecorate %28 Flat
OpDecorate %30 Invariant
OpDecorate %30 BuiltIn Position
OpDecorate %32 BuiltIn PointSize

View File

@@ -9,6 +9,7 @@ OpExtension "SPV_KHR_multiview"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %8 "main" %5
OpDecorate %5 BuiltIn ViewIndex
OpDecorate %5 Flat
%2 = OpTypeVoid
%3 = OpTypeInt 32 1
%6 = OpTypePointer Input %3

View File

@@ -25,6 +25,7 @@ OpDecorate %22 Binding 1
OpDecorate %24 DescriptorSet 0
OpDecorate %24 Binding 2
OpDecorate %32 BuiltIn VertexIndex
OpDecorate %32 Flat
OpDecorate %35 BuiltIn Position
OpDecorate %37 Location 0
OpDecorate %83 BuiltIn FragCoord