static void
cso_set_vertex_elements_direct(struct cso_context *ctx,
- unsigned count,
- const struct pipe_vertex_element *states)
+ const struct cso_velems_state *velems)
{
unsigned key_size, hash_key;
struct cso_hash_iter iter;
void *handle;
- struct cso_velems_state velems_state;
/* Need to include the count into the stored state data too.
* Otherwise first few count pipe_vertex_elements could be identical
* even if count is different, and there's no guarantee the hash would
* be different in that case neither.
*/
- key_size = sizeof(struct pipe_vertex_element) * count + sizeof(unsigned);
- velems_state.count = count;
- memcpy(velems_state.velems, states,
- sizeof(struct pipe_vertex_element) * count);
- hash_key = cso_construct_key((void*)&velems_state, key_size);
+ key_size = sizeof(struct pipe_vertex_element) * velems->count +
+ sizeof(unsigned);
+ hash_key = cso_construct_key((void*)velems, key_size);
iter = cso_find_state_template(ctx->cache, hash_key, CSO_VELEMENTS,
- (void*)&velems_state, key_size);
+ (void*)velems, key_size);
if (cso_hash_iter_is_null(iter)) {
struct cso_velements *cso = MALLOC(sizeof(struct cso_velements));
if (!cso)
return;
- memcpy(&cso->state, &velems_state, key_size);
- cso->data = ctx->pipe->create_vertex_elements_state(ctx->pipe, count,
+ memcpy(&cso->state, velems, key_size);
+ cso->data = ctx->pipe->create_vertex_elements_state(ctx->pipe,
+ velems->count,
&cso->state.velems[0]);
cso->delete_state =
(cso_state_callback) ctx->pipe->delete_vertex_elements_state;
enum pipe_error
cso_set_vertex_elements(struct cso_context *ctx,
- unsigned count,
- const struct pipe_vertex_element *states)
+ const struct cso_velems_state *velems)
{
struct u_vbuf *vbuf = ctx->vbuf_current;
if (vbuf) {
- u_vbuf_set_vertex_elements(vbuf, count, states);
+ u_vbuf_set_vertex_elements(vbuf, velems);
return PIPE_OK;
}
- cso_set_vertex_elements_direct(ctx, count, states);
+ cso_set_vertex_elements_direct(ctx, velems);
return PIPE_OK;
}
*/
void
cso_set_vertex_buffers_and_elements(struct cso_context *ctx,
- unsigned velem_count,
- const struct pipe_vertex_element *velems,
+ const struct cso_velems_state *velems,
unsigned vb_count,
unsigned unbind_trailing_vb_count,
const struct pipe_vertex_buffer *vbuffers,
if (vb_count)
u_vbuf_set_vertex_buffers(vbuf, 0, vb_count, vbuffers);
- u_vbuf_set_vertex_elements(vbuf, velem_count, velems);
+ u_vbuf_set_vertex_elements(vbuf, velems);
return;
}
if (vb_count)
cso_set_vertex_buffers_direct(ctx, 0, vb_count, vbuffers);
- cso_set_vertex_elements_direct(ctx, velem_count, velems);
+ cso_set_vertex_elements_direct(ctx, velems);
}
void