summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2010-10-13 15:22:04 +1000
committerDave Airlie <[email protected]>2010-10-13 15:25:00 +1000
commitd59498b78041b8a7a046ac2c892e7a1896f59ca2 (patch)
tree597aa39285bf7ea69603fff00c372fccf4d98528 /src/gallium/drivers/r600
parent8c107e6ca619dd676e3697749a7d9b81ed19f46a (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.c28
-rw-r--r--src/gallium/drivers/r600/r600_pipe.h11
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;