lima: add lima_submit_create_stream_bo
authorQiang Yu <yuq825@gmail.com>
Sun, 9 Feb 2020 01:37:53 +0000 (09:37 +0800)
committerMarge Bot <eric+marge@anholt.net>
Mon, 17 Feb 2020 02:54:15 +0000 (02:54 +0000)
For creating stream buffer which is used in single submit
and freed after the submit is passed to kernel driver.

Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3755>

src/gallium/drivers/lima/lima_submit.c
src/gallium/drivers/lima/lima_submit.h

index 43dac226d98cc9707493e1a140eb4dd361a1efb7..af51ab70b17fc28f25f744bd6b783c4cd8815f09 100644 (file)
@@ -170,6 +170,27 @@ bool lima_submit_has_bo(struct lima_submit *submit, struct lima_bo *bo, bool all
    return false;
 }
 
+void *
+lima_submit_create_stream_bo(struct lima_submit *submit, int pipe,
+                             unsigned size, uint32_t *va)
+{
+   struct lima_context *ctx = submit->ctx;
+
+   void *cpu;
+   unsigned offset;
+   struct pipe_resource *pres = NULL;
+   u_upload_alloc(ctx->uploader, 0, size, 0x40, &offset, &pres, &cpu);
+
+   struct lima_resource *res = lima_resource(pres);
+   *va = res->bo->va + offset;
+
+   lima_submit_add_bo(submit, pipe, res->bo, LIMA_SUBMIT_BO_READ);
+
+   pipe_resource_reference(&pres, NULL);
+
+   return cpu;
+}
+
 static inline bool
 lima_submit_dirty(struct lima_submit *submit)
 {
@@ -228,14 +249,9 @@ lima_pack_reload_plbu_cmd(struct lima_submit *submit)
 
    struct lima_context *ctx = submit->ctx;
 
-   void *cpu;
-   unsigned offset;
-   struct pipe_resource *pres = NULL;
-   u_upload_alloc(ctx->uploader, 0, lima_reload_buffer_size,
-                  0x40, &offset, &pres, &cpu);
-
-   struct lima_resource *res = lima_resource(pres);
-   uint32_t va = res->bo->va + offset;
+   uint32_t va;
+   void *cpu = lima_submit_create_stream_bo(
+      submit, LIMA_PIPE_PP, lima_reload_buffer_size, &va);
 
    struct lima_screen *screen = lima_screen(ctx->base.screen);
 
@@ -289,9 +305,6 @@ lima_pack_reload_plbu_cmd(struct lima_submit *submit)
    memcpy(cpu + lima_reload_varying_offset, reload_varying,
           sizeof(reload_varying));
 
-   lima_submit_add_bo(submit, LIMA_PIPE_PP, res->bo, LIMA_SUBMIT_BO_READ);
-   pipe_resource_reference(&pres, NULL);
-
    PLBU_CMD_BEGIN(&ctx->plbu_cmd_head, 20);
 
    PLBU_CMD_VIEWPORT_LEFT(0);
index 25cd5e31eb89e7f7fbeb959ce7bac759c828f515..472031071202e29085b2fcf37353be942843950e 100644 (file)
@@ -34,6 +34,8 @@ struct lima_bo;
 bool lima_submit_add_bo(struct lima_submit *submit, int pipe,
                         struct lima_bo *bo, uint32_t flags);
 bool lima_submit_has_bo(struct lima_submit *submit, struct lima_bo *bo, bool all);
+void *lima_submit_create_stream_bo(struct lima_submit *submit, int pipe,
+                                   unsigned size, uint32_t *va);
 
 bool lima_submit_init(struct lima_context *ctx);
 void lima_submit_fini(struct lima_context *ctx);