[Mesa-dev] [PATCH 1/5] st/mesa: also emit labels for TGSI_OPCODE_BGNSUB
Brian Paul
brianp at vmware.com
Wed Apr 15 16:25:22 PDT 2015
On 04/14/2015 02:20 PM, Jose Fonseca wrote:
> 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.
Hmm, OK, I'll have to take another look at this when I can find some
time. I know labels were kind of iffy...
-Brian
More information about the mesa-dev
mailing list