[Mesa-dev] [PATCH] gallium: reorder fields in pipe_draw_info
Marek Olšák
maraeo at gmail.com
Mon Feb 20 18:35:59 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
sizeof(struct pipe_draw_info) = 104 -> 88
---
src/gallium/include/pipe/p_state.h | 49 ++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 23 deletions(-)
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index cb72310..ce19b92 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -629,60 +629,51 @@ struct pipe_index_buffer
const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */
};
/**
* Information to describe a draw_vbo call.
*/
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 */
unsigned start_instance; /**< first instance id */
unsigned instance_count; /**< number of instances */
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.
*/
int index_bias; /**< a bias to be added to each index */
unsigned min_index; /**< the min index */
unsigned max_index; /**< the max index */
/**
* 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:
*
* if indexed is TRUE:
* struct {
* uint32_t count;
* uint32_t instance_count;
* uint32_t start;
* int32_t index_bias;
@@ -690,30 +681,42 @@ struct pipe_draw_info
* };
* otherwise:
* struct {
* uint32_t count;
* uint32_t instance_count;
* uint32_t start;
* uint32_t start_instance;
* };
*/
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;
};
/**
* Information to describe a blit call.
*/
struct pipe_blit_info
{
struct {
struct pipe_resource *resource;
--
2.7.4
More information about the mesa-dev
mailing list