mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 03:28:09 +02:00
freedreno: Skip built-in shaders for clover
Avoids assert: ../src/compiler/glsl_types.cpp:1134: static const glsl_type *glsl_type::get_array_instance(const glsl_type *, unsigned int, unsigned int): Assertion `glsl_type_users > 0' failed. caused by us trying to compile built-in shaders (ie. clear, gmem<->mem, etc) before clover has initialized glsl_types. But we don't need these shaders for compute-only contexts. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13300>
This commit is contained in:
parent
dff8a0c4cb
commit
83a1bca952
8 changed files with 14 additions and 0 deletions
|
|
@ -83,6 +83,7 @@ fd2_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
|
|||
pctx = &fd2_ctx->base.base;
|
||||
pctx->screen = pscreen;
|
||||
|
||||
fd2_ctx->base.flags = flags;
|
||||
fd2_ctx->base.dev = fd_device_ref(screen->dev);
|
||||
fd2_ctx->base.screen = fd_screen(pscreen);
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ fd3_context_create(struct pipe_screen *pscreen, void *priv,
|
|||
pctx = &fd3_ctx->base.base;
|
||||
pctx->screen = pscreen;
|
||||
|
||||
fd3_ctx->base.flags = flags;
|
||||
fd3_ctx->base.dev = fd_device_ref(screen->dev);
|
||||
fd3_ctx->base.screen = fd_screen(pscreen);
|
||||
fd3_ctx->base.last.key = &fd3_ctx->last_key;
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ fd4_context_create(struct pipe_screen *pscreen, void *priv,
|
|||
pctx = &fd4_ctx->base.base;
|
||||
pctx->screen = pscreen;
|
||||
|
||||
fd4_ctx->base.flags = flags;
|
||||
fd4_ctx->base.dev = fd_device_ref(screen->dev);
|
||||
fd4_ctx->base.screen = fd_screen(pscreen);
|
||||
fd4_ctx->base.last.key = &fd4_ctx->last_key;
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ fd5_context_create(struct pipe_screen *pscreen, void *priv,
|
|||
pctx = &fd5_ctx->base.base;
|
||||
pctx->screen = pscreen;
|
||||
|
||||
fd5_ctx->base.flags = flags;
|
||||
fd5_ctx->base.dev = fd_device_ref(screen->dev);
|
||||
fd5_ctx->base.screen = fd_screen(pscreen);
|
||||
fd5_ctx->base.last.key = &fd5_ctx->last_key;
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ fd6_context_create(struct pipe_screen *pscreen, void *priv,
|
|||
pctx = &fd6_ctx->base.base;
|
||||
pctx->screen = pscreen;
|
||||
|
||||
fd6_ctx->base.flags = flags;
|
||||
fd6_ctx->base.dev = fd_device_ref(screen->dev);
|
||||
fd6_ctx->base.screen = fd_screen(pscreen);
|
||||
fd6_ctx->base.last.key = &fd6_ctx->last_key;
|
||||
|
|
|
|||
|
|
@ -603,6 +603,7 @@ fd_context_init(struct fd_context *ctx, struct pipe_screen *pscreen,
|
|||
if (FD_DBG(BSTAT) || FD_DBG(MSGS))
|
||||
ctx->stats_users++;
|
||||
|
||||
ctx->flags = flags;
|
||||
ctx->screen = screen;
|
||||
ctx->pipe = fd_pipe_new2(screen->dev, FD_PIPE_3D, prio);
|
||||
|
||||
|
|
|
|||
|
|
@ -198,6 +198,8 @@ struct ir3_shader_key;
|
|||
struct fd_context {
|
||||
struct pipe_context base;
|
||||
|
||||
unsigned flags; /* PIPE_CONTEXT_x */
|
||||
|
||||
struct threaded_context *tc;
|
||||
|
||||
struct list_head node; /* node in screen->context_list */
|
||||
|
|
|
|||
|
|
@ -204,6 +204,9 @@ fd_prog_init(struct pipe_context *pctx)
|
|||
pctx->bind_fs_state = fd_fs_state_bind;
|
||||
pctx->set_patch_vertices = fd_set_patch_vertices;
|
||||
|
||||
if (ctx->flags & PIPE_CONTEXT_COMPUTE_ONLY)
|
||||
return;
|
||||
|
||||
ctx->solid_prog.fs = assemble_tgsi(pctx, solid_fs, true);
|
||||
ctx->solid_prog.vs = assemble_tgsi(pctx, solid_vs, false);
|
||||
|
||||
|
|
@ -238,6 +241,9 @@ fd_prog_fini(struct pipe_context *pctx)
|
|||
struct fd_context *ctx = fd_context(pctx);
|
||||
int i;
|
||||
|
||||
if (ctx->flags & PIPE_CONTEXT_COMPUTE_ONLY)
|
||||
return;
|
||||
|
||||
pctx->delete_vs_state(pctx, ctx->solid_prog.vs);
|
||||
pctx->delete_fs_state(pctx, ctx->solid_prog.fs);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue