Fix 8-bit storage nearly always using the

UniformAndStorageBuffer8BitAccess capability.

When using the 8-bit storage extension it basically always used the
`UniformAndStorageBuffer8BitAccess` capability, even in cases where it
wasn't required. For instance if we are targeting Vulkan 1.1 (SPIR-V 1.3
or higher), and we are only using 8-bit types in an SSBO, we only need
the `StorageBuffer8BitAccess` capability.

I fixed this by enabling storage buffer use in Vulkan 1.1 / SPIR-V 1.3
or higher, and then changing the logic to match.

I also added some tests that will output different capabilities when run
on Vulkan 1.0 and 1.1, thus they are added twice to the test list (one
for each version).

Fixes #1539
This commit is contained in:
Neil Henning
2018-10-23 15:02:29 +01:00
parent a08f465d53
commit b6b01f067b
27 changed files with 404 additions and 112 deletions

View File

@@ -48,7 +48,7 @@ spv.subgroupBallot.comp
MemberDecorate 46(Buffers) 1 Offset 16
MemberDecorate 46(Buffers) 2 Offset 32
MemberDecorate 46(Buffers) 3 Offset 64
Decorate 46(Buffers) BufferBlock
Decorate 46(Buffers) Block
Decorate 49(data) DescriptorSet 0
Decorate 49(data) Binding 0
Decorate 416 BuiltIn WorkgroupSize
@@ -79,31 +79,31 @@ spv.subgroupBallot.comp
45: TypeVector 44(float64_t) 4
46(Buffers): TypeStruct 41(fvec4) 43(ivec4) 17(ivec4) 45(f64vec4)
47: TypeArray 46(Buffers) 15
48: TypePointer Uniform 47
49(data): 48(ptr) Variable Uniform
48: TypePointer StorageBuffer 47
49(data): 48(ptr) Variable StorageBuffer
51: 42(int) Constant 2
54: 6(int) Constant 0
55: TypePointer Uniform 6(int)
55: TypePointer StorageBuffer 6(int)
60: 42(int) Constant 1
61: 42(int) Constant 0
64: 6(int) Constant 1
72: 6(int) Constant 2
83: TypeVector 36(bool) 4
88: TypePointer Uniform 17(ivec4)
96: TypePointer Uniform 40(float)
88: TypePointer StorageBuffer 17(ivec4)
96: TypePointer StorageBuffer 40(float)
103: TypeVector 40(float) 2
104: TypePointer Uniform 41(fvec4)
104: TypePointer StorageBuffer 41(fvec4)
114: TypeVector 40(float) 3
124: 42(int) Constant 3
131: TypePointer Uniform 42(int)
131: TypePointer StorageBuffer 42(int)
138: TypeVector 42(int) 2
139: TypePointer Uniform 43(ivec4)
139: TypePointer StorageBuffer 43(ivec4)
149: TypeVector 42(int) 3
171: TypeVector 6(int) 2
181: TypeVector 6(int) 3
197: TypePointer Uniform 44(float64_t)
197: TypePointer StorageBuffer 44(float64_t)
204: TypeVector 44(float64_t) 2
205: TypePointer Uniform 45(f64vec4)
205: TypePointer StorageBuffer 45(f64vec4)
215: TypeVector 44(float64_t) 3
242: 138(ivec2) ConstantComposite 61 61
243: TypeVector 36(bool) 2