glsl: use -O1 optimization for builtin_functions.cpp with MinGW
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. Reviewed-by: Jose Fonseca <jfonseca@vmware.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
15bb0511d6
commit
2936f5c37e
|
@ -53,6 +53,26 @@
|
||||||
* name and parameters.
|
* 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("O1")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "main/core.h" /* for struct gl_shader */
|
#include "main/core.h" /* for struct gl_shader */
|
||||||
|
|
Loading…
Reference in New Issue