r600g: set the flush callback in radeon_winsys
authorMarek Olšák <maraeo@gmail.com>
Thu, 4 Aug 2011 01:38:20 +0000 (03:38 +0200)
committerMarek Olšák <maraeo@gmail.com>
Tue, 16 Aug 2011 07:15:11 +0000 (09:15 +0200)
I have also renamed the winsys function.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/r300/r300_context.c
src/gallium/drivers/r600/r600.h
src/gallium/drivers/r600/r600_pipe.c
src/gallium/winsys/r600/drm/evergreen_hw_context.c
src/gallium/winsys/r600/drm/r600_hw_context.c
src/gallium/winsys/radeon/drm/radeon_drm_cs.c
src/gallium/winsys/radeon/drm/radeon_winsys.h

index 5c222588e4765a9d403f64caef49c35120dfadd9..b304999d424733aaec55e6b9d9b0bbf2c75a90a5 100644 (file)
@@ -457,7 +457,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
     r300_init_render_functions(r300);
     r300_init_states(&r300->context);
 
-    rws->cs_set_flush(r300->cs, r300_flush_callback, r300);
+    rws->cs_set_flush_callback(r300->cs, r300_flush_callback, r300);
 
     /* The KIL opcode needs the first texture unit to be enabled
      * on r3xx-r4xx. In order to calm down the CS checker, we bind this
index 84cfa2a17e6dc8910feceb56b303a5b0530b0d28..21b42736c6a3fcbef28b5a39009eed3b6bff3913 100644 (file)
@@ -278,7 +278,7 @@ void r600_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct r6
 void r600_context_pipe_state_set_fs_resource(struct r600_context *ctx, struct r600_pipe_resource_state *state, unsigned rid);
 void r600_context_pipe_state_set_ps_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id);
 void r600_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id);
-void r600_context_flush(struct r600_context *ctx);
+void r600_context_flush(struct r600_context *ctx, unsigned flags);
 void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw);
 
 struct r600_query *r600_context_query_create(struct r600_context *ctx, unsigned query_type);
index 8a18207d1ea66a61f31de1db2a0416ff830abf55..e3e31982acd2364745718819770407b737728eac 100644 (file)
@@ -114,8 +114,10 @@ static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx)
        return fence;
 }
 
+
 static void r600_flush(struct pipe_context *ctx,
-                       struct pipe_fence_handle **fence)
+                      struct pipe_fence_handle **fence,
+                      unsigned flags)
 {
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
        struct r600_fence **rfence = (struct r600_fence**)fence;
@@ -123,7 +125,18 @@ static void r600_flush(struct pipe_context *ctx,
        if (rfence)
                *rfence = r600_create_fence(rctx);
 
-       r600_context_flush(&rctx->ctx);
+       r600_context_flush(&rctx->ctx, flags);
+}
+
+static void r600_flush_from_st(struct pipe_context *ctx,
+                              struct pipe_fence_handle **fence)
+{
+       r600_flush(ctx, fence, 0);
+}
+
+static void r600_flush_from_winsys(void *ctx, unsigned flags)
+{
+       r600_flush((struct pipe_context*)ctx, NULL, flags);
 }
 
 static void r600_update_num_contexts(struct r600_screen *rscreen, int diff)
@@ -194,7 +207,7 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
        rctx->context.screen = screen;
        rctx->context.priv = priv;
        rctx->context.destroy = r600_destroy_context;
-       rctx->context.flush = r600_flush;
+       rctx->context.flush = r600_flush_from_st;
 
        /* Easy accessing of screen/winsys. */
        rctx->screen = rscreen;
@@ -244,6 +257,8 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
                return NULL;
        }
 
+       rctx->screen->ws->cs_set_flush_callback(rctx->ctx.cs, r600_flush_from_winsys, rctx);
+
        util_slab_create(&rctx->pool_transfers,
                         sizeof(struct pipe_transfer), 64,
                         UTIL_SLAB_SINGLETHREADED);
index 29da7bea4c6b0d9a1222aead032824e0f5f118c2..1d582ceeaa540ed5c0f0b9c36a863fa5ac434efa 100644 (file)
@@ -1158,7 +1158,7 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr
 
        if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
        }
        /* at that point everythings is flushed and ctx->pm4_cdwords = 0 */
        if ((ctx->pm4_dirty_cdwords + ndwords) > ctx->pm4_ndwords) {
index c72e8548de8dea1f35de40a9903e50a762def503..760bfc591c0bbf43c04856e19aaf7d66794b21b3 100644 (file)
@@ -89,7 +89,7 @@ void r600_get_backend_mask(struct r600_context *ctx)
                ctx->pm4[ctx->pm4_cdwords++] = r600_context_bo_reloc(ctx, buffer);
 
                /* execute */
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
 
                /* analyze results */
                results = r600_bo_map(ctx->radeon, buffer, PB_USAGE_CPU_READ, NULL);
@@ -940,7 +940,7 @@ void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags)
 
        if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
        }
 
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing);
@@ -1441,7 +1441,7 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
 
        if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
        }
        /* at that point everythings is flushed and ctx->pm4_cdwords = 0 */
        if ((ctx->pm4_dirty_cdwords + ndwords) > ctx->pm4_ndwords) {
@@ -1485,7 +1485,7 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
        ctx->pm4_dirty_cdwords = 0;
 }
 
-void r600_context_flush(struct r600_context *ctx)
+void r600_context_flush(struct r600_context *ctx, unsigned flags)
 {
        struct r600_block *enable_block = NULL;
 
@@ -1506,7 +1506,8 @@ void r600_context_flush(struct r600_context *ctx)
 
        /* Flush the CS. */
        ctx->cs->cdw = ctx->pm4_cdwords;
-       ctx->radeon->ws->cs_flush(ctx->cs, 0);
+       ctx->radeon->ws->cs_flush(ctx->cs, flags);
+
        /* We need to get the pointer to the other CS,
         * the command streams are double-buffered. */
        ctx->pm4 = ctx->cs->buf;
@@ -1553,7 +1554,7 @@ void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence_bo,
 
        if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
        }
 
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
@@ -1615,7 +1616,7 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
 
        if ((required_space + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
        }
 
        if (query->type == PIPE_QUERY_OCCLUSION_COUNTER) {
@@ -1626,7 +1627,7 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
                        query->queries_emitted = 1;
                } else {
                        if (++query->queries_emitted > query->buffer_size / query->result_size / 2)
-                               r600_context_flush(ctx);
+                               r600_context_flush(ctx, 0);
                }
        }
 
@@ -1637,7 +1638,7 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
        /* collect current results if query buffer is full */
        if (new_results_end == query->results_start) {
                if (!(query->state & R600_QUERY_STATE_FLUSHED))
-                       r600_context_flush(ctx);
+                       r600_context_flush(ctx, 0);
                r600_query_result(ctx, query, TRUE);
        }
 
@@ -1718,7 +1719,7 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query,
 {
        if (operation == PREDICATION_OP_CLEAR) {
                if (ctx->pm4_cdwords + 3 > ctx->pm4_ndwords)
-                       r600_context_flush(ctx);
+                       r600_context_flush(ctx, 0);
 
                ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SET_PREDICATION, 1, 0);
                ctx->pm4[ctx->pm4_cdwords++] = 0;
@@ -1734,7 +1735,7 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query,
                count /= query->result_size;
 
                if (ctx->pm4_cdwords + 5 * count > ctx->pm4_ndwords)
-                       r600_context_flush(ctx);
+                       r600_context_flush(ctx, 0);
 
                op = PRED_OP(operation) | PREDICATION_DRAW_VISIBLE |
                                (flag_wait ? PREDICATION_HINT_WAIT : PREDICATION_HINT_NOWAIT_DRAW);
@@ -1807,7 +1808,7 @@ boolean r600_context_query_result(struct r600_context *ctx,
        uint64_t *result = (uint64_t*)vresult;
 
        if (!(query->state & R600_QUERY_STATE_FLUSHED)) {
-               r600_context_flush(ctx);
+               r600_context_flush(ctx, 0);
        }
        if (!r600_query_result(ctx, query, wait))
                return FALSE;
index 6da0ae6774364ec4aae43ea3501d6405b04929a8..1ec324e5b74969b044c542d259e0427853f21bf6 100644 (file)
@@ -477,6 +477,6 @@ void radeon_drm_cs_init_functions(struct radeon_drm_winsys *ws)
     ws->base.cs_validate = radeon_drm_cs_validate;
     ws->base.cs_write_reloc = radeon_drm_cs_write_reloc;
     ws->base.cs_flush = radeon_drm_cs_flush;
-    ws->base.cs_set_flush = radeon_drm_cs_set_flush;
+    ws->base.cs_set_flush_callback = radeon_drm_cs_set_flush;
     ws->base.cs_is_buffer_referenced = radeon_bo_is_referenced;
 }
index dcb3f587a6e80b27a9649e0d31e89c6a98f5368a..47274055207c0ae40e3cecaa30863723134ab019 100644 (file)
@@ -306,9 +306,9 @@ struct radeon_winsys {
      * \param flush     A flush callback function associated with the command stream.
      * \param user      A user pointer that will be passed to the flush callback.
      */
-    void (*cs_set_flush)(struct radeon_winsys_cs *cs,
-                         void (*flush)(void *ctx, unsigned flags),
-                         void *ctx);
+    void (*cs_set_flush_callback)(struct radeon_winsys_cs *cs,
+                                  void (*flush)(void *ctx, unsigned flags),
+                                  void *ctx);
 
     /**
      * Return TRUE if a buffer is referenced by a command stream.