Pārlūkot izejas kodu

swrast: fix delayed texel buffer allocation regression

Commit 617cdcd4c7 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
tags/mesa-8.0-rc1
Brian Paul pirms 14 gadiem
vecāks
revīzija
9119269ca1
1 mainītis faili ar 20 papildinājumiem un 20 dzēšanām
  1. 20
    20
      src/mesa/swrast/s_texcombine.c

+ 20
- 20
src/mesa/swrast/s_texcombine.c Parādīt failu

@@ -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) {

Notiek ielāde…
Atcelt
Saglabāt