On Fri, Jul 4, 2014 at 3:30 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote:
> On Fri, Jul 4, 2014 at 2:49 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>> On Fri, Jul 4, 2014 at 8:10 AM, Marek Olšák <mar...@gmail.com> wrote:
>>> From: Marek Olšák <marek.ol...@amd.com>
>>>
>>> It has 5 coordinates: (x,y,z,depth,lodbias)
>>>
>>> Cc: mesa-sta...@lists.freedesktop.org
>>
>> Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu>
>>
>> Although I still haven't worked out what else is wrong with nouveau...
>> nv50 hits an assert, while nvc0 just generates wrong code. But it does
>> look like your patch is correct.
>
> Actually this makes the TXL2 instruction pretty confusing =/
>
> Right now it's always just used for cube arrays, so the shadow/lod are
> in a fixed position (first and second components of second arg). I
> think that behaviour should be maintained -- for example, TXB
> (http://gallium.readthedocs.org/en/latest/tgsi.html#opcode-TXB) always
> has the bias in the 'w' component [ugh, should fix the docs on that,
> it says 'z']. Same with TXL.

Err, sorry, I got confused between TXL and TXB. But my point still stands.

Unless we're doing something horribly wrong in nouveau, it appears
that for cube arrays, the lod is in src1.x and shadow is in src1.y,
while for the samplerCubeShadow case, lod is in src1.x while shadow is
in src0.w. Once I adjusted that, the texture(bias) CubeShadow case
started passing.

In any case, it'd be great of TEX2/TXB2/TXL2 could be documented in
the TGSI docs...

  -ilia

>
>   -ilia
>
>>
>>> ---
>>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 8 +++++++-
>>>  1 file changed, 7 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
>>> b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> index 9e19431..65ef89c 100644
>>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> @@ -2820,7 +2820,13 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
>>>        }
>>>        break;
>>>     case ir_txb:
>>> -      opcode = is_cube_array ? TGSI_OPCODE_TXB2 : TGSI_OPCODE_TXB;
>>> +      if (is_cube_array ||
>>> +          sampler_type == glsl_type::samplerCubeShadow_type) {
>>> +         opcode = TGSI_OPCODE_TXB2;
>>> +      }
>>> +      else {
>>> +         opcode = TGSI_OPCODE_TXB;
>>> +      }
>>>        ir->lod_info.bias->accept(this);
>>>        lod_info = this->result;
>>>        if (ir->offset) {
>>> --
>>> 1.9.1
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev@lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to