lima: upload the shader to a BO at shader creation
authorEric Anholt <eric@anholt.net>
Tue, 16 Feb 2021 20:49:01 +0000 (12:49 -0800)
committerMarge Bot <eric+marge@anholt.net>
Thu, 4 Mar 2021 18:34:35 +0000 (18:34 +0000)
No need to conditionally upload later.

Signed-off-by: Erico Nunes <nunes.erico@gmail.com>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9089>

src/gallium/drivers/lima/lima_program.c

index 6248dea..5a96c83 100644 (file)
@@ -300,6 +300,16 @@ lima_fs_compile_shader(struct lima_context *ctx,
    fs->uses_discard = nir->info.fs.uses_discard;
    ralloc_free(nir);
 
+   fs->bo = lima_bo_create(screen, fs->shader_size, 0);
+   if (!fs->bo) {
+      fprintf(stderr, "lima: create fs shader bo fail\n");
+      return false;
+   }
+
+   memcpy(lima_bo_map(fs->bo), fs->shader, fs->shader_size);
+   ralloc_free(fs->shader);
+   fs->shader = NULL;
+
    return true;
 }
 
@@ -387,6 +397,18 @@ lima_vs_compile_shader(struct lima_context *ctx,
    }
 
    ralloc_free(nir);
+
+   struct lima_screen *screen = lima_screen(ctx->base.screen);
+   vs->bo = lima_bo_create(screen, vs->shader_size, 0);
+   if (!vs->bo) {
+      fprintf(stderr, "lima: create vs shader bo fail\n");
+      return false;
+   }
+
+   memcpy(lima_bo_map(vs->bo), vs->shader, vs->shader_size);
+   ralloc_free(vs->shader);
+   vs->shader = NULL;
+
    return true;
 }
 
@@ -440,19 +462,6 @@ lima_update_vs_state(struct lima_context *ctx)
 
    ctx->vs = vs;
 
-   if (!vs->bo) {
-      struct lima_screen *screen = lima_screen(ctx->base.screen);
-      vs->bo = lima_bo_create(screen, vs->shader_size, 0);
-      if (!vs->bo) {
-         fprintf(stderr, "lima: create vs shader bo fail\n");
-         return false;
-      }
-
-      memcpy(lima_bo_map(vs->bo), vs->shader, vs->shader_size);
-      ralloc_free(vs->shader);
-      vs->shader = NULL;
-   }
-
    if (ctx->vs != old_vs)
       ctx->dirty |= LIMA_CONTEXT_DIRTY_COMPILED_VS;
 
@@ -523,19 +532,6 @@ lima_update_fs_state(struct lima_context *ctx)
 
    ctx->fs = fs;
 
-   if (!fs->bo) {
-      struct lima_screen *screen = lima_screen(ctx->base.screen);
-      fs->bo = lima_bo_create(screen, fs->shader_size, 0);
-      if (!fs->bo) {
-         fprintf(stderr, "lima: create fs shader bo fail\n");
-         return false;
-      }
-
-      memcpy(lima_bo_map(fs->bo), fs->shader, fs->shader_size);
-      ralloc_free(fs->shader);
-      fs->shader = NULL;
-   }
-
    if (ctx->fs != old_fs)
       ctx->dirty |= LIMA_CONTEXT_DIRTY_COMPILED_FS;