[Mesa-dev] [PATCH] glsl: use -O0 optimization for builtin_functions.cpp with MinGW

Jose Fonseca jfonseca at vmware.com
Fri Mar 31 14:27:58 UTC 2017


On 31/03/17 04:23, Brian Paul wrote:
> Some versions of MinGW-w64 such as 5.3.1 and 6.2.0 produce bad code
> with -O2 or -O3 causing a random driver crash when running programs
> that use GLSL.  Most Mesa demos in the glsl/ directory trigger the
> bug, but not the fragcoord.c test.
>
> Use a #pragma to force -O1 for this file for later MinGW versions.
> Luckily, this is basically one-time setup code.  I suspect the bug
> is related to the sheer size of this file.
>
> This should let us move to newer versions of MinGW-w64 for Mesa.
> ---
>  src/compiler/glsl/builtin_functions.cpp | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
>
> diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp
> index e30509a..e32b18c 100644
> --- a/src/compiler/glsl/builtin_functions.cpp
> +++ b/src/compiler/glsl/builtin_functions.cpp
> @@ -53,6 +53,26 @@
>   *    name and parameters.
>   */
>
> +
> +/**
> + * Unfortunately, some versions of MinGW produce bad code if this file
> + * is compiled with -O2 or -O3.  The resulting driver will crash in random
> + * places if the app uses GLSL.
> + * The work-around is to disable optimizations for just this file.  Luckily,
> + * this code is basically just executed once.
> + *
> + * MinGW 4.6.3 (in Ubuntu 13.10) does not have this bug.
> + * MinGW 5.3.1 (in Ubuntu 16.04) definitely has this bug.
> + * MinGW 6.2.0 (in Ubuntu 16.10) definitely has this bug.
> + * MinGW x.y.z - don't know.  Assume versions after 4.6.x are buggy
> + */
> +
> +#if defined(__MINGW32__) && ((__GNUC__ * 100) + __GNUC_MINOR >= 407)
> +#warning "disabling optimizations for this file to work around compiler bug"
> +#pragma GCC optimize("O0")
> +#endif
> +
> +
>  #include <stdarg.h>
>  #include <stdio.h>
>  #include "main/core.h" /* for struct gl_shader */
>

Look good to me.  Great find.


Reviewed-by: Jose Fonseca <jfonseca at vmware.com>


More information about the mesa-dev mailing list