diff options
Diffstat (limited to 'src/mesa/swrast/s_texcombine.c')
-rw-r--r-- | src/mesa/swrast/s_texcombine.c | 20 |
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) { |