Implement NonSemantic.Shader.DebugInfo.100
[platform/upstream/glslang.git] / SPIRV / spvIR.h
index 948ea52..0969127 100644 (file)
@@ -349,6 +349,7 @@ public:
     const std::vector<Block*>& getBlocks() const { return blocks; }
     void addLocalVariable(std::unique_ptr<Instruction> inst);
     Id getReturnType() const { return functionInstruction.getTypeId(); }
+    Id getFuncId() const { return functionInstruction.getResultId(); }
     void setReturnPrecision(Decoration precision)
     {
         if (precision == DecorationRelaxedPrecision)
@@ -358,12 +359,12 @@ public:
         { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; }
 
     void setDebugLineInfo(Id fileName, int line, int column) {
-        lineInstruction = Instruction(OpLine);
-        lineInstruction.addIdOperand(fileName);
-        lineInstruction.addImmediateOperand(line);
-        lineInstruction.addImmediateOperand(column);
+        lineInstruction = std::unique_ptr<Instruction>{new Instruction(OpLine)};
+        lineInstruction->addIdOperand(fileName);
+        lineInstruction->addImmediateOperand(line);
+        lineInstruction->addImmediateOperand(column);
     }
-    bool hasDebugLineInfo() const { return lineInstruction.getOpCode() == OpLine; }
+    bool hasDebugLineInfo() const { return lineInstruction != nullptr; }
 
     void setImplicitThis() { implicitThis = true; }
     bool hasImplicitThis() const { return implicitThis; }
@@ -382,8 +383,8 @@ public:
     void dump(std::vector<unsigned int>& out) const
     {
         // OpLine
-        if (hasDebugLineInfo()) {
-            lineInstruction.dump(out);
+        if (lineInstruction != nullptr) {
+            lineInstruction->dump(out);
         }
         
         // OpFunction
@@ -404,7 +405,7 @@ protected:
     Function& operator=(Function&);
 
     Module& parent;
-    Instruction lineInstruction;
+    std::unique_ptr<Instruction> lineInstruction;
     Instruction functionInstruction;
     std::vector<Instruction*> parameterInstructions;
     std::vector<Block*> blocks;
@@ -471,7 +472,7 @@ protected:
 // - the OpFunction instruction
 // - all the OpFunctionParameter instructions
 __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent)
-    : parent(parent), lineInstruction(OpNop),
+    : parent(parent), lineInstruction(nullptr),
       functionInstruction(id, resultType, OpFunction), implicitThis(false),
       reducedPrecisionReturn(false)
 {