diff options
author | Dave Airlie <[email protected]> | 2010-10-13 15:22:04 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2010-10-13 15:25:00 +1000 |
commit | d59498b78041b8a7a046ac2c892e7a1896f59ca2 (patch) | |
tree | 597aa39285bf7ea69603fff00c372fccf4d98528 /src/gallium/drivers/r600 | |
parent | 8c107e6ca619dd676e3697749a7d9b81ed19f46a (diff) |
r600g: reduce size of context structure.
this thing will be in the cache a lot, so having massive big struct
arrays inside it won't be helping anyone.
Diffstat (limited to 'src/gallium/drivers/r600')
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.c | 28 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 11 |
2 files changed, 35 insertions, 4 deletions
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 52fe3c777b3..69bfb2a1a4e 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -85,6 +85,10 @@ static void r600_destroy_context(struct pipe_context *context) u_upload_destroy(rctx->upload_vb); u_upload_destroy(rctx->upload_ib); + FREE(rctx->ps_resource); + FREE(rctx->vs_resource); + FREE(rctx->vs_const); + FREE(rctx->ps_const); FREE(rctx); } @@ -171,6 +175,30 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void return NULL; } + rctx->vs_const = CALLOC(R600_CONSTANT_ARRAY_SIZE, sizeof(struct r600_pipe_state)); + if (!rctx->vs_const) { + FREE(rctx); + return NULL; + } + + rctx->ps_const = CALLOC(R600_CONSTANT_ARRAY_SIZE, sizeof(struct r600_pipe_state)); + if (!rctx->vs_const) { + FREE(rctx); + return NULL; + } + + rctx->vs_resource = CALLOC(R600_RESOURCE_ARRAY_SIZE, sizeof(struct r600_pipe_state)); + if (!rctx->vs_resource) { + FREE(rctx); + return NULL; + } + + rctx->ps_resource = CALLOC(R600_RESOURCE_ARRAY_SIZE, sizeof(struct r600_pipe_state)); + if (!rctx->ps_resource) { + FREE(rctx); + return NULL; + } + class = r600_get_family_class(rctx->radeon); if (class == R600 || class == R700) rctx->custom_dsa_flush = r600_create_db_flush_dsa(rctx); diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 34a59646d51..6ce1f969522 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -100,6 +100,9 @@ struct r600_textures_info { unsigned n_samplers; }; +#define R600_CONSTANT_ARRAY_SIZE 256 +#define R600_RESOURCE_ARRAY_SIZE 160 + struct r600_pipe_context { struct pipe_context context; struct blitter_context *blitter; @@ -122,10 +125,10 @@ struct r600_pipe_context { struct pipe_clip_state clip; unsigned vs_nconst; unsigned ps_nconst; - struct r600_pipe_state vs_const[256]; - struct r600_pipe_state ps_const[256]; - struct r600_pipe_state vs_resource[160]; - struct r600_pipe_state ps_resource[160]; + struct r600_pipe_state *vs_const; + struct r600_pipe_state *ps_const; + struct r600_pipe_state *vs_resource; + struct r600_pipe_state *ps_resource; struct r600_pipe_state config; struct r600_pipe_shader *ps_shader; struct r600_pipe_shader *vs_shader; |