mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 00:10:10 +01:00
swrast: fix delayed texel buffer allocation regression for OpenMP
Commit 9119269ca1 moved the texel
buffer allocation to _swrast_texture_span(), however, when compiled
with OpenMP support this code already runs multi-threaded so a
critical section is required to prevent multiple allocations and
rendering errors.
Cc: "10.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
aa4e2243a2
commit
2a0fb946e1
1 changed files with 12 additions and 0 deletions
|
|
@ -602,6 +602,14 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
|
||||||
if (!swrast->TexelBuffer) {
|
if (!swrast->TexelBuffer) {
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
const GLint maxThreads = omp_get_max_threads();
|
const GLint maxThreads = omp_get_max_threads();
|
||||||
|
|
||||||
|
/* TexelBuffer memory allocation needs to be done in a critical section
|
||||||
|
* as this code runs in a parallel loop.
|
||||||
|
* When entering the section, first check if TexelBuffer has been
|
||||||
|
* initialized already by another thread while this thread was waiting.
|
||||||
|
*/
|
||||||
|
#pragma omp critical
|
||||||
|
if (!swrast->TexelBuffer) {
|
||||||
#else
|
#else
|
||||||
const GLint maxThreads = 1;
|
const GLint maxThreads = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -613,6 +621,10 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
|
||||||
swrast->TexelBuffer =
|
swrast->TexelBuffer =
|
||||||
malloc(ctx->Const.FragmentProgram.MaxTextureImageUnits * maxThreads *
|
malloc(ctx->Const.FragmentProgram.MaxTextureImageUnits * maxThreads *
|
||||||
SWRAST_MAX_WIDTH * 4 * sizeof(GLfloat));
|
SWRAST_MAX_WIDTH * 4 * sizeof(GLfloat));
|
||||||
|
#ifdef _OPENMP
|
||||||
|
} /* critical section */
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!swrast->TexelBuffer) {
|
if (!swrast->TexelBuffer) {
|
||||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "texture_combine");
|
_mesa_error(ctx, GL_OUT_OF_MEMORY, "texture_combine");
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue