gallium/ddebug: implement pipe_vertex_state callbacks
authorMarek Olšák <marek.olsak@amd.com>
Mon, 11 Apr 2022 02:38:02 +0000 (22:38 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 20 Apr 2022 22:15:43 +0000 (22:15 +0000)
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15964>

src/gallium/auxiliary/driver_ddebug/dd_draw.c
src/gallium/auxiliary/driver_ddebug/dd_screen.c

index 4ada100..6dd4a12 100644 (file)
@@ -1346,6 +1346,37 @@ dd_context_draw_vbo(struct pipe_context *_pipe,
 }
 
 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)
 {
@@ -1825,4 +1856,5 @@ dd_init_draw_functions(struct dd_context *dctx)
    CTX_INIT(texture_unmap);
    CTX_INIT(buffer_subdata);
    CTX_INIT(texture_subdata);
+   CTX_INIT(draw_vertex_state);
 }
index 70b2935..a4e56da 100644 (file)
@@ -402,6 +402,38 @@ dd_screen_fence_get_fd(struct pipe_screen *_screen,
 }
 
 /********************************************************************
+ * 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
  */
 
@@ -623,6 +655,8 @@ ddebug_screen_create(struct pipe_screen *screen)
    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