Skip to content

Commit

Permalink
Decorate most builtins as Flat in the spirv writer.
Browse files Browse the repository at this point in the history
Fixes #2032
  • Loading branch information
nical authored and jimblandy committed Sep 1, 2022
1 parent 6b3c111 commit b63436a
Show file tree
Hide file tree
Showing 13 changed files with 42 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/back/spv/writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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, &[]);
}
}
}

Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/access.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/boids.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/collatz.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/control-flow.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/extra.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions tests/out/spv/image.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions tests/out/spv/interface.compute.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions tests/out/spv/interface.fragment.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions tests/out/spv/interface.vertex.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions tests/out/spv/interface.vertex_two_structs.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/multiview.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/out/spv/skybox.spvasm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit b63436a

Please sign in to comment.