[Mesa-dev] [RFC PATCH 03/26] glsl: introduce new base types for bindless samplers/images

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Apr 19 13:30:17 UTC 2017



On 04/19/2017 03:23 PM, Ilia Mirkin wrote:
> On Wed, Apr 19, 2017 at 5:47 AM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
>> By the way, this is also how Ilia's example would be implemented. When
>> inlined, it could become something like:
>>
>>    layout (bound_sampler) uniform sampler2D u_tex;
>>    in sampler2D in_tex;
>>
>>    void main()
>>    {
>>      ...
>>      sampler2D tmp = foo ? u_tex : in_tex;
>>      vec4 color = texture2D(tmp, ...);
>>    }
>>
>> This should compile. At the GLSL level, the type is always sampler2D. At the
>> TGSI and LLVM IR level, u_tex is converted to a 64-bit value at the point of
>> the ?: operation. To keep the craziness low in TGSI, there should probably
>> be some S2U64 instruction for explicitly converting old-style
>> samplers/images to 64-bit values, even though most cases of explicit
>> conversion between sampler types and uvec2 are actually no-ops in TGSI.
> 
> OK, so I think this is an important question. My understanding is that
> this shouldn't compile. Furthermore, my understanding is that
> 
> layout (bound_sampler) uniform sampler2D a;
> 
> void main() {
>    sampler2D tmp = a;
> }

IIRC, this compiles with NV. Anyways, I'm looking into an alternative 
solution, I will also test more corner cases with NV and reply later 
with a complete analysis. Thank you for all your feedbacks!

> 
> should also not compile. We should try to get a ruling on that from
> the existing impls. If that is not the case, then this needs a
> rethink, at least on my part :) It would force all the textures to
> become bindless when that happens. This would obviously be supportable
> on NVIDIA (it's all bindless), but there are two instructions for
> loading stuff from textures, one which is "semi-bound", one which is
> fully "indirect". I'm not sure why those two would exist if there
> weren't some advantage to using the "semi-bound" one when possible.
> [What I mean by semi-bound is that it reads the handle from a
> dedicated constbuf, you pass in the offset into that constbuf. The
> fully indirect one, you just pass in the handle to the op directly.]
> 
> Cheers,
> 
>    -ilia
> 


More information about the mesa-dev mailing list