radeonsi: use R600_RESOURCE_FLAG_UNMAPPABLE where it's desirable
authorMarek Olšák <marek.olsak@amd.com>
Wed, 15 Feb 2017 19:44:24 +0000 (20:44 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 18 Feb 2017 00:22:08 +0000 (01:22 +0100)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/r600_texture.c
src/gallium/drivers/radeonsi/si_compute.c
src/gallium/drivers/radeonsi/si_cp_dma.c
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_state_shaders.c

index 47aa8b125313a696a92f11898211d8602c5b6c56..0865d35fd29c3c8a57f6fbe81c63c39be2a5d624 100644 (file)
@@ -763,7 +763,9 @@ static void r600_texture_alloc_cmask_separate(struct r600_common_screen *rscreen
        }
 
        rtex->cmask_buffer = (struct r600_resource *)
-               r600_aligned_buffer_create(&rscreen->b, 0, PIPE_USAGE_DEFAULT,
+               r600_aligned_buffer_create(&rscreen->b,
+                                          R600_RESOURCE_FLAG_UNMAPPABLE,
+                                          PIPE_USAGE_DEFAULT,
                                           rtex->cmask.size,
                                           rtex->cmask.alignment);
        if (rtex->cmask_buffer == NULL) {
@@ -874,7 +876,9 @@ static void r600_texture_allocate_htile(struct r600_common_screen *rscreen,
                return;
 
        rtex->htile_buffer = (struct r600_resource*)
-               r600_aligned_buffer_create(&rscreen->b, 0, PIPE_USAGE_DEFAULT,
+               r600_aligned_buffer_create(&rscreen->b,
+                                          R600_RESOURCE_FLAG_UNMAPPABLE,
+                                          PIPE_USAGE_DEFAULT,
                                           rtex->surface.htile_size,
                                           rtex->surface.htile_alignment);
        if (rtex->htile_buffer == NULL) {
@@ -2106,7 +2110,8 @@ static void vi_separate_dcc_try_enable(struct r600_common_context *rctx,
                tex->last_dcc_separate_buffer = NULL;
        } else {
                tex->dcc_separate_buffer = (struct r600_resource*)
-                       r600_aligned_buffer_create(rctx->b.screen, 0,
+                       r600_aligned_buffer_create(rctx->b.screen,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
                                                   PIPE_USAGE_DEFAULT,
                                                   tex->surface.dcc_size,
                                                   tex->surface.dcc_alignment);
index 88d72c1ea2aff8c8b6e78fbe3eb85191efbfc40f..f4efb0df8d3d123566fb51ba04c8d065cbde0ff2 100644 (file)
@@ -289,8 +289,10 @@ static bool si_setup_compute_scratch_buffer(struct si_context *sctx,
                r600_resource_reference(&sctx->compute_scratch_buffer, NULL);
 
                sctx->compute_scratch_buffer = (struct r600_resource*)
-                       pipe_buffer_create(&sctx->screen->b.b, 0,
-                                          PIPE_USAGE_DEFAULT, scratch_needed);
+                       r600_aligned_buffer_create(&sctx->screen->b.b,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                  PIPE_USAGE_DEFAULT,
+                                                  scratch_needed, 256);
 
                if (!sctx->compute_scratch_buffer)
                        return false;
index ea999d9f654e299d2551245b6202640a4799a940..1be7586d16b15eb20869a3150c3b043a16f73a15 100644 (file)
@@ -276,8 +276,10 @@ static void si_cp_dma_realign_engine(struct si_context *sctx, unsigned size,
            sctx->scratch_buffer->b.b.width0 < scratch_size) {
                r600_resource_reference(&sctx->scratch_buffer, NULL);
                sctx->scratch_buffer = (struct r600_resource*)
-                       pipe_buffer_create(&sctx->screen->b.b, 0,
-                                          PIPE_USAGE_DEFAULT, scratch_size);
+                       r600_aligned_buffer_create(&sctx->screen->b.b,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                  PIPE_USAGE_DEFAULT,
+                                                  scratch_size, 256);
                if (!sctx->scratch_buffer)
                        return;
 
index a947bad5e42353548f4511d4c4ddba7c5ce067d8..843c6b349b7fc9b6cfff4ff316c461ace7fbd84d 100644 (file)
@@ -204,8 +204,9 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
                }
 
                sctx->ce_suballocator =
-                               u_suballocator_create(&sctx->b.b, 1024 * 1024,
-                                                     0, PIPE_USAGE_DEFAULT, 0, false);
+                       u_suballocator_create(&sctx->b.b, 1024 * 1024, 0,
+                                             PIPE_USAGE_DEFAULT,
+                                             R600_RESOURCE_FLAG_UNMAPPABLE, false);
                if (!sctx->ce_suballocator)
                        goto fail;
        }
@@ -257,8 +258,11 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
        /* CIK cannot unbind a constant buffer (S_BUFFER_LOAD doesn't skip loads
         * if NUM_RECORDS == 0). We need to use a dummy buffer instead. */
        if (sctx->b.chip_class == CIK) {
-               sctx->null_const_buf.buffer = pipe_buffer_create(screen, PIPE_BIND_CONSTANT_BUFFER,
-                                                                PIPE_USAGE_DEFAULT, 16);
+               sctx->null_const_buf.buffer =
+                       r600_aligned_buffer_create(screen,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                  PIPE_USAGE_DEFAULT, 16,
+                                                  sctx->screen->b.info.tcc_cache_line_size);
                if (!sctx->null_const_buf.buffer)
                        goto fail;
                sctx->null_const_buf.buffer_size = sctx->null_const_buf.buffer->width0;
index 179176c486e43b290029a18925ab6d9b66b75346..4a81b566dc140039d2573725d1f8ff27b15e4dc1 100644 (file)
@@ -2079,18 +2079,22 @@ static bool si_update_gs_ring_buffers(struct si_context *sctx)
 
        if (update_esgs) {
                pipe_resource_reference(&sctx->esgs_ring, NULL);
-               sctx->esgs_ring = pipe_buffer_create(sctx->b.b.screen, 0,
-                                                    PIPE_USAGE_DEFAULT,
-                                                    esgs_ring_size);
+               sctx->esgs_ring =
+                       r600_aligned_buffer_create(sctx->b.b.screen,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                  PIPE_USAGE_DEFAULT,
+                                                  esgs_ring_size, alignment);
                if (!sctx->esgs_ring)
                        return false;
        }
 
        if (update_gsvs) {
                pipe_resource_reference(&sctx->gsvs_ring, NULL);
-               sctx->gsvs_ring = pipe_buffer_create(sctx->b.b.screen, 0,
-                                                    PIPE_USAGE_DEFAULT,
-                                                    gsvs_ring_size);
+               sctx->gsvs_ring =
+                       r600_aligned_buffer_create(sctx->b.b.screen,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                  PIPE_USAGE_DEFAULT,
+                                                  gsvs_ring_size, alignment);
                if (!sctx->gsvs_ring)
                        return false;
        }
@@ -2227,8 +2231,10 @@ static bool si_update_spi_tmpring_size(struct si_context *sctx)
                        r600_resource_reference(&sctx->scratch_buffer, NULL);
 
                        sctx->scratch_buffer = (struct r600_resource*)
-                                       pipe_buffer_create(&sctx->screen->b.b, 0,
-                                       PIPE_USAGE_DEFAULT, scratch_needed_size);
+                               r600_aligned_buffer_create(&sctx->screen->b.b,
+                                                          R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                          PIPE_USAGE_DEFAULT,
+                                                          scratch_needed_size, 256);
                        if (!sctx->scratch_buffer)
                                return false;
 
@@ -2332,18 +2338,23 @@ static void si_init_tess_factor_ring(struct si_context *sctx)
        }
 
        assert(!sctx->tf_ring);
-       sctx->tf_ring = pipe_buffer_create(sctx->b.b.screen, 0,
-                                          PIPE_USAGE_DEFAULT,
-                                          32768 * sctx->screen->b.info.max_se);
+       sctx->tf_ring = r600_aligned_buffer_create(sctx->b.b.screen,
+                                                  R600_RESOURCE_FLAG_UNMAPPABLE,
+                                                  PIPE_USAGE_DEFAULT,
+                                                  32768 * sctx->screen->b.info.max_se,
+                                                  256);
        if (!sctx->tf_ring)
                return;
 
        assert(((sctx->tf_ring->width0 / 4) & C_030938_SIZE) == 0);
 
-       sctx->tess_offchip_ring = pipe_buffer_create(sctx->b.b.screen, 0,
-                                                    PIPE_USAGE_DEFAULT,
-                                                    max_offchip_buffers *
-                                                    sctx->screen->tess_offchip_block_dw_size * 4);
+       sctx->tess_offchip_ring =
+               r600_aligned_buffer_create(sctx->b.b.screen,
+                                          R600_RESOURCE_FLAG_UNMAPPABLE,
+                                          PIPE_USAGE_DEFAULT,
+                                          max_offchip_buffers *
+                                          sctx->screen->tess_offchip_block_dw_size * 4,
+                                          256);
        if (!sctx->tess_offchip_ring)
                return;