On 04/11/2017 02:15 PM, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@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?

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.

-Brian

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to