diff options
author | Antoniou Athanasios | 2019-08-04 07:18:50 -0400 |
---|---|---|
committer | Filippos Karapetis | 2019-08-04 14:18:50 +0300 |
commit | e9623740f0529fd06b3bdecb0cf657a74a4a6032 (patch) | |
tree | 905b8e9879615e88ffabaef2798bc38cd65ba0d6 | |
parent | 913229f9dbce3dc4b3670ffe5d7f7c4405d1a820 (diff) | |
download | scummvm-rg350-e9623740f0529fd06b3bdecb0cf657a74a4a6032.tar.gz scummvm-rg350-e9623740f0529fd06b3bdecb0cf657a74a4a6032.tar.bz2 scummvm-rg350-e9623740f0529fd06b3bdecb0cf657a74a4a6032.zip |
WIN32: Add a default application manifest
This fixes an OpenGL renderer issue for builds with MSYS2/Mingw64 or MSYS2/Mingw32
The issue pertains to MSYS2 adding a default manifest file (default-manifest.o) to the executable
The bug is for PC systems with GPU drivers that were not properly supported for Windows 10
systems, like Intel HD Graphics series 1st and 2nd generations. In those systems, launching a
game in ScummVM (built with MSYS2/Mingw) with the OpenGL renderer would cause the game
screen to be a white blank image, and various warnings would be output to the console, eg.
"WARNING: GL ERROR: GL_INVALID_ENUM on glTexSubImage2D(0x0DE1, 0, 0, area.top, src.w, area.height(), _glFormat, _glType, src.gere.cpp:167)!"
This was due to MSYS2/Mingw builds trying to load the (poorly supported) GPU driver while advertising support for Windows 10 in their
embedded default Manifest file. Hence, the GPU driver DLL (eg ig4icd64.dll) would be unloaded, causing the bug.
More information is available in the following links:
https://github.com/pal1000/save-legacy-intel-graphics
https://github.com/LWJGL/lwjgl/issues/119
https://github.com/msys2/MSYS2-packages/issues/454
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69880
Credits to sluicebox for the VS GenerateManifest flag
-rw-r--r-- | devtools/create_project/msbuild.cpp | 1 | ||||
-rw-r--r-- | devtools/create_project/visualstudio.cpp | 2 | ||||
-rw-r--r-- | dists/scummvm.rc | 7 | ||||
-rw-r--r-- | dists/win32/scummvm.exe.manifest | 9 |
4 files changed, 16 insertions, 3 deletions
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp index a2cde964e2..fe73509b73 100644 --- a/devtools/create_project/msbuild.cpp +++ b/devtools/create_project/msbuild.cpp @@ -398,6 +398,7 @@ void MSBuildProvider::createBuildProp(const BuildSetup &setup, bool isRelease, b "\t<PropertyGroup>\n" "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_" << configuration << outputBitness << "</_PropertySheetDisplayName>\n" "\t\t<LinkIncremental>" << (isRelease ? "false" : "true") << "</LinkIncremental>\n" + "\t\t<GenerateManifest>false</GenerateManifest>\n" "\t</PropertyGroup>\n" "\t<ItemDefinitionGroup>\n" "\t\t<ClCompile>\n"; diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp index 44bbf6ba91..ba0d103d40 100644 --- a/devtools/create_project/visualstudio.cpp +++ b/devtools/create_project/visualstudio.cpp @@ -289,6 +289,7 @@ void VisualStudioProvider::createBuildProp(const BuildSetup &setup, bool isRelea "\t<Tool\n" "\t\tName=\"VCLinkerTool\"\n" "\t\tLinkIncremental=\"1\"\n" + "\t\tGenerateManifest=\"false\"\n" "\t\tIgnoreDefaultLibraryNames=\"\"\n" "\t\tSetChecksum=\"true\"\n"; } else { @@ -305,6 +306,7 @@ void VisualStudioProvider::createBuildProp(const BuildSetup &setup, bool isRelea "\t<Tool\n" "\t\tName=\"VCLinkerTool\"\n" "\t\tLinkIncremental=\"2\"\n" + "\t\tGenerateManifest=\"false\"\n" "\t\tGenerateDebugInformation=\"true\"\n" "\t\tIgnoreDefaultLibraryNames=\"libcmt.lib\"\n"; } diff --git a/dists/scummvm.rc b/dists/scummvm.rc index c7846fe0eb..d7b1b3becc 100644 --- a/dists/scummvm.rc +++ b/dists/scummvm.rc @@ -12,6 +12,7 @@ #define IDI_COUNT 1002 #define ID_GDF_XML __GDF_XML +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "dists/win32/scummvm.exe.manifest" IDI_ICON ICON DISCARDABLE "icons/scummvm.ico" IDI_COUNT ICON DISCARDABLE "icons/count.ico" @@ -31,13 +32,13 @@ fonts.dat FILE "dists/engine-data/fonts.dat" #endif #if PLUGIN_ENABLED_STATIC(ACCESS) -access.dat FILE "dists/engine-data/access.dat" +access.dat FILE "dists/engine-data/access.dat" #endif #if PLUGIN_ENABLED_STATIC(CRYO) cryo.dat FILE "dists/engine-data/cryo.dat" #endif #if PLUGIN_ENABLED_STATIC(CRYOMNI3D) -cryomni3d.dat FILE "dists/engine-data/cryomni3d.dat" +cryomni3d.dat FILE "dists/engine-data/cryomni3d.dat" #endif #if PLUGIN_ENABLED_STATIC(DRASCULA) drascula.dat FILE "dists/engine-data/drascula.dat" @@ -82,7 +83,7 @@ toon.dat FILE "dists/engine-data/toon.dat" wintermute.zip FILE "dists/engine-data/wintermute.zip" #endif #if PLUGIN_ENABLED_STATIC(XEEN) -xeen.ccs FILE "dists/engine-data/xeen.ccs" +xeen.ccs FILE "dists/engine-data/xeen.ccs" #endif #if PLUGIN_ENABLED_STATIC(AGI) pred.dic FILE "dists/pred.dic" diff --git a/dists/win32/scummvm.exe.manifest b/dists/win32/scummvm.exe.manifest new file mode 100644 index 0000000000..76d99c7c93 --- /dev/null +++ b/dists/win32/scummvm.exe.manifest @@ -0,0 +1,9 @@ +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="asInvoker"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> |