diff options
author | Brian Paul <[email protected]> | 2011-10-03 17:48:53 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2011-10-03 17:51:06 -0600 |
commit | 9119269ca14ed42b51c7d8e2e662500311b29fa3 (patch) | |
tree | 99ef1034114e187189d080f95b0fe45899e6d1e1 /src/mesa/swrast/s_texcombine.c | |
parent | 6a04fa9cd4982f056588e11263345e1561197261 (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
Diffstat (limited to 'src/mesa/swrast/s_texcombine.c')
-rw-r--r-- | src/mesa/swrast/s_texcombine.c | 40 |
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) { |