summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2011-10-03 17:48:53 -0600
committerBrian Paul <[email protected]>2011-10-03 17:51:06 -0600
commit9119269ca14ed42b51c7d8e2e662500311b29fa3 (patch)
tree99ef1034114e187189d080f95b0fe45899e6d1e1
parent6a04fa9cd4982f056588e11263345e1561197261 (diff)
swrast: fix delayed texel buffer allocation regression
Commit 617cdcd4c7b1cffb584c829c35bdf9c9bf04627b delayed the texel buffer allocation until texture_combine() is called. But the texel buffer is needed sooner in _swrast_texture_span() at line 649. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=41433
-rw-r--r--src/mesa/swrast/s_texcombine.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/mesa/swrast/s_texcombine.c b/src/mesa/swrast/s_texcombine.c
index de157726b14..c67c356c1e0 100644
--- a/src/mesa/swrast/s_texcombine.c
+++ b/src/mesa/swrast/s_texcombine.c
@@ -93,26 +93,6 @@ 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) {
@@ -610,6 +590,26 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
float4_array primary_rgba;
GLuint unit;
+ 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;
+ }
+ }
+
primary_rgba = (float4_array) malloc(span->end * 4 * sizeof(GLfloat));
if (!primary_rgba) {