[Mesa-dev] Gallium: Removal of set_index_buffer (discussion)

Ilia Mirkin imirkin at alum.mit.edu
Mon Feb 20 19:11:51 UTC 2017


On Mon, Feb 20, 2017 at 2:01 PM, Marek Olšák <maraeo at gmail.com> wrote:
> Hi,
>
> I'd like to remove pipe_context::set_index_buffer. It's not useful to
> most drivers and the interface is inconvenient for Mesa/OpenGL,
> because it's a draw state that is set with a separate driver callback,
> which is an unnecessary driver roundtrip taking some CPU cycles. I'd
> prefer to pass the index buffer via pipe_draw_info.
>
> I'm aware that the interface was inherited from DX10, but I don't
> think that makes any difference here. DX10 state trackers can pass the
> index buffer via pipe_draw_info too.
>
> This is my proposal:
>
> iff --git a/src/gallium/include/pipe/p_state.h
> b/src/gallium/include/pipe/p_state.h
> index ce19b92..cffbb33 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -635,7 +635,7 @@ struct pipe_index_buffer
>   */
>  struct pipe_draw_info
>  {
> -   boolean indexed;  /**< use index buffer */
> +   ubyte index_size;  /**< 0 = non-indexed */
>     enum pipe_prim_type mode;  /**< the mode of the primitive */
>     boolean primitive_restart;
>     ubyte vertices_per_patch; /**< the number of vertices per patch */
> @@ -666,12 +666,18 @@ struct pipe_draw_info
>
>     unsigned indirect_params_offset; /**< must be 4 byte aligned */
>
> +   /**
> +    * Index buffer. Only one can be non-NULL.
> +    */
> +   struct pipe_resource *index_buffer; /* "start" is the offset */

Works for me. Is start the offset in bytes or is start * index_size
the offset in bytes?

> +   void *user_indices;
> +
>     /* Pointers must be at the end for an optimal structure layout on 64-bit. */
>
>
> Comments welcome,
>
> Marek
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list