r600g: Use a RAT buffer as the backing bo for the compute memory pool
authorTom Stellard <thomas.stellard@amd.com>
Thu, 13 Sep 2012 17:03:41 +0000 (17:03 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 1 Oct 2012 15:37:16 +0000 (15:37 +0000)
src/gallium/drivers/r600/compute_memory_pool.c
src/gallium/drivers/r600/evergreen_compute_internal.c

index 5e25a1da35d329bc8c1c1e2f04d1c0d423af026e..04f0be17c56aad4c46f10c5df995c06437ef69e8 100644 (file)
 #include "evergreen_compute_internal.h"
 #include <inttypes.h>
 
-static struct r600_texture * create_pool_texture(struct r600_screen * screen,
-               unsigned size_in_dw)
-{
-
-       struct pipe_resource templ;
-       struct r600_texture * tex;
-
-       if (size_in_dw == 0) {
-               return NULL;
-       }
-       memset(&templ, 0, sizeof(templ));
-       templ.target = PIPE_TEXTURE_1D;
-       templ.format = PIPE_FORMAT_R32_UINT;
-       templ.bind = PIPE_BIND_CUSTOM;
-       templ.usage = PIPE_USAGE_IMMUTABLE;
-       templ.flags = 0;
-       templ.width0 = size_in_dw;
-       templ.height0 = 1;
-       templ.depth0 = 1;
-       templ.array_size = 1;
-
-       tex = (struct r600_texture *)r600_texture_create(
-                                               &screen->screen, &templ);
-       /* XXX: Propagate this error */
-       assert(tex && "Out of memory");
-       tex->is_rat = 1;
-       return tex;
-}
-
 /**
  * Creates a new pool
  */
@@ -99,8 +70,8 @@ static void compute_memory_pool_init(struct compute_memory_pool * pool,
         */
        pool->next_id = 1;
        pool->size_in_dw = initial_size_in_dw;
-       pool->bo = (struct r600_resource*)create_pool_texture(pool->screen,
-                                                       pool->size_in_dw);
+       pool->bo = (struct r600_resource*)r600_compute_buffer_alloc_vram(pool->screen,
+                                                       pool->size_in_dw * 4);
 }
 
 /**
@@ -216,9 +187,9 @@ void compute_memory_grow_pool(struct compute_memory_pool* pool,
                pool->screen->screen.resource_destroy(
                        (struct pipe_screen *)pool->screen,
                        (struct pipe_resource *)pool->bo);
-               pool->bo = (struct r600_resource*)create_pool_texture(
+               pool->bo = (struct r600_resource*)r600_compute_buffer_alloc_vram(
                                                        pool->screen,
-                                                       pool->size_in_dw);
+                                                       pool->size_in_dw * 4);
                compute_memory_shadow(pool, pipe, 0);
        }
 }
index d4e9ed6eb0505d618b6ebe8de72bb0cd0ca04390..496d099609a7fbe2ba5117d8ac25caecc6157de0 100644 (file)
@@ -295,7 +295,8 @@ void evergreen_set_rat(
 
        surf = (struct r600_surface*)pipe->ctx->framebuffer.state.cbufs[id];
 
-       evergreen_init_color_surface(rctx, surf);
+       struct radeon_surface *rsurf = &((struct r600_texture*)surf->base.texture)->surface;
+       evergreen_init_color_surface_rat(rctx, surf);
 }
 
 void evergreen_set_gds(