On 14/04/15 17:56, Brian Paul wrote:
Subroutines need labels so they can be identied by CAL instructions.
---
  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 19 +++++++++++++------
  1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 67a4da7..eb0ce07 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4771,18 +4771,25 @@ compile_tgsi_instruction(struct st_translate *t,
     }

     switch(inst->op) {
+   case TGSI_OPCODE_BGNSUB:
     case TGSI_OPCODE_BGNLOOP:
     case TGSI_OPCODE_CAL:
     case TGSI_OPCODE_ELSE:
     case TGSI_OPCODE_ENDLOOP:
     case TGSI_OPCODE_IF:
     case TGSI_OPCODE_UIF:
-      assert(num_dst == 0);
-      ureg_label_insn(ureg,
-                      inst->op,
-                      src, num_src,
-                      get_label(t,
-                                inst->op == TGSI_OPCODE_CAL ? 
inst->function->sig_id : 0));
+      {
+         int sig_id = 0;
+         if (inst->op == TGSI_OPCODE_CAL ||
+             inst->op == TGSI_OPCODE_BGNSUB) {

I'm not sure about this.

One thing is the label of the instruction (ie, instrution no), the other is the operand label.

CAL takes an operand label (the #no of the instruction where BGNSUB starts).

But BGNSUB shouldn't need a label (what matter is the instrucion #no). If it does take a label, then it's probably the label of the ENDSUB, not where the function starts.


I thought we had removed all these pointless labels. I suppose that's why the label 0 is used. In other words, I believe the right thing here is to add the case statement for TGSI_OPCODE_BGNSUB, but not treat it like CAL.



+            sig_id = inst->function->sig_id;
+         }
+         assert(num_dst == 0);
+         ureg_label_insn(ureg,
+                         inst->op,
+                         src, num_src,
+                         get_label(t, sig_id));
+      }
        return;

     case TGSI_OPCODE_TEX:




Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to