gallium: add flags parameter to pipe_screen::context_create
authorMarek Olšák <marek.olsak@amd.com>
Sat, 25 Jul 2015 16:40:59 +0000 (18:40 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 26 Aug 2015 17:25:18 +0000 (19:25 +0200)
This allows creating compute-only and debug contexts.

Reviewed-by: Brian Paul <brianp@vmware.com>
Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
57 files changed:
src/gallium/auxiliary/util/u_tests.c
src/gallium/auxiliary/vl/vl_mpeg12_decoder.c
src/gallium/drivers/freedreno/a2xx/fd2_context.c
src/gallium/drivers/freedreno/a2xx/fd2_context.h
src/gallium/drivers/freedreno/a3xx/fd3_context.c
src/gallium/drivers/freedreno/a3xx/fd3_context.h
src/gallium/drivers/freedreno/a4xx/fd4_context.c
src/gallium/drivers/freedreno/a4xx/fd4_context.h
src/gallium/drivers/i915/i915_context.c
src/gallium/drivers/i915/i915_context.h
src/gallium/drivers/ilo/ilo_context.c
src/gallium/drivers/llvmpipe/lp_context.c
src/gallium/drivers/llvmpipe/lp_context.h
src/gallium/drivers/noop/noop_pipe.c
src/gallium/drivers/nouveau/nv30/nv30_context.c
src/gallium/drivers/nouveau/nv30/nv30_context.h
src/gallium/drivers/nouveau/nv50/nv50_context.c
src/gallium/drivers/nouveau/nv50/nv50_context.h
src/gallium/drivers/nouveau/nvc0/nvc0_context.c
src/gallium/drivers/nouveau/nvc0/nvc0_context.h
src/gallium/drivers/r300/r300_context.c
src/gallium/drivers/r300/r300_context.h
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/rbug/rbug_screen.c
src/gallium/drivers/softpipe/sp_context.c
src/gallium/drivers/softpipe/sp_context.h
src/gallium/drivers/svga/svga_context.c
src/gallium/drivers/svga/svga_context.h
src/gallium/drivers/trace/tr_screen.c
src/gallium/drivers/vc4/vc4_context.c
src/gallium/drivers/vc4/vc4_context.h
src/gallium/include/pipe/p_defines.h
src/gallium/include/pipe/p_screen.h
src/gallium/state_trackers/clover/core/queue.cpp
src/gallium/state_trackers/glx/xlib/xm_st.c
src/gallium/state_trackers/nine/device9.c
src/gallium/state_trackers/omx/vid_dec.c
src/gallium/state_trackers/omx/vid_enc.c
src/gallium/state_trackers/va/context.c
src/gallium/state_trackers/vdpau/device.c
src/gallium/state_trackers/xa/xa_context.c
src/gallium/state_trackers/xvmc/context.c
src/gallium/tests/graw/clear.c
src/gallium/tests/graw/fs-test.c
src/gallium/tests/graw/graw_util.h
src/gallium/tests/graw/gs-test.c
src/gallium/tests/graw/quad-sample.c
src/gallium/tests/graw/shader-leak.c
src/gallium/tests/graw/tri-gs.c
src/gallium/tests/graw/tri-instanced.c
src/gallium/tests/graw/vs-test.c
src/gallium/tests/trivial/compute.c
src/gallium/tests/trivial/quad-tex.c
src/gallium/tests/trivial/tri.c
src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
src/mesa/state_tracker/st_manager.c

index 6a489d63c090b5802e70191ede171502847faa31..a94e5cc2949c2c4c5f43df37f25a328409dd193f 100644 (file)
@@ -457,7 +457,7 @@ null_constant_buffer(struct pipe_context *ctx)
 void
 util_run_tests(struct pipe_screen *screen)
 {
-   struct pipe_context *ctx = screen->context_create(screen, NULL);
+   struct pipe_context *ctx = screen->context_create(screen, NULL, 0);
 
    tgsi_vs_window_space_position(ctx);
    null_sampler_view(ctx, TGSI_TEXTURE_2D);
index b70098372930a8c88e12ea382bffeb19842d5316..9d0e4a1eae0f45ad2dd877d128aa807aed5b2c99 100644 (file)
@@ -1120,7 +1120,7 @@ vl_create_mpeg12_decoder(struct pipe_context *context,
 
    dec->base = *templat;
    dec->base.context = context;
-   dec->context = context->screen->context_create(context->screen, NULL);
+   dec->context = context->screen->context_create(context->screen, NULL, 0);
 
    dec->base.destroy = vl_mpeg12_destroy;
    dec->base.begin_frame = vl_mpeg12_begin_frame;
index 6089ebc151605b124cbe94319964b168086ec175..3bed73573a6c4d80d644395a374f9a4cf4481ee9 100644 (file)
@@ -86,7 +86,7 @@ static const uint8_t a20x_primtypes[PIPE_PRIM_MAX] = {
 };
 
 struct pipe_context *
-fd2_context_create(struct pipe_screen *pscreen, void *priv)
+fd2_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
        struct fd_screen *screen = fd_screen(pscreen);
        struct fd2_context *fd2_ctx = CALLOC_STRUCT(fd2_context);
index 7414710793014eb7ffeb9adbc293068f972e30ed..eeadf84ff20fa1a59e81ddcfdf17caead9b70968 100644 (file)
@@ -47,6 +47,6 @@ fd2_context(struct fd_context *ctx)
 }
 
 struct pipe_context *
-fd2_context_create(struct pipe_screen *pscreen, void *priv);
+fd2_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
 
 #endif /* FD2_CONTEXT_H_ */
index dc33783e3980918c3b3115d7c71c06cedf5c3311..74cbbf2edd8c468aaff863b0ea18ef6c8093aa53 100644 (file)
@@ -98,7 +98,7 @@ static const uint8_t primtypes[PIPE_PRIM_MAX] = {
 };
 
 struct pipe_context *
-fd3_context_create(struct pipe_screen *pscreen, void *priv)
+fd3_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
        struct fd_screen *screen = fd_screen(pscreen);
        struct fd3_context *fd3_ctx = CALLOC_STRUCT(fd3_context);
index 6e20b2ff9bc7f47a2fb4ec819fedde14f3bc1ac6..250bcf895962aa8906eec86a5783ac8fab341ea8 100644 (file)
@@ -119,6 +119,6 @@ fd3_context(struct fd_context *ctx)
 }
 
 struct pipe_context *
-fd3_context_create(struct pipe_screen *pscreen, void *priv);
+fd3_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
 
 #endif /* FD3_CONTEXT_H_ */
index e172d3505179c0ab4cbb4ad5b90b5908bf599c36..625512ccd1bc4b2e5228d30efb43041caeaad01b 100644 (file)
@@ -96,7 +96,7 @@ static const uint8_t primtypes[PIPE_PRIM_MAX] = {
 };
 
 struct pipe_context *
-fd4_context_create(struct pipe_screen *pscreen, void *priv)
+fd4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
        struct fd_screen *screen = fd_screen(pscreen);
        struct fd4_context *fd4_ctx = CALLOC_STRUCT(fd4_context);
index 0b749916841bfa1bc25296f15e52a1e4ceb6de63..af9475699db39400ce6424542387c2679faacf9a 100644 (file)
@@ -97,6 +97,6 @@ fd4_context(struct fd_context *ctx)
 }
 
 struct pipe_context *
-fd4_context_create(struct pipe_screen *pscreen, void *priv);
+fd4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
 
 #endif /* FD4_CONTEXT_H_ */
index 788381bbe2e2ef5c99b236525809b0cfa0e5c486..05f8e93ddea7b8585a63482358b6f632bfb5bf33 100644 (file)
@@ -155,7 +155,7 @@ static void i915_destroy(struct pipe_context *pipe)
 }
 
 struct pipe_context *
-i915_create_context(struct pipe_screen *screen, void *priv)
+i915_create_context(struct pipe_screen *screen, void *priv, unsigned flags)
 {
    struct i915_context *i915;
 
index c8c7d64f5cb6b97f4c51336255cfc4b9dc3e4e8d..1ed685188db7f0b335c11ecabd15727399b15759 100644 (file)
@@ -401,7 +401,7 @@ void i915_init_string_functions( struct i915_context *i915 );
  * i915_context.c
  */
 struct pipe_context *i915_create_context(struct pipe_screen *screen,
-                                        void *priv);
+                                        void *priv, unsigned flags);
 
 
 /***********************************************************************
index b9a16aab81d5b3bf7c64b9965c88257ea8834610..2a00cf1c93c6a32f3f6b0b21341f0e311dc2a50e 100644 (file)
@@ -135,7 +135,7 @@ ilo_context_destroy(struct pipe_context *pipe)
 }
 
 static struct pipe_context *
-ilo_context_create(struct pipe_screen *screen, void *priv)
+ilo_context_create(struct pipe_screen *screen, void *priv, unsigned flags)
 {
    struct ilo_screen *is = ilo_screen(screen);
    struct ilo_context *ilo;
index 80cb6578bd1d464fc8fda8d4089d6f918fa377cc..bd7c0a1e4af2f02c8713a0782d40c45afffb1d23 100644 (file)
@@ -128,7 +128,8 @@ llvmpipe_render_condition ( struct pipe_context *pipe,
 }
 
 struct pipe_context *
-llvmpipe_create_context( struct pipe_screen *screen, void *priv )
+llvmpipe_create_context(struct pipe_screen *screen, void *priv,
+                        unsigned flags)
 {
    struct llvmpipe_context *llvmpipe;
 
index c273b25f0960791d5540e44dcc5bf7f79c49d807..c9a5d6782447c267061978f1dcd0e616a3ae367a 100644 (file)
@@ -160,7 +160,8 @@ struct llvmpipe_context {
 
 
 struct pipe_context *
-llvmpipe_create_context( struct pipe_screen *screen, void *priv );
+llvmpipe_create_context(struct pipe_screen *screen, void *priv,
+                        unsigned flags);
 
 struct pipe_resource *
 llvmpipe_user_buffer_create(struct pipe_screen *screen,
index aeec6778b6df8f4c2d5d59f7ce50b8a1a9101626..e644685123e84d9ba9147a71b5af00ea34510551 100644 (file)
@@ -260,7 +260,8 @@ static void noop_destroy_context(struct pipe_context *ctx)
        FREE(ctx);
 }
 
-static struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv)
+static struct pipe_context *noop_create_context(struct pipe_screen *screen,
+                                                void *priv, unsigned flags)
 {
        struct pipe_context *ctx = CALLOC_STRUCT(pipe_context);
 
index 6e88ed725d656b5aa295efe724677ab60274926f..46590eecdf363b5d70a4c0e078e85555862db62e 100644 (file)
@@ -190,7 +190,7 @@ nv30_context_destroy(struct pipe_context *pipe)
    } while(0)
 
 struct pipe_context *
-nv30_context_create(struct pipe_screen *pscreen, void *priv)
+nv30_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
    struct nv30_screen *screen = nv30_screen(pscreen);
    struct nv30_context *nv30 = CALLOC_STRUCT(nv30_context);
index d5c18bb62dc94c62f7b9e1c38b5d1f6d6e0e044f..0ab2f95bc20ac402919d4b544a81b5cf929db183 100644 (file)
@@ -132,7 +132,7 @@ nv30_context(struct pipe_context *pipe)
 }
 
 struct pipe_context *
-nv30_context_create(struct pipe_screen *pscreen, void *priv);
+nv30_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
 
 void
 nv30_vbo_init(struct pipe_context *pipe);
index f8d46db7c678ba50a6cb773beedb983d64acfa46..11638dd7f147ee457ce506d28a96b49feb223627 100644 (file)
@@ -240,7 +240,7 @@ nv50_context_get_sample_position(struct pipe_context *, unsigned, unsigned,
                                  float *);
 
 struct pipe_context *
-nv50_create(struct pipe_screen *pscreen, void *priv)
+nv50_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
    struct nv50_screen *screen = nv50_screen(pscreen);
    struct nv50_context *nv50;
index ce12e714774386031033aef1dbbafe9880c3008c..e7adf472ed0be3f27158c54a1f7642b0e88ed288 100644 (file)
@@ -186,7 +186,7 @@ nv50_context_shader_stage(unsigned pipe)
 }
 
 /* nv50_context.c */
-struct pipe_context *nv50_create(struct pipe_screen *, void *);
+struct pipe_context *nv50_create(struct pipe_screen *, void *, unsigned flags);
 
 void nv50_bufctx_fence(struct nouveau_bufctx *, bool on_flush);
 
index 7a15a11f560a66a33e0e93cf2acf6d09f2837b96..613cad69aa5b4438e2a7afafac0fa70194a97c97 100644 (file)
@@ -262,7 +262,7 @@ nvc0_context_get_sample_position(struct pipe_context *, unsigned, unsigned,
                                  float *);
 
 struct pipe_context *
-nvc0_create(struct pipe_screen *pscreen, void *priv)
+nvc0_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
    struct nvc0_screen *screen = nvc0_screen(pscreen);
    struct nvc0_context *nvc0;
index df1a891a43e4ce024b00ce97f42aa0bb8db0a1d3..6ed79cf95536a2af6c0dae69cd775726b526d920 100644 (file)
@@ -214,7 +214,7 @@ nvc0_shader_stage(unsigned pipe)
 
 
 /* nvc0_context.c */
-struct pipe_context *nvc0_create(struct pipe_screen *, void *);
+struct pipe_context *nvc0_create(struct pipe_screen *, void *, unsigned flags);
 void nvc0_bufctx_fence(struct nvc0_context *, struct nouveau_bufctx *,
                        bool on_flush);
 void nvc0_default_kick_notify(struct nouveau_pushbuf *);
index 8c24ad6d98a619a7f817d56c0271f7b2f4430d19..b393769c861c16b2d90851e76de3aa5c73608a02 100644 (file)
@@ -363,7 +363,7 @@ static void r300_init_states(struct pipe_context *pipe)
 }
 
 struct pipe_context* r300_create_context(struct pipe_screen* screen,
-                                         void *priv)
+                                         void *priv, unsigned flags)
 {
     struct r300_context* r300 = CALLOC_STRUCT(r300_context);
     struct r300_screen* r300screen = r300_screen(screen);
index 18ae11a3a2410b0ec6cc3e234351af536905481d..f298d88004be6e0e47eb7a04abe5519621746043 100644 (file)
@@ -705,7 +705,7 @@ r300_get_nonnull_cb(struct pipe_framebuffer_state *fb, unsigned i)
 }
 
 struct pipe_context* r300_create_context(struct pipe_screen* screen,
-                                         void *priv);
+                                         void *priv, unsigned flags);
 
 /* Context initialization. */
 struct draw_stage* r300_draw_stage(struct r300_context* r300);
index 6ffe5615fbfac522622160458b15fe13297c7c16..f6efaa312f225a66355258b7367cf61eb4e8273f 100644 (file)
@@ -108,7 +108,8 @@ static void r600_destroy_context(struct pipe_context *context)
        FREE(rctx);
 }
 
-static struct pipe_context *r600_create_context(struct pipe_screen *screen, void *priv)
+static struct pipe_context *r600_create_context(struct pipe_screen *screen,
+                                                void *priv, unsigned flags)
 {
        struct r600_context *rctx = CALLOC_STRUCT(r600_context);
        struct r600_screen* rscreen = (struct r600_screen *)screen;
@@ -624,7 +625,7 @@ struct pipe_screen *r600_screen_create(struct radeon_winsys *ws)
        rscreen->global_pool = compute_memory_pool_new(rscreen);
 
        /* Create the auxiliary context. This must be done last. */
-       rscreen->b.aux_context = rscreen->b.b.context_create(&rscreen->b.b, NULL);
+       rscreen->b.aux_context = rscreen->b.b.context_create(&rscreen->b.b, NULL, 0);
 
 #if 0 /* This is for testing whether aux_context and buffer clearing work correctly. */
        struct pipe_resource templ = {};
index 473a2e9ad12238b6df3b9ceb9834b47bd2695933..029b3cce488ca248c9c4c075df8e2778e2a782dd 100644 (file)
@@ -92,7 +92,8 @@ si_amdgpu_get_reset_status(struct pipe_context *ctx)
        return sctx->b.ws->ctx_query_reset_status(sctx->b.ctx);
 }
 
-static struct pipe_context *si_create_context(struct pipe_screen *screen, void *priv)
+static struct pipe_context *si_create_context(struct pipe_screen *screen,
+                                              void *priv, unsigned flags)
 {
        struct si_context *sctx = CALLOC_STRUCT(si_context);
        struct si_screen* sscreen = (struct si_screen *)screen;
@@ -586,7 +587,7 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
                sscreen->b.debug_flags |= DBG_FS | DBG_VS | DBG_GS | DBG_PS | DBG_CS;
 
        /* Create the auxiliary context. This must be done last. */
-       sscreen->b.aux_context = sscreen->b.b.context_create(&sscreen->b.b, NULL);
+       sscreen->b.aux_context = sscreen->b.b.context_create(&sscreen->b.b, NULL, 0);
 
        return &sscreen->b.b;
 }
index 7da4e81560a1559b326ede788172e9e28a19048b..ac764029a2f3898bdda223f03beab36bb3798079 100644 (file)
@@ -129,13 +129,13 @@ rbug_screen_is_format_supported(struct pipe_screen *_screen,
 
 static struct pipe_context *
 rbug_screen_context_create(struct pipe_screen *_screen,
-                           void *priv)
+                           void *priv, unsigned flags)
 {
    struct rbug_screen *rb_screen = rbug_screen(_screen);
    struct pipe_screen *screen = rb_screen->screen;
    struct pipe_context *result;
 
-   result = screen->context_create(screen, priv);
+   result = screen->context_create(screen, priv, flags);
    if (result)
       return rbug_context_create(_screen, result);
    return NULL;
@@ -281,7 +281,7 @@ rbug_screen_create(struct pipe_screen *screen)
 
    rb_screen->screen = screen;
 
-   rb_screen->private_context = screen->context_create(screen, NULL);
+   rb_screen->private_context = screen->context_create(screen, NULL, 0);
    if (!rb_screen->private_context)
       goto err_free;
 
index 34d2b80f19b1c1cf0c2d2b0a4ea7b53d5efc9b1f..d2a32200e475814871def457da1563ff47508c95 100644 (file)
@@ -186,8 +186,8 @@ softpipe_render_condition( struct pipe_context *pipe,
 
 
 struct pipe_context *
-softpipe_create_context( struct pipe_screen *screen,
-                        void *priv )
+softpipe_create_context(struct pipe_screen *screen,
+                       void *priv, unsigned flags)
 {
    struct softpipe_screen *sp_screen = softpipe_screen(screen);
    struct softpipe_context *softpipe = CALLOC_STRUCT(softpipe_context);
index 577df814b29cde4abcb5146d7f233eeef748e29a..073b71a913ede6d7bc2cb14dcbb842bb507ed979 100644 (file)
@@ -211,7 +211,7 @@ softpipe_context( struct pipe_context *pipe )
 
 
 struct pipe_context *
-softpipe_create_context( struct pipe_screen *, void *priv );
+softpipe_create_context(struct pipe_screen *, void *priv, unsigned flags);
 
 struct pipe_resource *
 softpipe_user_buffer_create(struct pipe_screen *screen,
index 0ffff9c506baebe873096c902696333b7e896ed7..673d17ad4a7f177297ccaf32a9fdc9dfb60f2c36 100644 (file)
@@ -81,8 +81,8 @@ static void svga_destroy( struct pipe_context *pipe )
 
 
 
-struct pipe_context *svga_context_create( struct pipe_screen *screen,
-                                         void *priv )
+struct pipe_context *svga_context_create(struct pipe_screen *screen,
+                                        void *priv, unsigned flags)
 {
    struct svga_screen *svgascreen = svga_screen(screen);
    struct svga_context *svga = NULL;
index 71f038df8c1ad04705bb0f0b1133954306e45e3b..2726346bc50653430c01b9d345492425cf49d90c 100644 (file)
@@ -478,7 +478,7 @@ void svga_surfaces_flush(struct svga_context *svga);
 
 struct pipe_context *
 svga_context_create(struct pipe_screen *screen,
-                   void *priv);
+                   void *priv, unsigned flags);
 
 
 /***********************************************************************
index 1d86a378eeaa3bb06fbc6a38c1684d0a2c39f83b..8b02680c77e0c97228aeb592c06c3f81b8dcf306 100644 (file)
@@ -204,7 +204,8 @@ trace_screen_is_format_supported(struct pipe_screen *_screen,
 
 
 static struct pipe_context *
-trace_screen_context_create(struct pipe_screen *_screen, void *priv)
+trace_screen_context_create(struct pipe_screen *_screen, void *priv,
+                            unsigned flags)
 {
    struct trace_screen *tr_scr = trace_screen(_screen);
    struct pipe_screen *screen = tr_scr->screen;
@@ -213,8 +214,10 @@ trace_screen_context_create(struct pipe_screen *_screen, void *priv)
    trace_dump_call_begin("pipe_screen", "context_create");
 
    trace_dump_arg(ptr, screen);
+   trace_dump_arg(ptr, priv);
+   trace_dump_arg(uint, flags);
 
-   result = screen->context_create(screen, priv);
+   result = screen->context_create(screen, priv, flags);
 
    trace_dump_ret(ptr, result);
 
index fff63158c9d63cf8be7addb6046de9f4101e5002..87d781d088d8eecd91146dc9607309b158667895 100644 (file)
@@ -194,7 +194,7 @@ vc4_context_destroy(struct pipe_context *pctx)
 }
 
 struct pipe_context *
-vc4_context_create(struct pipe_screen *pscreen, void *priv)
+vc4_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 {
         struct vc4_screen *screen = vc4_screen(pscreen);
         struct vc4_context *vc4;
index 3a63af8f2b00c503f40142fdc3036defc7ced118..33b6ec2b92de8c68be7e718d959a48714caa9471 100644 (file)
@@ -365,7 +365,7 @@ vc4_sampler_state(struct pipe_sampler_state *psampler)
 }
 
 struct pipe_context *vc4_context_create(struct pipe_screen *pscreen,
-                                        void *priv);
+                                        void *priv, unsigned flags);
 void vc4_draw_init(struct pipe_context *pctx);
 void vc4_state_init(struct pipe_context *pctx);
 void vc4_program_init(struct pipe_context *pctx);
index 4f2aa14e12950067a29c50e98fc58668161e338c..88e37e9f05669c1901dce50cf7e8acd3a02a3221 100644 (file)
@@ -333,6 +333,21 @@ enum pipe_flush_flags
  */
 #define PIPE_DEBUG_DEVICE_IS_HUNG      (1 << 0)
 
+/**
+ * Create a compute-only context. Use in pipe_screen::context_create.
+ * This disables draw, blit, and clear*, render_condition, and other graphics
+ * functions. Interop with other graphics contexts is still allowed.
+ * This allows scheduling jobs on a compute-only hardware command queue that
+ * can run in parallel with graphics without stalling it.
+ */
+#define PIPE_CONTEXT_COMPUTE_ONLY      (1 << 0)
+
+/**
+ * Gather debug information and expect that pipe_context::dump_debug_state
+ * will be called. Use in pipe_screen::context_create.
+ */
+#define PIPE_CONTEXT_DEBUG             (1 << 1)
+
 /**
  * Flags for pipe_context::memory_barrier.
  */
index 0d2658313e50d5a9cb373d50b26ac545e3e564eb..a7b7b72ac89e4ed88b9c115edcc7e026f9b12efa 100644 (file)
@@ -125,8 +125,15 @@ struct pipe_screen {
     */
    uint64_t (*get_timestamp)(struct pipe_screen *);
 
-   struct pipe_context * (*context_create)( struct pipe_screen *,
-                                           void *priv );
+   /**
+    * Create a context.
+    *
+    * \param screen      pipe screen
+    * \param priv        a pointer to set in pipe_context::priv
+    * \param flags       a mask of PIPE_CONTEXT_* flags
+    */
+   struct pipe_context * (*context_create)(struct pipe_screen *screen,
+                                          void *priv, unsigned flags);
 
    /**
     * Check if the given pipe_format is supported as a texture or
index 87f9dcc647624e26d29b7eb025f7f28a5a8094a3..4aaf67de2411b6572c32e114882be3b85f53e684 100644 (file)
@@ -30,7 +30,7 @@ using namespace clover;
 command_queue::command_queue(clover::context &ctx, clover::device &dev,
                              cl_command_queue_properties props) :
    context(ctx), device(dev), props(props) {
-   pipe = dev.pipe->context_create(dev.pipe, NULL);
+   pipe = dev.pipe->context_create(dev.pipe, NULL, PIPE_CONTEXT_COMPUTE_ONLY);
    if (!pipe)
       throw error(CL_INVALID_DEVICE);
 }
index 9d0f2d2502523a98a9d660b5bd80ad79560c62ee..f598430dc263d6ff1a66f5e0457f8eb6a3390587 100644 (file)
@@ -398,7 +398,7 @@ xmesa_get_context(struct st_framebuffer_iface *stfbi)
 
    pipe = xstfb->display->pipe;
    if (!pipe) {
-      pipe = xstfb->screen->context_create(xstfb->screen, NULL);
+      pipe = xstfb->screen->context_create(xstfb->screen, NULL, 0);
       if (!pipe)
          return NULL;
       xstfb->display->pipe = pipe;
index 99197a4361bf2788bd1e55171023ba60856bac51..f14ffea13e13709026c07599274ab132ff70f89d 100644 (file)
@@ -163,7 +163,7 @@ NineDevice9_ctor( struct NineDevice9 *This,
     if (This->params.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING)
         DBG("Application asked mixed Software Vertex Processing. Ignoring.\n");
 
-    This->pipe = This->screen->context_create(This->screen, NULL);
+    This->pipe = This->screen->context_create(This->screen, NULL, 0);
     if (!This->pipe) { return E_OUTOFMEMORY; } /* guess */
 
     This->cso = cso_create_context(This->pipe);
index 9e7e7ba77878f76ccc3d410465ea13812b26ecb1..5584348761e02f846e665de8aa36d11743f11aab 100644 (file)
@@ -162,7 +162,7 @@ static OMX_ERRORTYPE vid_dec_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam
       return OMX_ErrorInsufficientResources;
 
    screen = priv->screen->pscreen;
-   priv->pipe = screen->context_create(screen, priv->screen);
+   priv->pipe = screen->context_create(screen, priv->screen, 0);
    if (!priv->pipe)
       return OMX_ErrorInsufficientResources;
 
index 2bd0194189f11e4d851032e91dc1c1478dd58cbf..aa45089ae043827300d8235b505ef21fe4e8942b 100644 (file)
@@ -185,7 +185,7 @@ static OMX_ERRORTYPE vid_enc_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam
                                 PIPE_VIDEO_ENTRYPOINT_ENCODE,
                                 PIPE_VIDEO_CAP_STACKED_FRAMES);
 
-   priv->s_pipe = screen->context_create(screen, priv->screen);
+   priv->s_pipe = screen->context_create(screen, priv->screen, 0);
    if (!priv->s_pipe)
       return OMX_ErrorInsufficientResources;
 
@@ -202,7 +202,7 @@ static OMX_ERRORTYPE vid_enc_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam
       return OMX_ErrorInsufficientResources;
    }
 
-   priv->t_pipe = screen->context_create(screen, priv->screen);
+   priv->t_pipe = screen->context_create(screen, priv->screen, 0);
    if (!priv->t_pipe)
       return OMX_ErrorInsufficientResources;
 
index 0a733b39004247b44fd4c65476c80e8319dfec46..8b003aedaece4f9eb46e7b203703b30bf2358463 100644 (file)
@@ -100,7 +100,8 @@ VA_DRIVER_INIT_FUNC(VADriverContextP ctx)
    if (!drv->vscreen)
       goto error_screen;
 
-   drv->pipe = drv->vscreen->pscreen->context_create(drv->vscreen->pscreen, drv->vscreen);
+   drv->pipe = drv->vscreen->pscreen->context_create(drv->vscreen->pscreen,
+                                                     drv->vscreen, 0);
    if (!drv->pipe)
       goto error_pipe;
 
index ba36afc9421aea86deb36c4d956e21e9f1838ecc..31c95054f569e13068e6c3ad0201bfe3639e2345 100644 (file)
@@ -70,7 +70,7 @@ vdp_imp_device_create_x11(Display *display, int screen, VdpDevice *device,
    }
 
    pscreen = dev->vscreen->pscreen;
-   dev->context = pscreen->context_create(pscreen, dev->vscreen);
+   dev->context = pscreen->context_create(pscreen, dev->vscreen, 0);
    if (!dev->context) {
       ret = VDP_STATUS_RESOURCES;
       goto no_context;
index ebfb290af13e32baa48e5ce25ef6b1d00c0ecc27..5553beb2014b945475c40c05c1ef7c67121be280 100644 (file)
@@ -56,7 +56,7 @@ xa_context_create(struct xa_tracker *xa)
     struct xa_context *ctx = calloc(1, sizeof(*ctx));
 
     ctx->xa = xa;
-    ctx->pipe = xa->screen->context_create(xa->screen, NULL);
+    ctx->pipe = xa->screen->context_create(xa->screen, NULL, 0);
     ctx->cso = cso_create_context(ctx->pipe);
     ctx->shaders = xa_shaders_create(ctx);
     renderer_init_state(ctx);
index 9ded2e5f2e2b47d87d047128ad94e2585e5840bf..4702b44d1f4dfd22b56a8168ee5e27cf694691c5 100644 (file)
@@ -237,7 +237,7 @@ Status XvMCCreateContext(Display *dpy, XvPortID port, int surface_type_id,
       return BadAlloc;
    }
 
-   pipe = vscreen->pscreen->context_create(vscreen->pscreen, vscreen);
+   pipe = vscreen->pscreen->context_create(vscreen->pscreen, vscreen, 0);
    if (!pipe) {
       XVMC_MSG(XVMC_ERR, "[XvMC] Could not create VL context.\n");
       vl_screen_destroy(vscreen);
index f38da47407fc982552f512b03547ae4051a6dbd6..533ce9f58d07082889283d8f259b4d663a271942 100644 (file)
@@ -61,7 +61,7 @@ static void init( void )
       exit(1);
    }
    
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index fc5803fd3a90ed55e5a0eefebb412734bdf9d7d3..bd5259afe467436e92b5e467f327a77d2ab29710 100644 (file)
@@ -398,7 +398,7 @@ static void init( void )
       exit(1);
    }
 
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index e7cd0aa3ac30f702a0a1cdc4a1d2cf2b74f65f1f..f09c1eadc9c75ea33b1f0fe6ea4b35c4b04050af 100644 (file)
@@ -60,7 +60,7 @@ graw_util_create_window(struct graw_info *info,
       return FALSE;
    }
    
-   info->ctx = info->screen->context_create(info->screen, NULL);
+   info->ctx = info->screen->context_create(info->screen, NULL, 0);
    if (info->ctx == NULL) {
       debug_printf("graw: Failed to create context\n");
       return FALSE;
index b685323fe3c4f067335ccc955e9b63b096c58328..c680b62eaaa75de47e0c15911b80a582d25516ab 100644 (file)
@@ -505,7 +505,7 @@ static void init( void )
       exit(1);
    }
 
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index 2953fe16a8a85964b0c03b9eb0501422cd731e36..97f241ff844d7095a97c6dc1a0fa5a60743fd791 100644 (file)
@@ -313,7 +313,7 @@ static void init( void )
       exit(1);
    }
 
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index 3c585c0a5a667654a9f7a75a603001a061e6e08f..a4502afff6497bb67d60233d0a80f375e64497de 100644 (file)
@@ -188,7 +188,7 @@ static void init( void )
       exit(1);
    }
 
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index 5c6f426e96acf6a0de8c8cc22dd2dbb3220d275c..6aad51c94a0b7d9a52fecd76d152c6862047f609 100644 (file)
@@ -195,7 +195,7 @@ static void init( void )
       exit(1);
    }
    
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index a71bf71b61b28d21a823f6b0369db43e20500b8d..2065c11f68de7155e7c8d5dacd94d6945987f7f1 100644 (file)
@@ -246,7 +246,7 @@ static void init( void )
       exit(1);
    }
    
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index 5189d815f4cac97f05bffc09c551cfd30fc7ce52..5c7843eb11ad749d3867e500efadb58e36a3b908 100644 (file)
@@ -392,7 +392,7 @@ static void init( void )
       exit(1);
    }
    
-   ctx = screen->context_create(screen, NULL);
+   ctx = screen->context_create(screen, NULL, 0);
    if (ctx == NULL)
       exit(3);
 
index 4edb8576f5229e3a53c38a955e6d989ba5bf624d..b344f78b25c0cd87a36790ff23b10748eda4a513 100644 (file)
@@ -77,7 +77,7 @@ static void init_ctx(struct context *ctx)
         ctx->screen = pipe_loader_create_screen(ctx->dev, PIPE_SEARCH_DIR);
         assert(ctx->screen);
 
-        ctx->pipe = ctx->screen->context_create(ctx->screen, NULL);
+        ctx->pipe = ctx->screen->context_create(ctx->screen, NULL, 0);
         assert(ctx->pipe);
 
         DUMP_COMPUTE_PARAM(p, PIPE_COMPUTE_CAP_GRID_DIMENSION);
index c019c7bb0a3c590b9579db22b2d0965c4686b3fd..f66f63043da26b3365108add9dc72165114947fc 100644 (file)
@@ -100,7 +100,7 @@ static void init_prog(struct program *p)
        assert(p->screen);
 
        /* create the pipe driver context and cso context */
-       p->pipe = p->screen->context_create(p->screen, NULL);
+       p->pipe = p->screen->context_create(p->screen, NULL, 0);
        p->cso = cso_create_context(p->pipe);
 
        /* set clear color */
index 078beb8f43fe9de80a9f050ff2683f0f2ab8f025..a555200842e6e75b7e0e332724022b0bd6949156 100644 (file)
@@ -95,7 +95,7 @@ static void init_prog(struct program *p)
        assert(p->screen);
 
        /* create the pipe driver context and cso context */
-       p->pipe = p->screen->context_create(p->screen, NULL);
+       p->pipe = p->screen->context_create(p->screen, NULL, 0);
        p->cso = cso_create_context(p->pipe);
 
        /* set clear color */
index 9b90eaa018ba83dd24a985754429cb8894ad510f..5c179930d9b90168d0afd30b1d7589b7f95a02c4 100644 (file)
@@ -299,7 +299,7 @@ wrapper_sw_winsys_wrap_pipe_screen(struct pipe_screen *screen)
    wsw->base.destroy = wsw_destroy;
 
    wsw->screen = screen;
-   wsw->pipe = screen->context_create(screen, NULL);
+   wsw->pipe = screen->context_create(screen, NULL, 0);
    if (!wsw->pipe)
       goto err_free;
 
index 2e2c8ffaed9f291f8d2419a56f3851db2ef5fdb1..7abd128e719c0eee847bddd9ae2c959294217de2 100644 (file)
@@ -657,7 +657,7 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
       break;
    }
 
-   pipe = smapi->screen->context_create(smapi->screen, NULL);
+   pipe = smapi->screen->context_create(smapi->screen, NULL, 0);
    if (!pipe) {
       *error = ST_CONTEXT_ERROR_NO_MEMORY;
       return NULL;