summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast/s_texcombine.c
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2011-09-22 12:52:43 -0700
committerEric Anholt <[email protected]>2011-10-01 22:16:06 -0700
commit617cdcd4c7b1cffb584c829c35bdf9c9bf04627b (patch)
treea264de5ac5a54eaf2c3c65c15c7e225ec5339a0f /src/mesa/swrast/s_texcombine.c
parentf7f678331d5e95d2266fe6b3ea1cfa47d6421065 (diff)
mesa: Delay s_texcombine.c memory allocation until it's used.
Generally we're using fragment programs in all our drivers, so wasting 4MB for code that's never called is pretty lame. Reduces i965 memory allocation for a short shader program from 21,932,128B to 17,737,816B.
Diffstat (limited to 'src/mesa/swrast/s_texcombine.c')
-rw-r--r--src/mesa/swrast/s_texcombine.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mesa/swrast/s_texcombine.c b/src/mesa/swrast/s_texcombine.c
index 6944edf0a0e..de157726b14 100644
--- a/src/mesa/swrast/s_texcombine.c
+++ b/src/mesa/swrast/s_texcombine.c
@@ -93,6 +93,26 @@ texture_combine( struct gl_context *ctx, GLuint unit, GLuint n,
float4_array ccolor[4], rgba;
GLuint i, term;
+ if (!swrast->TexelBuffer) {
+#ifdef _OPENMP
+ const GLint maxThreads = omp_get_max_threads();
+#else
+ const GLint maxThreads = 1;
+#endif
+
+ /* TexelBuffer is also global and normally shared by all SWspan
+ * instances; when running with multiple threads, create one per
+ * thread.
+ */
+ swrast->TexelBuffer =
+ (GLfloat *) MALLOC(ctx->Const.MaxTextureImageUnits * maxThreads *
+ MAX_WIDTH * 4 * sizeof(GLfloat));
+ if (!swrast->TexelBuffer) {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture_combine");
+ return;
+ }
+ }
+
/* alloc temp pixel buffers */
rgba = (float4_array) malloc(4 * n * sizeof(GLfloat));
if (!rgba) {