Output 8 and 16 bit capabilities OpSpecConstantOp
OpSpecConstants with 8 or 16 width types require the corresponding capabilities. Fixes #3449.
This commit is contained in:
parent
db933d7743
commit
5ad3d41364
8 changed files with 207 additions and 0 deletions
|
|
@ -2741,6 +2741,14 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& op
|
||||||
module.mapInstruction(op);
|
module.mapInstruction(op);
|
||||||
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(op));
|
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(op));
|
||||||
|
|
||||||
|
// OpSpecConstantOp's using 8 or 16 bit types require the associated capability
|
||||||
|
if (containsType(typeId, OpTypeInt, 8))
|
||||||
|
addCapability(CapabilityInt8);
|
||||||
|
if (containsType(typeId, OpTypeInt, 16))
|
||||||
|
addCapability(CapabilityInt16);
|
||||||
|
if (containsType(typeId, OpTypeFloat, 16))
|
||||||
|
addCapability(CapabilityFloat16);
|
||||||
|
|
||||||
return op->getResultId();
|
return op->getResultId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
47
Test/baseResults/spv.specConstantOp.float16.comp.out
Normal file
47
Test/baseResults/spv.specConstantOp.float16.comp.out
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
spv.specConstantOp.float16.comp
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 8000b
|
||||||
|
// Id's are bound by 18
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability Float16
|
||||||
|
Capability StorageUniformBufferBlock16
|
||||||
|
Extension "SPV_KHR_16bit_storage"
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint GLCompute 4 "main"
|
||||||
|
ExecutionMode 4 LocalSize 1 1 1
|
||||||
|
Source GLSL 450
|
||||||
|
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16"
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "S"
|
||||||
|
MemberName 8(S) 0 "p_out"
|
||||||
|
Name 10 ""
|
||||||
|
Name 14 "c"
|
||||||
|
Decorate 7 ArrayStride 2
|
||||||
|
MemberDecorate 8(S) 0 Restrict
|
||||||
|
MemberDecorate 8(S) 0 NonReadable
|
||||||
|
MemberDecorate 8(S) 0 Offset 0
|
||||||
|
Decorate 8(S) BufferBlock
|
||||||
|
Decorate 10 DescriptorSet 0
|
||||||
|
Decorate 10 Binding 0
|
||||||
|
Decorate 14(c) SpecId 0
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeFloat 16
|
||||||
|
7: TypeRuntimeArray 6(float16_t)
|
||||||
|
8(S): TypeStruct 7
|
||||||
|
9: TypePointer Uniform 8(S)
|
||||||
|
10: 9(ptr) Variable Uniform
|
||||||
|
11: TypeInt 32 1
|
||||||
|
12: 11(int) Constant 0
|
||||||
|
13: TypeFloat 32
|
||||||
|
14(c): 13(float) SpecConstant 1090519040
|
||||||
|
15:6(float16_t) SpecConstantOp 115 14(c)
|
||||||
|
16: TypePointer Uniform 6(float16_t)
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
17: 16(ptr) AccessChain 10 12 12
|
||||||
|
Store 17 15
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
||||||
49
Test/baseResults/spv.specConstantOp.int16.comp.out
Normal file
49
Test/baseResults/spv.specConstantOp.int16.comp.out
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
spv.specConstantOp.int16.comp
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 8000b
|
||||||
|
// Id's are bound by 20
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability Int16
|
||||||
|
Capability StorageUniformBufferBlock16
|
||||||
|
Extension "SPV_KHR_16bit_storage"
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint GLCompute 4 "main"
|
||||||
|
ExecutionMode 4 LocalSize 1 1 1
|
||||||
|
Source GLSL 450
|
||||||
|
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16"
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "S"
|
||||||
|
MemberName 8(S) 0 "p_out"
|
||||||
|
Name 10 ""
|
||||||
|
Name 13 "c"
|
||||||
|
Decorate 7 ArrayStride 2
|
||||||
|
MemberDecorate 8(S) 0 Restrict
|
||||||
|
MemberDecorate 8(S) 0 NonReadable
|
||||||
|
MemberDecorate 8(S) 0 Offset 0
|
||||||
|
Decorate 8(S) BufferBlock
|
||||||
|
Decorate 10 DescriptorSet 0
|
||||||
|
Decorate 10 Binding 0
|
||||||
|
Decorate 13(c) SpecId 0
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 16 0
|
||||||
|
7: TypeRuntimeArray 6(int16_t)
|
||||||
|
8(S): TypeStruct 7
|
||||||
|
9: TypePointer Uniform 8(S)
|
||||||
|
10: 9(ptr) Variable Uniform
|
||||||
|
11: TypeInt 32 1
|
||||||
|
12: 11(int) Constant 0
|
||||||
|
13(c): 11(int) SpecConstant 8
|
||||||
|
14: TypeInt 16 1
|
||||||
|
15: 14(int16_t) SpecConstantOp 114 13(c)
|
||||||
|
16: 6(int16_t) Constant 0
|
||||||
|
17: 6(int16_t) SpecConstantOp 128 15 16
|
||||||
|
18: TypePointer Uniform 6(int16_t)
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
19: 18(ptr) AccessChain 10 12 12
|
||||||
|
Store 19 17
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
||||||
49
Test/baseResults/spv.specConstantOp.int8.comp.out
Normal file
49
Test/baseResults/spv.specConstantOp.int8.comp.out
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
spv.specConstantOp.int8.comp
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 8000b
|
||||||
|
// Id's are bound by 20
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability Int8
|
||||||
|
Capability UniformAndStorageBuffer8BitAccess
|
||||||
|
Extension "SPV_KHR_8bit_storage"
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint GLCompute 4 "main"
|
||||||
|
ExecutionMode 4 LocalSize 1 1 1
|
||||||
|
Source GLSL 450
|
||||||
|
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8"
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "S"
|
||||||
|
MemberName 8(S) 0 "p_out"
|
||||||
|
Name 10 ""
|
||||||
|
Name 13 "c"
|
||||||
|
Decorate 7 ArrayStride 1
|
||||||
|
MemberDecorate 8(S) 0 Restrict
|
||||||
|
MemberDecorate 8(S) 0 NonReadable
|
||||||
|
MemberDecorate 8(S) 0 Offset 0
|
||||||
|
Decorate 8(S) BufferBlock
|
||||||
|
Decorate 10 DescriptorSet 0
|
||||||
|
Decorate 10 Binding 0
|
||||||
|
Decorate 13(c) SpecId 0
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 8 0
|
||||||
|
7: TypeRuntimeArray 6(int8_t)
|
||||||
|
8(S): TypeStruct 7
|
||||||
|
9: TypePointer Uniform 8(S)
|
||||||
|
10: 9(ptr) Variable Uniform
|
||||||
|
11: TypeInt 32 1
|
||||||
|
12: 11(int) Constant 0
|
||||||
|
13(c): 11(int) SpecConstant 8
|
||||||
|
14: TypeInt 8 1
|
||||||
|
15: 14(int8_t) SpecConstantOp 114 13(c)
|
||||||
|
16: 6(int8_t) Constant 0
|
||||||
|
17: 6(int8_t) SpecConstantOp 128 15 16
|
||||||
|
18: TypePointer Uniform 6(int8_t)
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
19: 18(ptr) AccessChain 10 12 12
|
||||||
|
Store 19 17
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
||||||
18
Test/spv.specConstantOp.float16.comp
Normal file
18
Test/spv.specConstantOp.float16.comp
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#version 450
|
||||||
|
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
|
||||||
|
|
||||||
|
// Produce an OpSpecConstantOp with 8 bit integer type
|
||||||
|
|
||||||
|
layout(constant_id = 0) const float c = 8;
|
||||||
|
|
||||||
|
layout(binding=0) writeonly restrict buffer S {
|
||||||
|
float16_t p_out[];
|
||||||
|
};
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
p_out[0] = float16_t(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
16
Test/spv.specConstantOp.int16.comp
Normal file
16
Test/spv.specConstantOp.int16.comp
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#version 450
|
||||||
|
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||||
|
|
||||||
|
// Produce an OpSpecConstantOp with 16 bit integer type
|
||||||
|
|
||||||
|
layout(constant_id = 0) const int c = 8;
|
||||||
|
|
||||||
|
layout(binding=0) writeonly restrict buffer S {
|
||||||
|
uint16_t p_out[];
|
||||||
|
};
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
p_out[0] = uint16_t(c);
|
||||||
|
}
|
||||||
|
|
||||||
17
Test/spv.specConstantOp.int8.comp
Normal file
17
Test/spv.specConstantOp.int8.comp
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
#version 450
|
||||||
|
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
|
||||||
|
|
||||||
|
// Produce an OpSpecConstantOp with 8 bit integer type
|
||||||
|
|
||||||
|
layout(constant_id = 0) const int c = 8;
|
||||||
|
|
||||||
|
layout(binding=0) writeonly restrict buffer S {
|
||||||
|
uint8_t p_out[];
|
||||||
|
};
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
p_out[0] = uint8_t(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -514,6 +514,9 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
"spv.specConstant.float16.comp",
|
"spv.specConstant.float16.comp",
|
||||||
"spv.specConstant.int16.comp",
|
"spv.specConstant.int16.comp",
|
||||||
"spv.specConstant.int8.comp",
|
"spv.specConstant.int8.comp",
|
||||||
|
"spv.specConstantOp.int16.comp",
|
||||||
|
"spv.specConstantOp.int8.comp",
|
||||||
|
"spv.specConstantOp.float16.comp",
|
||||||
"spv.storageBuffer.vert",
|
"spv.storageBuffer.vert",
|
||||||
"spv.terminate.frag",
|
"spv.terminate.frag",
|
||||||
"spv.subgroupUniformControlFlow.vert",
|
"spv.subgroupUniformControlFlow.vert",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue