[Mesa-dev] [RFC PATCH 25/65] gallium: add ARB_bindless_texture interface

Marek Olšák maraeo at gmail.com
Thu May 25 17:36:18 UTC 2017


On Thu, May 25, 2017 at 3:53 PM, Marek Olšák <maraeo at gmail.com> wrote:
> On Wed, May 24, 2017 at 1:52 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
>> On 19.05.2017 18:52, Samuel Pitoiset wrote:
>>>
>>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>>> ---
>>>   src/gallium/include/pipe/p_context.h | 16 ++++++++++++++++
>>>   1 file changed, 16 insertions(+)
>>>
>>> diff --git a/src/gallium/include/pipe/p_context.h
>>> b/src/gallium/include/pipe/p_context.h
>>> index 4b75386a65..83eb1c9b08 100644
>>> --- a/src/gallium/include/pipe/p_context.h
>>> +++ b/src/gallium/include/pipe/p_context.h
>>> @@ -766,6 +766,22 @@ struct pipe_context {
>>>                                 unsigned last_level,
>>>                                 unsigned first_layer,
>>>                                 unsigned last_layer);
>>> +
>>> +   /**
>>> +    * Bindless texture/image handles interface.
>>> +    */
>>> +   uint64_t (*create_texture_handle)(struct pipe_context *ctx,
>>> +                                     struct pipe_resource *res,
>>> +                                     struct pipe_sampler_view *view,
>>> +                                     const struct pipe_sampler_state
>>> *state);
>>> +   void (*delete_texture_handle)(struct pipe_context *ctx, uint64_t
>>> handle);
>>> +   void (*make_texture_handle_resident)(struct pipe_context *ctx,
>>> +                                        uint64_t handle, bool resident);
>>> +   uint64_t (*create_image_handle)(struct pipe_context *ctx,
>>> +                                   const struct pipe_image_view *image);
>>> +   void (*delete_image_handle)(struct pipe_context *ctx, uint64_t
>>> handle);
>>> +   void (*make_image_handle_resident)(struct pipe_context *ctx, uint64_t
>>> handle,
>>> +                                      unsigned access, bool resident);
>>
>>
>> Should the create/delete functions be pipe_screen functions? Handles are
>> shared across a GL share group, so the current implementation with a
>> per-context hash of handles is definitely wrong. I still need to go over it
>> in detail.
>
> BTW, shaders and sampler views are shared across a GL share group too.
> I think this is the same as sampler views. radeonsi is OK with that. I
> don't think any other drivers except nouveau will want to support
> bindless textures.

Also, the way he wrote it is that the pipe_sampler_view parameter is
not a template, it's a real sampler view object. The "res" parameter
is unused and is planned to be removed. I don't know if it's a good
idea. Conceptually it's not, because it's not intuitive. However,
using a real sampler object makes the code deltas smaller, because
si_sampler_view contains everything and so create_texture_handle
doesn't have to do much. Opinions welcome.

Marek


More information about the mesa-dev mailing list