Allows allocation of >= 4 GiB.

Signed-off-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
---
 src/gallium/drivers/radeonsi/si_compute.c       | 23 +++++++++++------------
 src/gallium/drivers/radeonsi/si_pipe.c          |  4 ++--
 src/gallium/drivers/radeonsi/si_pipe.h          |  4 ++--
 src/gallium/drivers/radeonsi/si_shader.c        |  2 +-
 src/gallium/drivers/radeonsi/si_shader.h        |  2 +-
 src/gallium/drivers/radeonsi/si_state_draw.c    |  6 +++---
 src/gallium/drivers/radeonsi/si_state_shaders.c | 18 +++++++++---------
 7 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_compute.c 
b/src/gallium/drivers/radeonsi/si_compute.c
index 905c169..b4981b4 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -203,30 +203,29 @@ static bool si_setup_compute_scratch_buffer(struct 
si_context *sctx,
        scratch_bo_size = 0;
        scratch_needed = config->scratch_bytes_per_wave * sctx->scratch_waves;
        if (sctx->compute_scratch_buffer)
-               scratch_bo_size = sctx->compute_scratch_buffer->b.b.width0;
+               scratch_bo_size = sctx->compute_scratch_buffer->size;
 
        if (scratch_bo_size < scratch_needed) {
-               pipe_resource_reference(
-                       (struct pipe_resource**)&sctx->compute_scratch_buffer,
-                       NULL);
+               pb_reference(&sctx->compute_scratch_buffer, NULL);
 
-               sctx->compute_scratch_buffer =
-                               si_resource_create_custom(&sctx->screen->b.b,
-                                PIPE_USAGE_DEFAULT, scratch_needed);
+               sctx->compute_scratch_buffer = 
sctx->b.ws->buffer_create(sctx->b.ws,
+                               scratch_needed, 256, false, RADEON_DOMAIN_VRAM,
+                               RADEON_FLAG_NO_CPU_ACCESS);
 
                if (!sctx->compute_scratch_buffer)
                        return false;
        }
 
        if (sctx->compute_scratch_buffer != shader->scratch_bo && 
scratch_needed) {
-               uint64_t scratch_va = sctx->compute_scratch_buffer->gpu_address;
+               uint64_t scratch_va = sctx->b.ws->buffer_get_virtual_address(
+                                                 sctx->compute_scratch_buffer);
 
                si_shader_apply_scratch_relocs(sctx, shader, scratch_va);
 
                if (si_shader_binary_upload(sctx->screen, shader))
                        return false;
 
-               r600_resource_reference(&shader->scratch_bo,
+               pb_reference(&shader->scratch_bo,
                                        sctx->compute_scratch_buffer);
        }
 
@@ -282,9 +281,9 @@ static bool si_switch_compute_shader(struct si_context 
*sctx,
                            config->scratch_bytes_per_wave *
                            sctx->scratch_waves);
 
-               radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
-                             shader->scratch_bo, RADEON_USAGE_READWRITE,
-                             RADEON_PRIO_SCRATCH_BUFFER);
+               sctx->b.ws->cs_add_buffer(sctx->b.gfx.cs, shader->scratch_bo,
+                                     RADEON_USAGE_READWRITE, 
RADEON_DOMAIN_VRAM,
+                                     RADEON_PRIO_SCRATCH_BUFFER);
        }
 
        shader_va = shader->bo->gpu_address + offset;
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
b/src/gallium/drivers/radeonsi/si_pipe.c
index 17d59b6..89df7db 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -51,8 +51,8 @@ static void si_destroy_context(struct pipe_context *context)
        pipe_resource_reference(&sctx->null_const_buf.buffer, NULL);
        r600_resource_reference(&sctx->border_color_buffer, NULL);
        free(sctx->border_color_table);
-       r600_resource_reference(&sctx->scratch_buffer, NULL);
-       r600_resource_reference(&sctx->compute_scratch_buffer, NULL);
+       pb_reference(&sctx->scratch_buffer, NULL);
+       pb_reference(&sctx->compute_scratch_buffer, NULL);
        sctx->b.ws->fence_reference(&sctx->last_gfx_fence, NULL);
 
        si_pm4_free_state(sctx, sctx->init_config, ~0);
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h 
b/src/gallium/drivers/radeonsi/si_pipe.h
index a28c7d70..6ff6c3e 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -300,12 +300,12 @@ struct si_context {
        unsigned                last_gsvs_itemsize;
 
        /* Scratch buffer */
-       struct r600_resource    *scratch_buffer;
+       struct pb_buffer        *scratch_buffer;
        boolean                 emit_scratch_reloc;
        unsigned                scratch_waves;
        unsigned                spi_tmpring_size;
 
-       struct r600_resource    *compute_scratch_buffer;
+       struct pb_buffer        *compute_scratch_buffer;
 
        /* Emitted derived tessellation state. */
        struct si_shader        *last_ls; /* local shader (VS) */
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 3bf68eb..a77392d 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -7119,7 +7119,7 @@ void si_shader_destroy(struct si_shader *shader)
        }
 
        if (shader->scratch_bo)
-               r600_resource_reference(&shader->scratch_bo, NULL);
+               pb_reference(&shader->scratch_bo, NULL);
 
        r600_resource_reference(&shader->bo, NULL);
 
diff --git a/src/gallium/drivers/radeonsi/si_shader.h 
b/src/gallium/drivers/radeonsi/si_shader.h
index 6ea849d..197e67d 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -402,7 +402,7 @@ struct si_shader {
        struct si_shader                *gs_copy_shader;
        struct si_pm4_state             *pm4;
        struct r600_resource            *bo;
-       struct r600_resource            *scratch_bo;
+       struct pb_buffer                *scratch_bo;
        union si_shader_key             key;
        bool                            is_binary_shared;
        unsigned                        z_order;
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c 
b/src/gallium/drivers/radeonsi/si_state_draw.c
index b61c05a..758ffd2 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -359,9 +359,9 @@ static void si_emit_scratch_reloc(struct si_context *sctx)
                               sctx->spi_tmpring_size);
 
        if (sctx->scratch_buffer) {
-               radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
-                                     sctx->scratch_buffer, 
RADEON_USAGE_READWRITE,
-                                     RADEON_PRIO_SCRATCH_BUFFER);
+               sctx->b.ws->cs_add_buffer(sctx->b.gfx.cs, sctx->scratch_buffer,
+                          RADEON_USAGE_READWRITE, RADEON_DOMAIN_VRAM,
+                          RADEON_PRIO_SCRATCH_BUFFER);
 
        }
        sctx->emit_scratch_reloc = false;
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index d560aae..412a4c9 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1617,7 +1617,8 @@ static void si_update_gsvs_ring_bindings(struct 
si_context *sctx)
 static int si_update_scratch_buffer(struct si_context *sctx,
                                    struct si_shader *shader)
 {
-       uint64_t scratch_va = sctx->scratch_buffer->gpu_address;
+       uint64_t scratch_va = sctx->b.ws->buffer_get_virtual_address(
+                                                         sctx->scratch_buffer);
        int r;
 
        if (!shader)
@@ -1644,14 +1645,14 @@ static int si_update_scratch_buffer(struct si_context 
*sctx,
        /* Update the shader state to use the new shader bo. */
        si_shader_init_pm4_state(shader);
 
-       r600_resource_reference(&shader->scratch_bo, sctx->scratch_buffer);
+       pb_reference(&shader->scratch_bo, sctx->scratch_buffer);
 
        return 1;
 }
 
 static unsigned si_get_current_scratch_buffer_size(struct si_context *sctx)
 {
-       return sctx->scratch_buffer ? sctx->scratch_buffer->b.b.width0 : 0;
+       return sctx->scratch_buffer ? sctx->scratch_buffer->size : 0;
 }
 
 static unsigned si_get_scratch_buffer_bytes_per_wave(struct si_shader *shader)
@@ -1685,13 +1686,12 @@ static bool si_update_spi_tmpring_size(struct 
si_context *sctx)
        if (scratch_needed_size > 0) {
                if (scratch_needed_size > current_scratch_buffer_size) {
                        /* Create a bigger scratch buffer */
-                       pipe_resource_reference(
-                                       (struct 
pipe_resource**)&sctx->scratch_buffer,
-                                       NULL);
+                       pb_reference(&sctx->scratch_buffer, NULL);
 
-                       sctx->scratch_buffer =
-                                       
si_resource_create_custom(&sctx->screen->b.b,
-                                       PIPE_USAGE_DEFAULT, 
scratch_needed_size);
+                       sctx->scratch_buffer = 
sctx->b.ws->buffer_create(sctx->b.ws,
+                                                   scratch_needed_size, 256, 
false,
+                                                   RADEON_DOMAIN_VRAM,
+                                                   RADEON_FLAG_NO_CPU_ACCESS);
                        if (!sctx->scratch_buffer)
                                return false;
                        sctx->emit_scratch_reloc = true;
-- 
2.8.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to