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