| #include "brw_context.h" |
| |
| |
| static void brw_set_vertex_elements( struct pipe_context *pipe, |
| unsigned count, |
| const struct pipe_vertex_element *elements ) |
| { |
| struct brw_context *brw = brw_context(pipe); |
| |
| memcpy(brw->curr.vertex_element, elements, count * sizeof(elements[0])); |
| brw->curr.num_vertex_elements = count; |
| |
| brw->state.dirty.mesa |= PIPE_NEW_VERTEX_ELEMENT; |
| } |
| |
| |
| static void brw_set_vertex_buffers(struct pipe_context *pipe, |
| unsigned count, |
| const struct pipe_vertex_buffer *buffers) |
| { |
| struct brw_context *brw = brw_context(pipe); |
| unsigned i; |
| |
| /* Check for no change */ |
| if (count == brw->curr.num_vertex_buffers && |
| memcmp(brw->curr.vertex_buffer, |
| buffers, |
| count * sizeof buffers[0]) == 0) |
| return; |
| |
| /* Adjust refcounts */ |
| for (i = 0; i < count; i++) |
| pipe_buffer_reference(&brw->curr.vertex_buffer[i].buffer, |
| buffers[i].buffer); |
| |
| for ( ; i < brw->curr.num_vertex_buffers; i++) |
| pipe_buffer_reference(&brw->curr.vertex_buffer[i].buffer, |
| NULL); |
| |
| /* Copy remaining data */ |
| memcpy(brw->curr.vertex_buffer, buffers, count * sizeof buffers[0]); |
| brw->curr.num_vertex_buffers = count; |
| |
| brw->state.dirty.mesa |= PIPE_NEW_VERTEX_BUFFER; |
| } |
| |
| |
| void |
| brw_pipe_vertex_init( struct brw_context *brw ) |
| { |
| brw->base.set_vertex_buffers = brw_set_vertex_buffers; |
| brw->base.set_vertex_elements = brw_set_vertex_elements; |
| } |
| |
| |
| void |
| brw_pipe_vertex_cleanup( struct brw_context *brw ) |
| { |
| |
| /* Release bound pipe vertex_buffers |
| */ |
| |
| /* Release some other stuff |
| */ |
| #if 0 |
| for (i = 0; i < PIPE_MAX_ATTRIBS; i++) { |
| bo_reference(&brw->vb.inputs[i].bo, NULL); |
| brw->vb.inputs[i].bo = NULL; |
| } |
| #endif |
| } |