[Mesa-dev] [PATCH 1/2] st/mesa: fix samplerCubeShadow with bias

Marek Olšák maraeo at gmail.com
Fri Jul 4 13:00:18 PDT 2014


samplerCubeArrayShadow cannot be used with lod and bias in GLSL 4.40,
so it's impossible to get TXL or TXB with it.

Some sampler types are more limited than others. For example,
samplerCubeArrayShadow can only be used with this:

float texture(gsamplerCubeArrayShadow sampler, vec4 P, float compare)

textureLod is supported for 1DArrayShadow, but not for 2DArrayShadow, etc.

See the specification.

Marek

On Fri, Jul 4, 2014 at 9:48 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> On Fri, Jul 4, 2014 at 3:30 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Fri, Jul 4, 2014 at 2:49 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>> On Fri, Jul 4, 2014 at 8:10 AM, Marek Olšák <maraeo at gmail.com> wrote:
>>>> From: Marek Olšák <marek.olsak at amd.com>
>>>>
>>>> It has 5 coordinates: (x,y,z,depth,lodbias)
>>>>
>>>> Cc: mesa-stable at lists.freedesktop.org
>>>
>>> Reviewed-by: Ilia Mirkin <imirkin at 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 at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list