r600g: Re-enable growing of the compute memory pool
authorTom Stellard <thomas.stellard@amd.com>
Thu, 13 Sep 2012 17:09:03 +0000 (17:09 +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/r600_pipe.c

index 04d24f6cbd33354c4f71ef3dd8734e6b8c66f3ab..19fbe0cddc4a80c1de63140d6fc40c3d090b5e3b 100644 (file)
@@ -64,10 +64,7 @@ static void compute_memory_pool_init(struct compute_memory_pool * pool,
        COMPUTE_DBG("* compute_memory_pool_init() initial_size_in_dw = %ld\n",
                initial_size_in_dw);
 
-       /* XXX: pool->shadow is used when the buffer needs to be resized, but
-        * resizing does not work at the moment.
-        * pool->shadow = (uint32_t*)CALLOC(4, pool->size_in_dw);
-        */
+       pool->shadow = (uint32_t*)CALLOC(initial_size_in_dw, 4);
        pool->next_id = 1;
        pool->size_in_dw = initial_size_in_dw;
        pool->bo = (struct r600_resource*)r600_compute_buffer_alloc_vram(pool->screen,
@@ -169,19 +166,9 @@ void compute_memory_grow_pool(struct compute_memory_pool* pool,
 
        assert(new_size_in_dw >= pool->size_in_dw);
 
-       assert(!pool->bo && "Growing the global memory pool is not yet "
-               "supported.  You will see this message if you are trying to"
-               "use more than 64 kb of memory");
-
        if (!pool->bo) {
                compute_memory_pool_init(pool, MAX2(new_size_in_dw, 1024 * 16));
        } else {
-               /* XXX: Growing memory pools does not work at the moment.  I think
-                * it is because we are using fragment shaders to copy data to
-                * the new texture and some of the compute registers are being
-                * included in the 3D command stream. */
-               fprintf(stderr, "Warning: growing the global memory pool to"
-                               "more than 64 kb is not yet supported\n");
                new_size_in_dw += 1024 - (new_size_in_dw % 1024);
 
                COMPUTE_DBG("  Aligned size = %d\n", new_size_in_dw);
index f4d3dc1dee3504366b5f91bffbe5a258969a55ff..70e82062a308b8144508516725e7e9e97104833d 100644 (file)
@@ -645,10 +645,9 @@ static int r600_get_compute_param(struct pipe_screen *screen,
        case PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE:
                if (ret) {
                        uint64_t * max_global_size = ret;
-                       /* XXX: This is 64kb for now until we get the
-                        * compute memory pool working correctly.
-                        */
-                       *max_global_size = 1024 * 16 * 4;
+                       /* XXX: This is what the proprietary driver reports, we
+                        * may want to use a different value. */
+                       *max_global_size = 201326592;
                }
                return sizeof(uint64_t);