st_setup_arrays(struct st_context *st,
const struct st_vertex_program *vp,
const struct st_common_variant *vp_variant,
- struct pipe_vertex_element *velements,
+ struct cso_velems_state *velements,
struct pipe_vertex_buffer *vbuffer, unsigned *num_vbuffers,
bool *has_user_vertex_buffers)
{
= _mesa_draw_buffer_binding(vao, i);
const unsigned bufidx = (*num_vbuffers)++;
- if (_mesa_is_bufferobj(binding->BufferObj)) {
+ if (binding->BufferObj) {
/* Set the binding */
struct st_buffer_object *stobj = st_buffer_object(binding->BufferObj);
const struct gl_array_attributes *const attrib
= _mesa_draw_array_attrib(vao, attr);
const GLuint off = _mesa_draw_attributes_relative_offset(attrib);
- init_velement(vp, velements, &attrib->Format, off,
+ init_velement(vp, velements->velems, &attrib->Format, off,
binding->InstanceDivisor, bufidx,
input_to_index[attr]);
} while (attrmask);
st_setup_current(struct st_context *st,
const struct st_vertex_program *vp,
const struct st_common_variant *vp_variant,
- struct pipe_vertex_element *velements,
+ struct cso_velems_state *velements,
struct pipe_vertex_buffer *vbuffer, unsigned *num_vbuffers)
{
struct gl_context *ctx = st->ctx;
if (alignment != size)
memset(cursor + size, 0, alignment - size);
- init_velement(vp, velements, &attrib->Format, cursor - data, 0,
- bufidx, input_to_index[attr]);
+ init_velement(vp, velements->velems, &attrib->Format, cursor - data,
+ 0, bufidx, input_to_index[attr]);
cursor += alignment;
} while (curmask);
st_setup_current_user(struct st_context *st,
const struct st_vertex_program *vp,
const struct st_common_variant *vp_variant,
- struct pipe_vertex_element *velements,
+ struct cso_velems_state *velements,
struct pipe_vertex_buffer *vbuffer, unsigned *num_vbuffers)
{
struct gl_context *ctx = st->ctx;
= _mesa_draw_current_attrib(ctx, attr);
const unsigned bufidx = (*num_vbuffers)++;
- init_velement(vp, velements, &attrib->Format, 0, 0,
+ init_velement(vp, velements->velems, &attrib->Format, 0, 0,
bufidx, input_to_index[attr]);
vbuffer[bufidx].is_user_buffer = true;
struct pipe_vertex_buffer vbuffer[PIPE_MAX_ATTRIBS];
unsigned num_vbuffers = 0;
- struct pipe_vertex_element velements[PIPE_MAX_ATTRIBS];
- unsigned num_velements;
+ struct cso_velems_state velements;
bool uses_user_vertex_buffers;
/* ST_NEW_VERTEX_ARRAYS alias ctx->DriverFlags.NewArray */
/* Setup arrays */
- st_setup_arrays(st, vp, vp_variant, velements, vbuffer, &num_vbuffers,
+ st_setup_arrays(st, vp, vp_variant, &velements, vbuffer, &num_vbuffers,
&uses_user_vertex_buffers);
/* _NEW_CURRENT_ATTRIB */
/* Setup zero-stride attribs. */
int current_attrib_buffer =
- st_setup_current(st, vp, vp_variant, velements, vbuffer, &num_vbuffers);
+ st_setup_current(st, vp, vp_variant, &velements, vbuffer, &num_vbuffers);
- /* Set the array into cso */
- num_velements = vp->num_inputs + vp_variant->key.passthrough_edgeflags;
+ velements.count = vp->num_inputs + vp_variant->key.passthrough_edgeflags;
/* Set vertex buffers and elements. */
struct cso_context *cso = st->cso_context;
unsigned unbind_trailing_vbuffers =
st->last_num_vbuffers > num_vbuffers ?
st->last_num_vbuffers - num_vbuffers : 0;
- cso_set_vertex_buffers_and_elements(cso, num_velements, velements,
+ cso_set_vertex_buffers_and_elements(cso, &velements,
num_vbuffers,
unbind_trailing_vbuffers,
vbuffer, uses_user_vertex_buffers);