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);
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;
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;
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;
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;
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);
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 */
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);
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);