radeonsi: rename r600_resource to si_resource
authorChristian König <deathsimple@vodafone.de>
Tue, 24 Jul 2012 16:47:19 +0000 (18:47 +0200)
committerChristian König <deathsimple@vodafone.de>
Mon, 30 Jul 2012 12:44:38 +0000 (14:44 +0200)
Also split it into seperate header and add
some helper functions.

Signed-off-by: Christian König <deathsimple@vodafone.de>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
15 files changed:
src/gallium/drivers/radeonsi/r600.h
src/gallium/drivers/radeonsi/r600_buffer.c
src/gallium/drivers/radeonsi/r600_hw_context.c
src/gallium/drivers/radeonsi/r600_hw_context_priv.h
src/gallium/drivers/radeonsi/r600_resource.h
src/gallium/drivers/radeonsi/r600_texture.c
src/gallium/drivers/radeonsi/radeonsi_pipe.c
src/gallium/drivers/radeonsi/radeonsi_pipe.h
src/gallium/drivers/radeonsi/radeonsi_pm4.c
src/gallium/drivers/radeonsi/radeonsi_pm4.h
src/gallium/drivers/radeonsi/radeonsi_resource.h [new file with mode: 0644]
src/gallium/drivers/radeonsi/radeonsi_shader.c
src/gallium/drivers/radeonsi/si_state.c
src/gallium/drivers/radeonsi/si_state.h
src/gallium/drivers/radeonsi/si_state_draw.c

index 6ff0bf82cfb4ac9c7019ef29cda4658143be203e..f22d920f504f16418027de8c8054272b95d60e7d 100644 (file)
@@ -30,6 +30,8 @@
 #include "util/u_double_list.h"
 #include "util/u_transfer.h"
 
+#include "radeonsi_resource.h"
+
 #define R600_ERR(fmt, args...) \
        fprintf(stderr, "EE %s:%d %s - "fmt, __FILE__, __LINE__, __func__, ##args)
 
@@ -55,17 +57,6 @@ struct r600_tiling_info {
        unsigned group_bytes;
 };
 
-struct r600_resource {
-       struct u_resource               b;
-
-       /* Winsys objects. */
-       struct pb_buffer                *buf;
-       struct radeon_winsys_cs_handle  *cs_buf;
-
-       /* Resource state. */
-       unsigned                        domains;
-};
-
 /* R600/R700 STATES */
 struct r600_query {
        union {
@@ -85,7 +76,7 @@ struct r600_query {
        /* The buffer where query results are stored. It's used as a ring,
         * data blocks for current query are stored sequentially from
         * results_start to results_end, with wrapping on the buffer end */
-       struct r600_resource                    *buffer;
+       struct si_resource                      *buffer;
        /* The number of dwords for begin_query or end_query. */
        unsigned                                num_cs_dw;
        /* linked list of queries */
@@ -96,7 +87,7 @@ struct r600_so_target {
        struct pipe_stream_output_target b;
 
        /* The buffer where BUFFER_FILLED_SIZE is stored. */
-       struct r600_resource    *filled_size;
+       struct si_resource      *filled_size;
        unsigned                stride;
        unsigned                so_index;
 };
@@ -113,7 +104,7 @@ struct r600_draw {
        uint32_t                indices_bo_offset;
        unsigned                db_render_override;
        unsigned                db_render_control;
-       struct r600_resource    *indices;
+       struct si_resource      *indices;
 };
 
 struct r600_context;
@@ -133,7 +124,7 @@ void r600_context_queries_suspend(struct r600_context *ctx);
 void r600_context_queries_resume(struct r600_context *ctx);
 void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int operation,
                            int flag_wait);
-void r600_context_emit_fence(struct r600_context *ctx, struct r600_resource *fence,
+void r600_context_emit_fence(struct r600_context *ctx, struct si_resource *fence,
                              unsigned offset, unsigned value);
 
 void r600_context_streamout_begin(struct r600_context *ctx);
index 15bff912e13ca1cb1f3dbfc9c46be6390236e43e..76de9410e403a497d4c83cb890ba12ce0d446a32 100644 (file)
@@ -40,7 +40,7 @@ static void r600_buffer_destroy(struct pipe_screen *screen,
                                struct pipe_resource *buf)
 {
        struct r600_screen *rscreen = (struct r600_screen*)screen;
-       struct r600_resource *rbuffer = r600_resource(buf);
+       struct si_resource *rbuffer = si_resource(buf);
 
        pb_reference(&rbuffer->buf, NULL);
        FREE(rbuffer);
@@ -72,7 +72,7 @@ static struct pipe_transfer *r600_get_transfer(struct pipe_context *ctx,
 static void *r600_buffer_transfer_map(struct pipe_context *pipe,
                                      struct pipe_transfer *transfer)
 {
-       struct r600_resource *rbuffer = r600_resource(transfer->resource);
+       struct si_resource *rbuffer = si_resource(transfer->resource);
        struct r600_context *rctx = (struct r600_context*)pipe;
        uint8_t *data;
 
@@ -115,7 +115,7 @@ static const struct u_resource_vtbl r600_buffer_vtbl =
 };
 
 bool r600_init_resource(struct r600_screen *rscreen,
-                       struct r600_resource *res,
+                       struct si_resource *res,
                        unsigned size, unsigned alignment,
                        unsigned bind, unsigned usage)
 {
@@ -160,11 +160,11 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
                                         const struct pipe_resource *templ)
 {
        struct r600_screen *rscreen = (struct r600_screen*)screen;
-       struct r600_resource *rbuffer;
+       struct si_resource *rbuffer;
        /* XXX We probably want a different alignment for buffers and textures. */
        unsigned alignment = 4096;
 
-       rbuffer = MALLOC_STRUCT(r600_resource);
+       rbuffer = MALLOC_STRUCT(si_resource);
 
        rbuffer->b.b = *templ;
        pipe_reference_init(&rbuffer->b.b.reference, 1);
@@ -185,7 +185,7 @@ void r600_upload_index_buffer(struct r600_context *rctx,
                      ib->user_buffer, &ib->offset, &ib->buffer);
 }
 
-void r600_upload_const_buffer(struct r600_context *rctx, struct r600_resource **rbuffer,
+void r600_upload_const_buffer(struct r600_context *rctx, struct si_resource **rbuffer,
                              const uint8_t *ptr, unsigned size,
                              uint32_t *const_offset)
 {
index 664a6d08c216f64309a4cf5517c0c45809aee3e6..a9be2ad26ea929de36fe012d3a748fa88a3b26fb 100644 (file)
@@ -36,7 +36,7 @@
 void r600_get_backend_mask(struct r600_context *ctx)
 {
        struct radeon_winsys_cs *cs = ctx->cs;
-       struct r600_resource *buffer;
+       struct si_resource *buffer;
        uint32_t *results;
        unsigned num_backends = ctx->screen->info.r600_num_backends;
        unsigned i, mask = 0;
@@ -66,9 +66,9 @@ void r600_get_backend_mask(struct r600_context *ctx)
        /* otherwise backup path for older kernels */
 
        /* create buffer for event data */
-       buffer = (struct r600_resource*)
-               pipe_buffer_create(&ctx->screen->screen, PIPE_BIND_CUSTOM,
-                                  PIPE_USAGE_STAGING, ctx->max_db*16);
+       buffer = si_resource_create_custom(&ctx->screen->screen,
+                                          PIPE_USAGE_STAGING,
+                                          ctx->max_db*16);
        if (!buffer)
                goto err;
 
@@ -102,7 +102,7 @@ void r600_get_backend_mask(struct r600_context *ctx)
                }
        }
 
-       pipe_resource_reference((struct pipe_resource**)&buffer, NULL);
+       si_resource_reference(&buffer, NULL);
 
        if (mask != 0) {
                ctx->backend_mask = mask;
@@ -256,7 +256,7 @@ void r600_context_flush(struct r600_context *ctx, unsigned flags)
        si_pm4_reset_emitted(ctx);
 }
 
-void r600_context_emit_fence(struct r600_context *ctx, struct r600_resource *fence_bo, unsigned offset, unsigned value)
+void r600_context_emit_fence(struct r600_context *ctx, struct si_resource *fence_bo, unsigned offset, unsigned value)
 {
        struct radeon_winsys_cs *cs = ctx->cs;
        uint64_t va;
@@ -594,8 +594,9 @@ struct r600_query *r600_context_query_create(struct r600_context *ctx, unsigned
         * being written by the gpu, hence staging is probably a good
         * usage pattern.
         */
-       query->buffer = (struct r600_resource*)
-               pipe_buffer_create(&ctx->screen->screen, PIPE_BIND_CUSTOM, PIPE_USAGE_STAGING, buffer_size);
+       query->buffer = si_resource_create_custom(&ctx->screen->screen,
+                                                 PIPE_USAGE_STAGING,
+                                                 buffer_size);
        if (!query->buffer) {
                FREE(query);
                return NULL;
@@ -605,7 +606,7 @@ struct r600_query *r600_context_query_create(struct r600_context *ctx, unsigned
 
 void r600_context_query_destroy(struct r600_context *ctx, struct r600_query *query)
 {
-       pipe_resource_reference((struct pipe_resource**)&query->buffer, NULL);
+       si_resource_reference(&query->buffer, NULL);
        free(query);
 }
 
@@ -709,7 +710,7 @@ void r600_context_streamout_begin(struct r600_context *ctx)
 
                        cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
                        cs->buf[cs->cdw++] =
-                               r600_context_bo_reloc(ctx, r600_resource(t[i]->b.buffer),
+                               r600_context_bo_reloc(ctx, si_resource(t[i]->b.buffer),
                                                      RADEON_USAGE_WRITE);
 
                        if (ctx->streamout_append_bitmask & (1 << i)) {
@@ -831,7 +832,7 @@ void r600_context_draw_opaque_count(struct r600_context *ctx, struct r600_so_tar
        cs->buf[cs->cdw++] = t->b.buffer_offset >> 2;
 
        cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
-       cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, (struct r600_resource*)t->b.buffer,
+       cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, (struct si_resource*)t->b.buffer,
                                                             RADEON_USAGE_WRITE);
 
        cs->buf[cs->cdw++] = PKT3(PKT3_WAIT_REG_MEM, 5, 0);
index 01dddb654375727701c4b6978ae70aa755e1bac7..610f8b1708c72998def8cb0f57f8a5acf10f4a61 100644 (file)
@@ -47,7 +47,7 @@ void evergreen_flush_vgt_streamout(struct r600_context *ctx);
 void evergreen_set_streamout_enable(struct r600_context *ctx, unsigned buffer_enable_bit);
 
 
-static INLINE unsigned r600_context_bo_reloc(struct r600_context *ctx, struct r600_resource *rbo,
+static INLINE unsigned r600_context_bo_reloc(struct r600_context *ctx, struct si_resource *rbo,
                                             enum radeon_bo_usage usage)
 {
        assert(usage);
index 314fb239b83abb76cd823c90ed49fdbc4d442e5b..b4427a165de4e1b55420355fcd0010c83369890a 100644 (file)
@@ -39,7 +39,7 @@ struct r600_transfer {
 };
 
 struct r600_resource_texture {
-       struct r600_resource            resource;
+       struct si_resource              resource;
 
        /* If this resource is a depth-stencil buffer on evergreen, this contains
         * the depth part of the format. There is a separate stencil resource
@@ -77,11 +77,6 @@ struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen,
                                                const struct pipe_resource *base,
                                                struct winsys_handle *whandle);
 
-static INLINE struct r600_resource *r600_resource(struct pipe_resource *r)
-{
-       return (struct r600_resource*)r;
-}
-
 int r600_texture_depth_flush(struct pipe_context *ctx, struct pipe_resource *texture, boolean just_create);
 
 /* r600_texture.c texture transfer functions. */
@@ -99,7 +94,7 @@ void r600_texture_transfer_unmap(struct pipe_context *ctx,
 
 struct r600_context;
 
-void r600_upload_const_buffer(struct r600_context *rctx, struct r600_resource **rbuffer,
+void r600_upload_const_buffer(struct r600_context *rctx, struct si_resource **rbuffer,
                              const uint8_t *ptr, unsigned size,
                              uint32_t *const_offset);
 
index 8a62d68ff869d995a980a8b6a71d5d233e4cb854..38ff36df1e96b9839a3f54b494eb13f673caf0bb 100644 (file)
@@ -456,7 +456,7 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
                                        struct winsys_handle *whandle)
 {
        struct r600_resource_texture *rtex = (struct r600_resource_texture*)ptex;
-       struct r600_resource *resource = &rtex->resource;
+       struct si_resource *resource = &rtex->resource;
        struct radeon_surface *surface = &rtex->surface;
        struct r600_screen *rscreen = (struct r600_screen*)screen;
 
@@ -480,13 +480,13 @@ static void r600_texture_destroy(struct pipe_screen *screen,
                                 struct pipe_resource *ptex)
 {
        struct r600_resource_texture *rtex = (struct r600_resource_texture*)ptex;
-       struct r600_resource *resource = &rtex->resource;
+       struct si_resource *resource = &rtex->resource;
 
        if (rtex->flushed_depth_texture)
-               pipe_resource_reference((struct pipe_resource **)&rtex->flushed_depth_texture, NULL);
+               si_resource_reference(&rtex->flushed_depth_texture, NULL);
 
        if (rtex->stencil)
-               pipe_resource_reference((struct pipe_resource **)&rtex->stencil, NULL);
+               si_resource_reference(&rtex->stencil, NULL);
 
        pb_reference(&resource->buf, NULL);
        FREE(rtex);
@@ -515,7 +515,7 @@ r600_texture_create_object(struct pipe_screen *screen,
                           struct radeon_surface *surface)
 {
        struct r600_resource_texture *rtex;
-       struct r600_resource *resource;
+       struct si_resource *resource;
        struct r600_screen *rscreen = (struct r600_screen*)screen;
        int r;
 
@@ -563,7 +563,7 @@ r600_texture_create_object(struct pipe_screen *screen,
 
                base_align = rtex->surface.bo_alignment;
                if (!r600_init_resource(rscreen, resource, rtex->size, base_align, base->bind, base->usage)) {
-                       pipe_resource_reference((struct pipe_resource**)&rtex->stencil, NULL);
+                       si_resource_reference(&rtex->stencil, NULL);
                        FREE(rtex);
                        return NULL;
                }
@@ -877,14 +877,14 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
        char *map;
 
        if (rtransfer->staging_texture) {
-               buf = ((struct r600_resource *)rtransfer->staging_texture)->cs_buf;
+               buf = si_resource(rtransfer->staging_texture)->cs_buf;
        } else {
                struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;
 
                if (rtex->flushed_depth_texture)
-                       buf = ((struct r600_resource *)rtex->flushed_depth_texture)->cs_buf;
+                       buf = si_resource(rtex->flushed_depth_texture)->cs_buf;
                else
-                       buf = ((struct r600_resource *)transfer->resource)->cs_buf;
+                       buf = si_resource(transfer->resource)->cs_buf;
 
                offset = rtransfer->offset +
                        transfer->box.y / util_format_get_blockheight(format) * transfer->stride +
@@ -906,14 +906,14 @@ void r600_texture_transfer_unmap(struct pipe_context *ctx,
        struct radeon_winsys_cs_handle *buf;
 
        if (rtransfer->staging_texture) {
-               buf = ((struct r600_resource *)rtransfer->staging_texture)->cs_buf;
+               buf = si_resource(rtransfer->staging_texture)->cs_buf;
        } else {
                struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;
 
                if (rtex->flushed_depth_texture) {
-                       buf = ((struct r600_resource *)rtex->flushed_depth_texture)->cs_buf;
+                       buf = si_resource(rtex->flushed_depth_texture)->cs_buf;
                } else {
-                       buf = ((struct r600_resource *)transfer->resource)->cs_buf;
+                       buf = si_resource(transfer->resource)->cs_buf;
                }
        }
        rctx->ws->buffer_unmap(buf);
index 874356a8edd5fd524fb23f080f3e4c8d8bcc7b83..3c5eaf7d61c87d2ab22fd7e1d498a6390096b95e 100644 (file)
@@ -61,9 +61,9 @@ static struct r600_fence *r600_create_fence(struct r600_context *rctx)
 
        if (!rscreen->fences.bo) {
                /* Create the shared buffer object */
-               rscreen->fences.bo = (struct r600_resource*)
-                       pipe_buffer_create(&rscreen->screen, PIPE_BIND_CUSTOM,
-                                          PIPE_USAGE_STAGING, 4096);
+               rscreen->fences.bo = si_resource_create_custom(&rscreen->screen,
+                                                              PIPE_USAGE_STAGING,
+                                                              4096);
                if (!rscreen->fences.bo) {
                        R600_ERR("r600: failed to create bo for fence objects\n");
                        goto out;
@@ -119,9 +119,8 @@ static struct r600_fence *r600_create_fence(struct r600_context *rctx)
        r600_context_emit_fence(rctx, rscreen->fences.bo, fence->index, 1);
 
        /* Create a dummy BO so that fence_finish without a timeout can sleep waiting for completion */
-       fence->sleep_bo = (struct r600_resource*)
-                       pipe_buffer_create(&rctx->screen->screen, PIPE_BIND_CUSTOM,
-                                          PIPE_USAGE_STAGING, 1);
+       fence->sleep_bo = si_resource_create_custom(&rctx->screen->screen, PIPE_USAGE_STAGING, 1);
+
        /* Add the fence as a dummy relocation. */
        r600_context_bo_reloc(rctx, fence->sleep_bo, RADEON_USAGE_READWRITE);
 
@@ -495,7 +494,7 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
                }
 
                rscreen->ws->buffer_unmap(rscreen->fences.bo->cs_buf);
-               pipe_resource_reference((struct pipe_resource**)&rscreen->fences.bo, NULL);
+               si_resource_reference(&rscreen->fences.bo, NULL);
        }
        pipe_mutex_destroy(rscreen->fences.mutex);
 
@@ -513,7 +512,7 @@ static void r600_fence_reference(struct pipe_screen *pscreen,
        if (pipe_reference(&(*oldf)->reference, &newf->reference)) {
                struct r600_screen *rscreen = (struct r600_screen *)pscreen;
                pipe_mutex_lock(rscreen->fences.mutex);
-               pipe_resource_reference((struct pipe_resource**)&(*oldf)->sleep_bo, NULL);
+               si_resource_reference(&(*oldf)->sleep_bo, NULL);
                LIST_ADDTAIL(&(*oldf)->head, &rscreen->fences.pool);
                pipe_mutex_unlock(rscreen->fences.mutex);
        }
index f67c33364f29d80c7b874238871f6a203dcf7da5..bde468c64fe964127ee9805751d7912681374a94 100644 (file)
@@ -75,7 +75,7 @@ struct r600_atom_surface_sync {
 };
 
 struct r600_pipe_fences {
-       struct r600_resource            *bo;
+       struct si_resource              *bo;
        unsigned                        *data;
        unsigned                        next_index;
        /* linked list of preallocated blocks */
@@ -120,7 +120,7 @@ struct r600_textures_info {
 struct r600_fence {
        struct pipe_reference           reference;
        unsigned                        index; /* in the shared bo */
-       struct r600_resource            *sleep_bo;
+       struct si_resource            *sleep_bo;
        struct list_head                head;
 };
 
@@ -239,7 +239,7 @@ void r600_flush_depth_textures(struct r600_context *rctx);
 
 /* r600_buffer.c */
 bool r600_init_resource(struct r600_screen *rscreen,
-                       struct r600_resource *res,
+                       struct si_resource *res,
                        unsigned size, unsigned alignment,
                        unsigned bind, unsigned usage);
 struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
@@ -323,7 +323,7 @@ static INLINE unsigned r600_pack_float_12p4(float x)
 static INLINE uint64_t r600_resource_va(struct pipe_screen *screen, struct pipe_resource *resource)
 {
        struct r600_screen *rscreen = (struct r600_screen*)screen;
-       struct r600_resource *rresource = (struct r600_resource*)resource;
+       struct si_resource *rresource = (struct si_resource*)resource;
 
        return rscreen->ws->buffer_get_virtual_address(rresource->cs_buf);
 }
index 488e1ccfd34605afdfbf22bbf69b507328e368a0..0aad78fdcb49f2ac0e250d8b8960837f5b101ed6 100644 (file)
@@ -69,14 +69,13 @@ void si_pm4_set_reg(struct si_pm4_state *state, unsigned reg, uint32_t val)
 }
 
 void si_pm4_add_bo(struct si_pm4_state *state,
-                   struct r600_resource *bo,
+                   struct si_resource *bo,
                    enum radeon_bo_usage usage)
 {
        unsigned idx = state->nbo++;
        assert(idx < SI_PM4_MAX_BO);
 
-       pipe_resource_reference((struct pipe_resource**)&state->bo[idx],
-                               (struct pipe_resource*)bo);
+       si_resource_reference(&state->bo[idx], bo);
        state->bo_usage[idx] = usage;
 }
 
@@ -120,8 +119,7 @@ void si_pm4_free_state(struct r600_context *rctx,
        }
 
        for (int i = 0; i < state->nbo; ++i) {
-               pipe_resource_reference((struct pipe_resource**)&state->bo[idx],
-                                       NULL);
+               si_resource_reference(&state->bo[idx], NULL);
        }
        FREE(state);
 }
index e6148b4c20c2976b15e0e18d47b799509c5170e0..18e51831e8fd427b1a2c27906ae36c35424a3dfb 100644 (file)
@@ -51,13 +51,13 @@ struct si_pm4_state
 
        /* BO's referenced by this state */
        unsigned                nbo;
-       struct r600_resource    *bo[SI_PM4_MAX_BO];
+       struct si_resource      *bo[SI_PM4_MAX_BO];
        enum radeon_bo_usage    bo_usage[SI_PM4_MAX_BO];
 };
 
 void si_pm4_set_reg(struct si_pm4_state *state, unsigned reg, uint32_t val);
 void si_pm4_add_bo(struct si_pm4_state *state,
-                  struct r600_resource *bo,
+                  struct si_resource *bo,
                   enum radeon_bo_usage usage);
 
 void si_pm4_inval_shader_cache(struct si_pm4_state *state);
diff --git a/src/gallium/drivers/radeonsi/radeonsi_resource.h b/src/gallium/drivers/radeonsi/radeonsi_resource.h
new file mode 100644 (file)
index 0000000..9f4b4c1
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2012 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ *      Christian König <christian.koenig@amd.com>
+ */
+
+#ifndef RADEONSI_RESOURCE_H
+#define RADEONSI_RESOURCE_H
+
+#include "../../winsys/radeon/drm/radeon_winsys.h"
+#include "util/u_transfer.h"
+#include "util/u_inlines.h"
+
+struct si_resource {
+       struct u_resource               b;
+
+       /* Winsys objects. */
+       struct pb_buffer                *buf;
+       struct radeon_winsys_cs_handle  *cs_buf;
+
+       /* Resource state. */
+       unsigned                        domains;
+};
+
+static INLINE void
+si_resource_reference(struct si_resource **ptr, struct si_resource *res)
+{
+       pipe_resource_reference((struct pipe_resource **)ptr,
+                               (struct pipe_resource *)res);
+}
+
+static INLINE struct si_resource *
+si_resource(struct pipe_resource *r)
+{
+        return (struct si_resource*)r;
+}
+
+static INLINE struct si_resource *
+si_resource_create_custom(struct pipe_screen *screen,
+                         unsigned usage, unsigned size)
+{
+       assert(size);
+       return si_resource(pipe_buffer_create(screen,
+               PIPE_BIND_CUSTOM, usage, size));
+}
+
+#endif
index cc6003544e33de4f721698ef6ac2b969171f8517..70081370b3ea2dfc8328a18631dbb0dc38bc141a 100644 (file)
@@ -611,8 +611,7 @@ int si_pipe_shader_create(
        if (shader->bo == NULL) {
                uint32_t *ptr;
 
-               shader->bo = (struct r600_resource*)
-                       pipe_buffer_create(ctx->screen, PIPE_BIND_CUSTOM, PIPE_USAGE_IMMUTABLE, inst_byte_count);
+               shader->bo = si_resource_create_custom(ctx->screen, PIPE_USAGE_IMMUTABLE, inst_byte_count);
                if (shader->bo == NULL) {
                        return -ENOMEM;
                }
@@ -634,7 +633,7 @@ int si_pipe_shader_create(
 
 void si_pipe_shader_destroy(struct pipe_context *ctx, struct si_pipe_shader *shader)
 {
-       pipe_resource_reference((struct pipe_resource**)&shader->bo, NULL);
+       si_resource_reference(&shader->bo, NULL);
 
        memset(&shader->shader,0,sizeof(struct si_shader));
 }
index 79665d68845da895c1e8c1a46c1cea7e144e70ed..297d7912defa6b2ec98a730b116c24e7ada4c71a 100644 (file)
@@ -1914,7 +1914,7 @@ static void si_set_ps_sampler_view(struct pipe_context *ctx, unsigned count,
        struct r600_context *rctx = (struct r600_context *)ctx;
        struct si_pipe_sampler_view **resource = (struct si_pipe_sampler_view **)views;
        struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
-       struct r600_resource *bo;
+       struct si_resource *bo;
        int i;
        int has_depth = 0;
        uint64_t va;
@@ -1925,9 +1925,8 @@ static void si_set_ps_sampler_view(struct pipe_context *ctx, unsigned count,
 
        si_pm4_inval_texture_cache(pm4);
 
-       bo = (struct r600_resource*)
-               pipe_buffer_create(ctx->screen, PIPE_BIND_CUSTOM, PIPE_USAGE_IMMUTABLE,
-                                  count * sizeof(resource[0]->state));
+       bo = si_resource_create_custom(ctx->screen, PIPE_USAGE_IMMUTABLE,
+                                      count * sizeof(resource[0]->state));
        ptr = rctx->ws->buffer_map(bo->cs_buf, rctx->cs, PIPE_TRANSFER_WRITE);
 
        for (i = 0; i < count; i++, ptr += sizeof(resource[0]->state)) {
@@ -1976,7 +1975,7 @@ static void si_bind_ps_sampler(struct pipe_context *ctx, unsigned count, void **
        struct r600_context *rctx = (struct r600_context *)ctx;
        struct si_pipe_sampler_state **rstates = (struct si_pipe_sampler_state **)states;
        struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
-       struct r600_resource *bo;
+       struct si_resource *bo;
        uint64_t va;
        char *ptr;
        int i;
@@ -1986,9 +1985,8 @@ static void si_bind_ps_sampler(struct pipe_context *ctx, unsigned count, void **
 
        si_pm4_inval_texture_cache(pm4);
 
-       bo = (struct r600_resource*)
-               pipe_buffer_create(ctx->screen, PIPE_BIND_CUSTOM, PIPE_USAGE_IMMUTABLE,
-                                  count * sizeof(rstates[0]->val));
+       bo = si_resource_create_custom(ctx->screen, PIPE_USAGE_IMMUTABLE,
+                                      count * sizeof(rstates[0]->val));
        ptr = rctx->ws->buffer_map(bo->cs_buf, rctx->cs, PIPE_TRANSFER_WRITE);
 
        for (i = 0; i < count; i++, ptr += sizeof(rstates[0]->val)) {
@@ -2025,7 +2023,7 @@ static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint i
                            struct pipe_constant_buffer *cb)
 {
        struct r600_context *rctx = (struct r600_context *)ctx;
-       struct r600_resource *rbuffer = cb ? r600_resource(cb->buffer) : NULL;
+       struct si_resource *rbuffer = cb ? si_resource(cb->buffer) : NULL;
        struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
        uint64_t va_offset;
        uint32_t offset;
@@ -2068,7 +2066,7 @@ static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint i
        }
 
        if (cb->buffer != &rbuffer->b.b)
-               pipe_resource_reference((struct pipe_resource**)&rbuffer, NULL);
+               si_resource_reference(&rbuffer, NULL);
 }
 
 /*
@@ -2154,8 +2152,7 @@ si_create_so_target(struct pipe_context *ctx,
        t->b.buffer_offset = buffer_offset;
        t->b.buffer_size = buffer_size;
 
-       t->filled_size = (struct r600_resource*)
-               pipe_buffer_create(ctx->screen, PIPE_BIND_CUSTOM, PIPE_USAGE_STATIC, 4);
+       t->filled_size = si_resource_create_custom(ctx->screen, PIPE_USAGE_STATIC, 4);
        ptr = rctx->ws->buffer_map(t->filled_size->cs_buf, rctx->cs, PIPE_TRANSFER_WRITE);
        memset(ptr, 0, t->filled_size->buf->size);
        rctx->ws->buffer_unmap(t->filled_size->cs_buf);
@@ -2168,7 +2165,7 @@ static void si_so_target_destroy(struct pipe_context *ctx,
 {
        struct r600_so_target *t = (struct r600_so_target*)target;
        pipe_resource_reference(&t->b.buffer, NULL);
-       pipe_resource_reference((struct pipe_resource**)&t->filled_size, NULL);
+       si_resource_reference(&t->filled_size, NULL);
        FREE(t);
 }
 
index 771de125e9318bb4daad3add617bef8fa2cb0d77..0eecf2f5eab30ea71e1d15561c4346bb32f7e32d 100644 (file)
@@ -90,7 +90,7 @@ struct si_shader {
 struct si_pipe_shader {
        struct si_shader                shader;
        struct si_pm4_state             *pm4;
-       struct r600_resource            *bo;
+       struct si_resource              *bo;
        struct si_vertex_element        vertex_elements;
        struct tgsi_token               *tokens;
        unsigned                        num_sgprs;
index 1648cce40a91e85b684b98acc576ab57fff8ed06..c49091d845bdb4064d755da8080ab03f217237e0 100644 (file)
@@ -383,7 +383,7 @@ static void si_update_derived_state(struct r600_context *rctx)
 static void si_vertex_buffer_update(struct r600_context *rctx)
 {
        struct pipe_context *ctx = &rctx->context;
-       struct r600_resource *rbuffer, *t_list_buffer;
+       struct si_resource *rbuffer, *t_list_buffer;
        struct pipe_vertex_buffer *vertex_buffer;
        struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state);
        unsigned i, count, offset;
@@ -396,9 +396,8 @@ static void si_vertex_buffer_update(struct r600_context *rctx)
        count = rctx->nr_vertex_buffers;
        assert(count <= 256 / 4);
 
-       t_list_buffer = (struct r600_resource*)
-               pipe_buffer_create(ctx->screen, PIPE_BIND_CUSTOM,
-                                  PIPE_USAGE_IMMUTABLE, 4 * 4 * count);
+       t_list_buffer = si_resource_create_custom(ctx->screen, PIPE_USAGE_IMMUTABLE,
+                                                 4 * 4 * count);
        if (t_list_buffer == NULL) {
                FREE(pm4);
                return;
@@ -416,7 +415,7 @@ static void si_vertex_buffer_update(struct r600_context *rctx)
 
                /* bind vertex buffer once */
                vertex_buffer = &rctx->vertex_buffer[i];
-               rbuffer = (struct r600_resource*)vertex_buffer->buffer;
+               rbuffer = (struct si_resource*)vertex_buffer->buffer;
                offset = 0;
                if (vertex_buffer == NULL || rbuffer == NULL)
                        continue;
@@ -516,7 +515,7 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *dinfo)
                        rdraw.vgt_index_type = V_028A7C_VGT_INDEX_16 |
                                (R600_BIG_ENDIAN ? V_028A7C_VGT_DMA_SWAP_16_BIT : 0);
                }
-               rdraw.indices = (struct r600_resource*)ib.buffer;
+               rdraw.indices = (struct si_resource*)ib.buffer;
                rdraw.indices_bo_offset = ib.offset;
                rdraw.vgt_draw_initiator = V_0287F0_DI_SRC_SEL_DMA;
        } else {