r600g: reduce size of r600 context structure to !insane
authorDave Airlie <airlied@redhat.com>
Fri, 3 Sep 2010 03:53:39 +0000 (13:53 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 3 Sep 2010 03:53:39 +0000 (13:53 +1000)
Its now about 7.8k, and might actually fit in a cache.

src/gallium/drivers/r600/r600_context.c
src/gallium/drivers/r600/r600_context.h

index 7a0e5b4049f135de1b120d914cfe3b22ea596fb1..9525f15197f649ae6d78c21ba821eed09eb9607c 100644 (file)
@@ -53,6 +53,11 @@ static void r600_destroy_context(struct pipe_context *context)
        rctx->stencil_ref = r600_context_state_decref(rctx->stencil_ref);
        rctx->viewport = r600_context_state_decref(rctx->viewport);
        rctx->framebuffer = r600_context_state_decref(rctx->framebuffer);
+
+       free(rctx->ps_constant);
+       free(rctx->vs_constant);
+       free(rctx->vs_resource);
+
        radeon_ctx_fini(&rctx->ctx);
        FREE(rctx);
 }
@@ -354,6 +359,24 @@ struct pipe_context *r600_create_context(struct pipe_screen *screen, void *priv)
 
        r600_init_config(rctx);
 
+       rctx->vs_constant = (struct radeon_state *)calloc(R600_MAX_CONSTANT, sizeof(struct radeon_state));
+       if (!rctx->vs_constant) {
+               FREE(rctx);
+               return NULL;
+       }
+
+       rctx->ps_constant = (struct radeon_state *)calloc(R600_MAX_CONSTANT, sizeof(struct radeon_state));
+       if (!rctx->ps_constant) {
+               FREE(rctx);
+               return NULL;
+       }
+
+       rctx->vs_resource = (struct radeon_state *)calloc(R600_MAX_RESOURCE, sizeof(struct radeon_state));
+       if (!rctx->vs_resource) {
+               FREE(rctx);
+               return NULL;
+       }                                                  
+
        radeon_ctx_init(&rctx->ctx, rscreen->rw);
        radeon_draw_init(&rctx->draw, rscreen->rw);
        return &rctx->context;
index 6294f7ad47bb5258a707a32cec3e34a6ad01a95b..1c32ced7dc3c4a279c3b33c7a9b73700a5bccac1 100644 (file)
@@ -121,6 +121,9 @@ struct r600_context_hw_states {
        struct radeon_state     cb_cntl;
 };
 
+#define R600_MAX_CONSTANT 256 /* magic */
+#define R600_MAX_RESOURCE 160 /* magic */
+
 struct r600_context {
        struct pipe_context             context;
        struct r600_screen              *screen;
@@ -130,10 +133,10 @@ struct r600_context {
        struct radeon_draw              draw;
        struct radeon_state             config;
        /* FIXME get rid of those vs_resource,vs/ps_constant */
-       struct radeon_state             vs_resource[160];
+       struct radeon_state             *vs_resource;
        unsigned                        vs_nresource;
-       struct radeon_state             vs_constant[256];
-       struct radeon_state             ps_constant[256];
+       struct radeon_state             *vs_constant;
+       struct radeon_state             *ps_constant;
        /* hw states */
        struct r600_context_hw_states   hw_states;
        /* pipe states */