Mesa (master): r600g: reduce size of context structure.
Dave Airlie
airlied at kemper.freedesktop.org
Wed Oct 13 05:26:10 UTC 2010
Module: Mesa
Branch: master
Commit: d59498b78041b8a7a046ac2c892e7a1896f59ca2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d59498b78041b8a7a046ac2c892e7a1896f59ca2
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Oct 13 15:22:04 2010 +1000
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.
---
src/gallium/drivers/r600/r600_pipe.c | 28 ++++++++++++++++++++++++++++
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 52fe3c7..69bfb2a 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 34a5964..6ce1f96 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;
More information about the mesa-commit
mailing list