[Mesa-dev] [RFC PATCH 1/3] gallium: decrease the size of pipe_vertex_buffer - 24 -> 16 bytes

Marek Olšák maraeo at gmail.com
Thu Apr 13 14:44:13 UTC 2017


Actually, pipe_buffer_union is also used in pipe_draw_info::index, which
replaces pipe_index_buffer::*buffer.

Marek

On Apr 12, 2017 12:00 PM, "Marek Olšák" <maraeo at gmail.com> wrote:

> On Wed, Apr 12, 2017 at 5:59 AM, Brian Paul <brianp at vmware.com> wrote:
> > On 04/11/2017 02:15 PM, Marek Olšák wrote:
> >>
> >> From: Marek Olšák <marek.olsak at amd.com>
> >>
> >> New interface:
> >>
> >> union pipe_buffer_binding {
> >>     struct pipe_resource *buffer;  /**< the actual buffer */
> >>     const void *user_buffer;  /**< pointer to a user buffer */
> >> };
> >>
> >> struct pipe_vertex_buffer
> >> {
> >>     uint16_t stride;    /**< stride to same attrib in next vertex, in
> >> bytes */
> >>     bool is_user_buffer;
> >>     unsigned buffer_offset;  /**< offset to start of data in buffer, in
> >> bytes */
> >>     union pipe_buffer_binding u;
> >> };
> >> ---
> >>   src/gallium/include/pipe/p_state.h | 11 ++++++++---
> >>   1 file changed, 8 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/src/gallium/include/pipe/p_state.h
> >> b/src/gallium/include/pipe/p_state.h
> >> index ce9ca34..9576f18 100644
> >> --- a/src/gallium/include/pipe/p_state.h
> >> +++ b/src/gallium/include/pipe/p_state.h
> >> @@ -534,6 +534,11 @@ struct pipe_transfer
> >>   };
> >>
> >>
> >> +union pipe_buffer_binding {
> >> +   struct pipe_resource *buffer;  /**< the actual buffer */
> >> +   const void *user_buffer;  /**< pointer to a user buffer */
> >> +};
> >> +
> >>
> >>   /**
> >>    * A vertex buffer.  Typically, all the vertex data/attributes for
> >> @@ -542,10 +547,10 @@ struct pipe_transfer
> >>    */
> >>   struct pipe_vertex_buffer
> >>   {
> >> -   unsigned stride;    /**< stride to same attrib in next vertex, in
> >> bytes */
> >> +   uint16_t stride;    /**< stride to same attrib in next vertex, in
> >> bytes */
> >> +   bool is_user_buffer;
> >>      unsigned buffer_offset;  /**< offset to start of data in buffer, in
> >> bytes */
> >> -   struct pipe_resource *buffer;  /**< the actual buffer */
> >> -   const void *user_buffer;  /**< pointer to a user buffer if buffer ==
> >> NULL */
> >> +   union pipe_buffer_binding u;
> >>   };
> >
> >
> > Why have the separate pipe_buffer_binding union at all?  Do you
> anticipate
> > it being needed elsewhere in Gallium?
>
> No, I don't.
>
> >
> > How about something like this:
> >
> > struct pipe_vertex_buffer
> > {
> >    uint16_t stride;
> >    bool is_user_buffer;
> >    ...
> >    union {
> >       struct pipe_resource *resource;
> >       const void *user;
> >    } buffer;
> > };
> >
> > Similarly in patch 3:
> >
> > struct pipe_draw_info
> > {
> >    ...
> >    union {
> >       struct pipe_resource *resource;
> >       const void *user;
> >    } index;
> > };
> >
> > If you really want the separate union type, can I suggest calling it
> > "pipe_buffer_union" instead?  I don't know what "binding" has to do with
> it.
>
> OK.
>
> Marek
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170413/f693e7bf/attachment.html>


More information about the mesa-dev mailing list