gallium/radeon: use cs_check_space throughout
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 6 May 2016 17:42:05 +0000 (12:42 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 1 Jun 2016 20:52:18 +0000 (22:52 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/r300/r300_blit.c
src/gallium/drivers/r300/r300_render.c
src/gallium/drivers/r600/r600_hw_context.c
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/radeonsi/si_hw_context.c

index b8cc316c2ac2b1d35d855f94f2401f40017b90fe..2ee9b54ecf545d43a5223b8a224dbf4f7f5ecb92 100644 (file)
@@ -382,7 +382,7 @@ static void r300_clear(struct pipe_context* pipe,
             r300_get_num_cs_end_dwords(r300);
 
         /* Reserve CS space. */
-        if (dwords > (r300->cs->max_dw - r300->cs->cdw)) {
+        if (!r300->rws->cs_check_space(r300->cs, dwords)) {
             r300_flush(&r300->context, RADEON_FLUSH_ASYNC, NULL);
         }
 
index 43860f3035c77ecc42b707d73022d0b65eaff6cc..ad0f489617212270fa3b0a13d59e30a13d104dc9 100644 (file)
@@ -215,7 +215,7 @@ static boolean r300_reserve_cs_dwords(struct r300_context *r300,
     cs_dwords += r300_get_num_cs_end_dwords(r300);
 
     /* Reserve requested CS space. */
-    if (cs_dwords > (r300->cs->max_dw - r300->cs->cdw)) {
+    if (!r300->rws->cs_check_space(r300->cs, cs_dwords)) {
         r300_flush(&r300->context, RADEON_FLUSH_ASYNC, NULL);
         flushed = TRUE;
     }
index 1f7bed824b00b896806bd2f1181aee527b7a2fe2..ccfa8f5c306f0c11398855c894c57ce86340c9e0 100644 (file)
@@ -47,9 +47,7 @@ void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw,
        ctx->b.gtt = 0;
        ctx->b.vram = 0;
 
-       /* The number of dwords we already used in the CS so far. */
-       num_dw += ctx->b.gfx.cs->cdw;
-
+       /* Check available space in CS. */
        if (count_draw_in) {
                uint64_t mask;
 
@@ -82,7 +80,7 @@ void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw,
        num_dw += 10;
 
        /* Flush if there's not enough space. */
-       if (num_dw > ctx->b.gfx.cs->max_dw) {
+       if (!ctx->b.ws->cs_check_space(ctx->b.gfx.cs, num_dw)) {
                ctx->b.gfx.flush(ctx, RADEON_FLUSH_ASYNC, NULL);
        }
 }
index c00e5848e3ab35ff46ae5e96ae526f25d1491afa..fa766977aa02fd435d7acb63184806f8509449b8 100644 (file)
@@ -168,7 +168,7 @@ void r600_need_dma_space(struct r600_common_context *ctx, unsigned num_dw,
        /* Flush if there's not enough space, or if the memory usage per IB
         * is too large.
         */
-       if ((num_dw + ctx->dma.cs->cdw) > ctx->dma.cs->max_dw ||
+       if (!ctx->ws->cs_check_space(ctx->dma.cs, num_dw) ||
            !ctx->ws->cs_memory_below_limit(ctx->dma.cs, vram, gtt)) {
                ctx->dma.flush(ctx, RADEON_FLUSH_ASYNC, NULL);
                assert((num_dw + ctx->dma.cs->cdw) <= ctx->dma.cs->max_dw);
index 6221f1cb83a5c9ae199c36101cd20005fdec54bd..c25b264ec5c4f13703667e4174de9056d32dd267 100644 (file)
@@ -84,9 +84,8 @@ void si_need_cs_space(struct si_context *ctx)
        /* If the CS is sufficiently large, don't count the space needed
         * and just flush if there is not enough space left.
         */
-       if (unlikely(cs->cdw > cs->max_dw - 2048 ||
-                     (ce_ib && ce_ib->max_dw - ce_ib->cdw <
-                      si_ce_needed_cs_space())))
+       if (!ctx->b.ws->cs_check_space(cs, 2048) ||
+           (ce_ib && !ctx->b.ws->cs_check_space(ce_ib, si_ce_needed_cs_space())))
                ctx->b.gfx.flush(ctx, RADEON_FLUSH_ASYNC, NULL);
 }