 b6b01f067b
			
		
	
	
		b6b01f067b
		
	
	
	
	
		
			
			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
		
			
				
	
	
		
			85 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| spv.subgroupBasic.comp
 | |
| // Module Version 10300
 | |
| // Generated by (magic number): 80007
 | |
| // Id's are bound by 40
 | |
| 
 | |
|                               Capability Shader
 | |
|                               Capability GroupNonUniform
 | |
|                1:             ExtInstImport  "GLSL.std.450"
 | |
|                               MemoryModel Logical GLSL450
 | |
|                               EntryPoint GLCompute 4  "main" 14 19 22 25
 | |
|                               ExecutionMode 4 LocalSize 8 8 1
 | |
|                               Source GLSL 450
 | |
|                               SourceExtension  "GL_KHR_shader_subgroup_basic"
 | |
|                               Name 4  "main"
 | |
|                               Name 8  "Buffer"
 | |
|                               MemberName 8(Buffer) 0  "a"
 | |
|                               Name 10  "data"
 | |
|                               Name 14  "gl_SubgroupSize"
 | |
|                               Name 19  "gl_SubgroupInvocationID"
 | |
|                               Name 22  "gl_NumSubgroups"
 | |
|                               Name 25  "gl_SubgroupID"
 | |
|                               Decorate 7 ArrayStride 4
 | |
|                               MemberDecorate 8(Buffer) 0 Offset 0
 | |
|                               Decorate 8(Buffer) Block
 | |
|                               Decorate 10(data) DescriptorSet 0
 | |
|                               Decorate 10(data) Binding 0
 | |
|                               Decorate 14(gl_SubgroupSize) RelaxedPrecision
 | |
|                               Decorate 14(gl_SubgroupSize) BuiltIn SubgroupSize
 | |
|                               Decorate 15 RelaxedPrecision
 | |
|                               Decorate 19(gl_SubgroupInvocationID) RelaxedPrecision
 | |
|                               Decorate 19(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
 | |
|                               Decorate 20 RelaxedPrecision
 | |
|                               Decorate 22(gl_NumSubgroups) BuiltIn NumSubgroups
 | |
|                               Decorate 25(gl_SubgroupID) BuiltIn SubgroupId
 | |
|                               Decorate 39 BuiltIn WorkgroupSize
 | |
|                2:             TypeVoid
 | |
|                3:             TypeFunction 2
 | |
|                6:             TypeInt 32 1
 | |
|                7:             TypeRuntimeArray 6(int)
 | |
|        8(Buffer):             TypeStruct 7
 | |
|                9:             TypePointer StorageBuffer 8(Buffer)
 | |
|         10(data):      9(ptr) Variable StorageBuffer
 | |
|               11:      6(int) Constant 0
 | |
|               12:             TypeInt 32 0
 | |
|               13:             TypePointer Input 12(int)
 | |
| 14(gl_SubgroupSize):     13(ptr) Variable Input
 | |
|               16:      6(int) Constant 1
 | |
|               17:             TypePointer StorageBuffer 6(int)
 | |
| 19(gl_SubgroupInvocationID):     13(ptr) Variable Input
 | |
| 22(gl_NumSubgroups):     13(ptr) Variable Input
 | |
| 25(gl_SubgroupID):     13(ptr) Variable Input
 | |
|               27:             TypeBool
 | |
|               28:     12(int) Constant 3
 | |
|               32:     12(int) Constant 3400
 | |
|               33:     12(int) Constant 72
 | |
|               34:     12(int) Constant 264
 | |
|               35:     12(int) Constant 2056
 | |
|               36:             TypeVector 12(int) 3
 | |
|               37:     12(int) Constant 8
 | |
|               38:     12(int) Constant 1
 | |
|               39:   36(ivec3) ConstantComposite 37 37 38
 | |
|          4(main):           2 Function None 3
 | |
|                5:             Label
 | |
|               15:     12(int) Load 14(gl_SubgroupSize)
 | |
|               18:     17(ptr) AccessChain 10(data) 11 15
 | |
|                               Store 18 16
 | |
|               20:     12(int) Load 19(gl_SubgroupInvocationID)
 | |
|               21:     17(ptr) AccessChain 10(data) 11 20
 | |
|                               Store 21 16
 | |
|               23:     12(int) Load 22(gl_NumSubgroups)
 | |
|               24:     17(ptr) AccessChain 10(data) 11 23
 | |
|                               Store 24 16
 | |
|               26:     12(int) Load 25(gl_SubgroupID)
 | |
|               29:    27(bool) GroupNonUniformElect 28
 | |
|               30:      6(int) Select 29 16 11
 | |
|               31:     17(ptr) AccessChain 10(data) 11 26
 | |
|                               Store 31 30
 | |
|                               ControlBarrier 28 28 32
 | |
|                               MemoryBarrier 28 32
 | |
|                               MemoryBarrier 28 33
 | |
|                               MemoryBarrier 28 34
 | |
|                               MemoryBarrier 28 35
 | |
|                               Return
 | |
|                               FunctionEnd
 |