gallium: add get_sparse_texture_virtual_page_size for noop/rbug/trace
authorQiang Yu <yuq825@gmail.com>
Mon, 6 Dec 2021 09:43:20 +0000 (17:43 +0800)
committerQiang Yu <yuq825@gmail.com>
Thu, 30 Dec 2021 08:11:19 +0000 (16:11 +0800)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14223>

src/gallium/auxiliary/driver_noop/noop_pipe.c
src/gallium/auxiliary/driver_rbug/rbug_screen.c
src/gallium/auxiliary/driver_trace/tr_screen.c

index 19421de..000898b 100644 (file)
@@ -664,6 +664,19 @@ static void noop_get_device_uuid(struct pipe_screen *screen, char *uuid)
    oscreen->get_device_uuid(oscreen, uuid);
 }
 
+static int noop_get_sparse_texture_virtual_page_size(struct pipe_screen *screen,
+                                                     enum pipe_texture_target target,
+                                                     enum pipe_format format,
+                                                     unsigned offset, unsigned size,
+                                                     int *x, int *y, int *z)
+{
+   struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen;
+   struct pipe_screen *oscreen = noop_screen->oscreen;
+
+   return oscreen->get_sparse_texture_virtual_page_size(screen, target, format, offset,
+                                                        size, x, y, z);
+}
+
 static void noop_query_dmabuf_modifiers(struct pipe_screen *screen,
                                         enum pipe_format format, int max,
                                         uint64_t *modifiers,
@@ -753,6 +766,8 @@ struct pipe_screen *noop_screen_create(struct pipe_screen *oscreen)
    screen->resource_create_with_modifiers = noop_resource_create_with_modifiers;
    screen->create_vertex_state = noop_create_vertex_state;
    screen->vertex_state_destroy = noop_vertex_state_destroy;
+   if (oscreen->get_sparse_texture_virtual_page_size)
+      screen->get_sparse_texture_virtual_page_size = noop_get_sparse_texture_virtual_page_size;
 
    slab_create_parent(&noop_screen->pool_transfers,
                       sizeof(struct pipe_transfer), 64);
index 9eb9ba3..bb89078 100644 (file)
@@ -191,6 +191,20 @@ rbug_screen_get_dmabuf_modifier_planes(struct pipe_screen *_screen,
    return screen->get_dmabuf_modifier_planes(screen, modifier, format);
 }
 
+static int
+rbug_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen,
+                                                 enum pipe_texture_target target,
+                                                 enum pipe_format format,
+                                                 unsigned offset, unsigned size,
+                                                 int *x, int *y, int *z)
+{
+   struct rbug_screen *rb_screen = rbug_screen(_screen);
+   struct pipe_screen *screen = rb_screen->screen;
+
+   return screen->get_sparse_texture_virtual_page_size(screen, target, format, offset,
+                                                       size, x, y, z);
+}
+
 static struct pipe_context *
 rbug_screen_context_create(struct pipe_screen *_screen,
                            void *priv, unsigned flags)
@@ -474,6 +488,7 @@ rbug_screen_create(struct pipe_screen *screen)
    rb_screen->base.fence_finish = rbug_screen_fence_finish;
    rb_screen->base.fence_get_fd = rbug_screen_fence_get_fd;
    SCR_INIT(finalize_nir);
+   SCR_INIT(get_sparse_texture_virtual_page_size);
 
    rb_screen->screen = screen;
 
index 20c1e24..936d039 100644 (file)
@@ -1040,6 +1040,36 @@ trace_screen_get_dmabuf_modifier_planes(struct pipe_screen *_screen, uint64_t mo
    return ret;
 }
 
+static int
+trace_screen_get_sparse_texture_virtual_page_size(struct pipe_screen *_screen,
+                                                  enum pipe_texture_target target,
+                                                  enum pipe_format format,
+                                                  unsigned offset, unsigned size,
+                                                  int *x, int *y, int *z)
+{
+   struct trace_screen *tr_scr = trace_screen(_screen);
+   struct pipe_screen *screen = tr_scr->screen;
+
+   trace_dump_call_begin("pipe_screen", "get_sparse_texture_virtual_page_size");
+
+   trace_dump_arg(ptr, screen);
+   trace_dump_arg(int, target);
+   trace_dump_arg(format, format);
+   trace_dump_arg(uint, offset);
+   trace_dump_arg(uint, size);
+   trace_dump_arg(ptr, x);
+   trace_dump_arg(ptr, y);
+   trace_dump_arg(ptr, z);
+
+   int ret = screen->get_sparse_texture_virtual_page_size(screen, target, format, offset,
+                                                          size, x, y, z);
+
+   trace_dump_ret(int, ret);
+
+   trace_dump_call_end();
+   return ret;
+}
+
 static struct pipe_vertex_state *
 trace_screen_create_vertex_state(struct pipe_screen *_screen,
                                  struct pipe_vertex_buffer *buffer,
@@ -1182,6 +1212,7 @@ trace_screen_create(struct pipe_screen *screen)
    SCR_INIT(create_vertex_state);
    SCR_INIT(vertex_state_destroy);
    tr_scr->base.transfer_helper = screen->transfer_helper;
+   SCR_INIT(get_sparse_texture_virtual_page_size);
 
    tr_scr->screen = screen;