}
static void
+dd_context_draw_vertex_state(struct pipe_context *_pipe,
+ struct pipe_vertex_state *state,
+ uint32_t partial_velem_mask,
+ struct pipe_draw_vertex_state_info info,
+ const struct pipe_draw_start_count_bias *draws,
+ unsigned num_draws)
+{
+ struct dd_context *dctx = dd_context(_pipe);
+ struct pipe_context *pipe = dctx->pipe;
+ struct dd_draw_record *record = dd_create_record(dctx);
+
+ record->call.type = CALL_DRAW_VBO;
+ memset(&record->call.info.draw_vbo.info, 0,
+ sizeof(record->call.info.draw_vbo.info));
+ record->call.info.draw_vbo.info.mode = info.mode;
+ record->call.info.draw_vbo.info.index_size = 4;
+ record->call.info.draw_vbo.info.instance_count = 1;
+ record->call.info.draw_vbo.drawid_offset = 0;
+ record->call.info.draw_vbo.draw = draws[0];
+ record->call.info.draw_vbo.info.index.resource = NULL;
+ pipe_resource_reference(&record->call.info.draw_vbo.info.index.resource,
+ state->input.indexbuf);
+ memset(&record->call.info.draw_vbo.indirect, 0,
+ sizeof(record->call.info.draw_vbo.indirect));
+
+ dd_before_draw(dctx, record);
+ pipe->draw_vertex_state(pipe, state, partial_velem_mask, info, draws, num_draws);
+ dd_after_draw(dctx, record);
+}
+
+static void
dd_context_launch_grid(struct pipe_context *_pipe,
const struct pipe_grid_info *info)
{
CTX_INIT(texture_unmap);
CTX_INIT(buffer_subdata);
CTX_INIT(texture_subdata);
+ CTX_INIT(draw_vertex_state);
}
}
/********************************************************************
+ * vertex state
+ */
+
+static struct pipe_vertex_state *
+dd_screen_create_vertex_state(struct pipe_screen *_screen,
+ struct pipe_vertex_buffer *buffer,
+ const struct pipe_vertex_element *elements,
+ unsigned num_elements,
+ struct pipe_resource *indexbuf,
+ uint32_t full_velem_mask)
+{
+ struct pipe_screen *screen = dd_screen(_screen)->screen;
+ struct pipe_vertex_state *state =
+ screen->create_vertex_state(screen, buffer, elements, num_elements,
+ indexbuf, full_velem_mask);
+
+ if (!state)
+ return NULL;
+ state->screen = _screen;
+ return state;
+}
+
+static void
+dd_screen_vertex_state_destroy(struct pipe_screen *_screen,
+ struct pipe_vertex_state *state)
+{
+ struct pipe_screen *screen = dd_screen(_screen)->screen;
+
+ screen->vertex_state_destroy(screen, state);
+}
+
+/********************************************************************
* memobj
*/
SCR_INIT(get_device_uuid);
SCR_INIT(finalize_nir);
SCR_INIT(get_sparse_texture_virtual_page_size);
+ SCR_INIT(create_vertex_state);
+ SCR_INIT(vertex_state_destroy);
#undef SCR_INIT