gallium: reorder fields in pipe_draw_info

sizeof(struct pipe_draw_info) = 104 -> 88

Also, vertices_per_patch is switched to ubyte, because it can't be more
than 32.

Seemed-reasonable-to: Roland Scheidegger
This commit is contained in:
Marek Olšák 2017-02-20 19:34:02 +01:00
parent 3b04566bba
commit 7ce8adad43
1 changed files with 26 additions and 23 deletions

View File

@ -636,8 +636,10 @@ struct pipe_index_buffer
struct pipe_draw_info
{
boolean indexed; /**< use index buffer */
enum pipe_prim_type mode; /**< the mode of the primitive */
boolean primitive_restart;
ubyte vertices_per_patch; /**< the number of vertices per patch */
unsigned start; /**< the index of the first vertex */
unsigned count; /**< number of vertices */
@ -646,8 +648,6 @@ struct pipe_draw_info
unsigned drawid; /**< id of this draw in a multidraw */
unsigned vertices_per_patch; /**< the number of vertices per patch */
/**
* For indexed drawing, these fields apply after index lookup.
*/
@ -658,24 +658,15 @@ struct pipe_draw_info
/**
* Primitive restart enable/index (only applies to indexed drawing)
*/
boolean primitive_restart;
unsigned restart_index;
/**
* Stream output target. If not NULL, it's used to provide the 'count'
* parameter based on the number vertices captured by the stream output
* stage. (or generally, based on the number of bytes captured)
*
* Only 'mode', 'start_instance', and 'instance_count' are taken into
* account, all the other variables from pipe_draw_info are ignored.
*
* 'start' is implicitly 0 and 'count' is set as discussed above.
* The draw command is non-indexed.
*
* Note that this only provides the count. The vertex buffers must
* be set via set_vertex_buffers manually.
*/
struct pipe_stream_output_target *count_from_stream_output;
unsigned indirect_offset; /**< must be 4 byte aligned */
unsigned indirect_stride; /**< must be 4 byte aligned */
unsigned indirect_count; /**< number of indirect draws */
unsigned indirect_params_offset; /**< must be 4 byte aligned */
/* Pointers must be at the end for an optimal structure layout on 64-bit. */
/* Indirect draw parameters resource: If not NULL, most values are taken
* from this buffer instead, which is laid out as follows:
@ -697,16 +688,28 @@ struct pipe_draw_info
* };
*/
struct pipe_resource *indirect;
unsigned indirect_offset; /**< must be 4 byte aligned */
unsigned indirect_stride; /**< must be 4 byte aligned */
unsigned indirect_count; /**< number of indirect draws */
/* Indirect draw count resource: If not NULL, contains a 32-bit value which
* is to be used as the real indirect_count. In that case indirect_count
* becomes the maximum possible value.
*/
struct pipe_resource *indirect_params;
unsigned indirect_params_offset; /**< must be 4 byte aligned */
/**
* Stream output target. If not NULL, it's used to provide the 'count'
* parameter based on the number vertices captured by the stream output
* stage. (or generally, based on the number of bytes captured)
*
* Only 'mode', 'start_instance', and 'instance_count' are taken into
* account, all the other variables from pipe_draw_info are ignored.
*
* 'start' is implicitly 0 and 'count' is set as discussed above.
* The draw command is non-indexed.
*
* Note that this only provides the count. The vertex buffers must
* be set via set_vertex_buffers manually.
*/
struct pipe_stream_output_target *count_from_stream_output;
};