Fix const parameter debug types

Constant qualified parameter types were not being correctly added to
the DebugTypeFunction instruction.

Fix #3095.
This commit is contained in:
Jeremy Hayes 2022-12-21 14:20:44 -07:00
parent f9b760e6c7
commit bec8359bf7
4 changed files with 115 additions and 7 deletions

View File

@ -650,8 +650,12 @@ Id Builder::makeDebugFunctionType(Id returnType, const std::vector<Id>& paramTyp
type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic));
type->addIdOperand(debugId[returnType]);
for (auto const paramType : paramTypes) {
assert(isPointerType(paramType) || isArrayType(paramType));
type->addIdOperand(debugId[getContainedTypeId(paramType)]);
if (isPointerType(paramType) || isArrayType(paramType)) {
type->addIdOperand(debugId[getContainedTypeId(paramType)]);
}
else {
type->addIdOperand(debugId[paramType]);
}
}
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
@ -2062,11 +2066,16 @@ Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const
assert(paramTypes.size() == paramNames.size());
for(size_t p = 0; p < paramTypes.size(); ++p)
{
auto const& paramType = paramTypes[p];
assert(isPointerType(paramType) || isArrayType(paramType));
assert(debugId[getContainedTypeId(paramType)] != 0);
auto getParamTypeId = [this](Id const& typeId) {
if (isPointerType(typeId) || isArrayType(typeId)) {
return getContainedTypeId(typeId);
}
else {
return typeId;
}
};
auto const& paramName = paramNames[p];
auto const debugLocalVariableId = createDebugLocalVariable(debugId[getContainedTypeId(paramType)], paramName, p+1);
auto const debugLocalVariableId = createDebugLocalVariable(debugId[getParamTypeId(paramTypes[p])], paramName, p+1);
debugId[firstParamId + p] = debugLocalVariableId;
makeDebugDeclare(debugLocalVariableId, firstParamId + p);

View File

@ -0,0 +1,84 @@
spv.debuginfo.const_params.glsl.comp
Validation failed
// Module Version 10000
// Generated by (magic number): 8000b
// Id's are bound by 64
Capability Shader
Extension "SPV_KHR_non_semantic_info"
1: ExtInstImport "NonSemantic.Shader.DebugInfo.100"
2: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 13 "main"
ExecutionMode 13 LocalSize 1 1 1
8: String "uint"
14: String "main"
17: String ""
24: String "float"
39: String "function"
45: String "f"
49: String "f2"
52: String "f3"
55: String "f4"
Name 13 "main"
Name 38 "function(f1;vf2;vf3;vf4;"
Name 34 "f"
Name 35 "f2"
Name 36 "f3"
Name 37 "f4"
3: TypeVoid
4: TypeFunction 3
6: TypeInt 32 0
9: 6(int) Constant 32
10: 6(int) Constant 6
11: 6(int) Constant 0
7: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 8 9 10 11
12: 6(int) Constant 3
5: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3
16: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(Modf) 0 17
19: 6(int) Constant 1
20: 6(int) Constant 4
21: 6(int) Constant 2
18: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(Round) 19 20 16 21
15: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 14 5 16 11 11 18 14 12 11
23: TypeFloat 32
25: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(RoundEven) 24 9 12 11
26: TypeVector 23(float) 2
27: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 21
28: TypeVector 23(float) 3
29: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 12
30: TypeVector 23(float) 4
31: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(FSign) 25 20
32: TypeFunction 3 23(float) 26(fvec2) 28(fvec3) 30(fvec4)
33: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(Floor) 12 3 25 27 29 31
40: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(Cosh) 39 33 16 11 11 18 39 12 11
44: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 45 25 16 11 11 40 20 19
47: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(Sqrt)
48: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 49 27 16 11 11 40 20 21
51: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 52 29 16 11 11 40 20 12
54: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(Pow) 55 31 16 11 11 40 20 20
59: 23(float) Constant 0
60: 26(fvec2) ConstantComposite 59 59
61: 28(fvec3) ConstantComposite 59 59 59
62: 30(fvec4) ConstantComposite 59 59 59 59
13(main): 3 Function None 4
22: Label
58: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 15 13(main)
63: 3 FunctionCall 38(function(f1;vf2;vf3;vf4;) 59 60 61 62
Return
FunctionEnd
38(function(f1;vf2;vf3;vf4;): 3 Function None 32
34(f): 23(float) FunctionParameter
35(f2): 26(fvec2) FunctionParameter
36(f3): 28(fvec3) FunctionParameter
37(f4): 30(fvec4) FunctionParameter
41: Label
42: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(Acosh) 40
43: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103 16 11 11 11 11
46: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 44 34(f) 47
50: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 48 35(f2) 47
53: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 51 36(f3) 47
56: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(Log) 54 37(f4) 47
57: 3 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101 40 38(function(f1;vf2;vf3;vf4;)
Return
FunctionEnd

View File

@ -0,0 +1,14 @@
#version 450
void function(
const float f,
const vec2 f2,
const vec3 f3,
const vec4 f4)
{
}
void main()
{
function(0, vec2(0), vec3(0), vec4(0));
}

View File

@ -858,7 +858,8 @@ INSTANTIATE_TEST_SUITE_P(
"spv.debuginfo.glsl.comp",
"spv.debuginfo.glsl.geom",
"spv.debuginfo.glsl.tesc",
"spv.debuginfo.glsl.tese"
"spv.debuginfo.glsl.tese",
"spv.debuginfo.const_params.glsl.comp"
})),
FileNameAsCustomTestSuffix
);