From: Rob Clark Date: Sun, 8 Aug 2021 19:14:55 +0000 (-0700) Subject: freedreno: Skip built-in shaders for clover X-Git-Tag: upstream/22.3.5~16385 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83a1bca9521472929b3679df55d3c9e05479cbac;p=platform%2Fupstream%2Fmesa.git 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 Part-of: --- diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_context.c b/src/gallium/drivers/freedreno/a2xx/fd2_context.c index 3429fb0..ee1711c 100644 --- a/src/gallium/drivers/freedreno/a2xx/fd2_context.c +++ b/src/gallium/drivers/freedreno/a2xx/fd2_context.c @@ -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); diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_context.c b/src/gallium/drivers/freedreno/a3xx/fd3_context.c index ec73d22..84c8026 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_context.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_context.c @@ -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; diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_context.c b/src/gallium/drivers/freedreno/a4xx/fd4_context.c index 3d65198..58b6f2d 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_context.c +++ b/src/gallium/drivers/freedreno/a4xx/fd4_context.c @@ -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; diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_context.c b/src/gallium/drivers/freedreno/a5xx/fd5_context.c index 26d0bd5..7296d51 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_context.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_context.c @@ -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; diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_context.c b/src/gallium/drivers/freedreno/a6xx/fd6_context.c index 4da4e2d..7951e10 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_context.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_context.c @@ -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; diff --git a/src/gallium/drivers/freedreno/freedreno_context.c b/src/gallium/drivers/freedreno/freedreno_context.c index 2c2b33d..9656d64 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.c +++ b/src/gallium/drivers/freedreno/freedreno_context.c @@ -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); diff --git a/src/gallium/drivers/freedreno/freedreno_context.h b/src/gallium/drivers/freedreno/freedreno_context.h index 9da86bf..35135b4 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.h +++ b/src/gallium/drivers/freedreno/freedreno_context.h @@ -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 */ diff --git a/src/gallium/drivers/freedreno/freedreno_program.c b/src/gallium/drivers/freedreno/freedreno_program.c index 3a7963f..5b1532b 100644 --- a/src/gallium/drivers/freedreno/freedreno_program.c +++ b/src/gallium/drivers/freedreno/freedreno_program.c @@ -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);