protonscr

Splinter Cell 2: Pandora Tomorrow (retail version) crashes when starting a mission

dxvkclosed bugd3d8
doitsujin/dxvk#5680 · opened 2026-06-04 by danielfikko · updated 2026-06-05 · 2 comments · github
1 matching comments, n / p to jump
Ddanielfikko 2026-06-04 github

The initial menu loads correctly. The issue occurs when you start any mission — that is, when you actually begin playing the game. Showing this error:

0148:err:msvcrt:_wassert (L"!status && \"vkCreateGraphicsPipelines\"",L"../wine/dlls/winevulkan/loader_thunks.c",3594)

This doesn't happen with DXVK version 2.7.1 and WineD3D. This happens in both winex11 and winewayland. I tried doing a git bisect, but gave up because there are 323 commits between version 2.7.1 and the master branch, plus I got tired of constantly running git bisect skip due to build issues, like this error:

$ meson compile -C build-win32
[107/205] Compiling C++ object src/dxvk/libdxvk.a.p/dxvk_shader_ir.cpp.obj
FAILED: [code=1] src/dxvk/libdxvk.a.p/dxvk_shader_ir.cpp.obj
i686-w64-mingw32-g++ -Isrc/dxvk/libdxvk.a.p -Isrc/dxvk -I../src/dxvk -I../include -I../include/vulkan/include -I../include/spirv/include -Isubprojects/dxbc-spirv -I../subprojects/dxbc-spirv -I. -fdiagnostics-color=always -D_GLIBCXX_ASSERTIONS=1 -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c++17 -O3 -msse -msse2 -msse3 -mfpmath=sse -Wimplicit-fallthrough -Wno-missing-field-initializers -Wno-unused-parameter -Wno-misleading-indentation -Wno-cast-function-type -Wno-unused-const-variable -Wno-missing-braces -DNOMINMAX -D_WIN32_WINNT=0xa00 -mpreferred-stack-boundary=2 -DDXVK_WSI_WIN32 -pthread -MD -MQ src/dxvk/libdxvk.a.p/dxvk_shader_ir.cpp.obj -MF src/dxvk/libdxvk.a.p/dxvk_shader_ir.cpp.obj.d -o src/dxvk/libdxvk.a.p/dxvk_shader_ir.cpp.obj -c ../src/dxvk/dxvk_shader_ir.cpp
../src/dxvk/dxvk_shader_ir.cpp: In member function ‘std::optional<spv::BuiltIn> dxvk::DxvkIrLowerBindingModelPass::convertBuiltIn(dxbc_spv::ir::BuiltIn) const’:
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eTessFactorLimit’ not handled in switch [-Wswitch]
 1340 |       switch (builtIn) {
      |              ^
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘ePointCoord’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyAlphaTest’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyFog’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyClipPlanes’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyPointArgs’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacySamplerState’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyTextureStage’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyConstBool’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyConstInt’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp:1340:14: warning: enumeration value ‘eLegacyConstFloat’ not handled in switch [-Wswitch]
../src/dxvk/dxvk_shader_ir.cpp: In member function ‘virtual dxvk::SpirvCodeBuffer dxvk::DxvkIrShader::getCode(const dxvk::DxvkShaderBindingMap*, const dxvk::DxvkShaderLinkage*)’:
../src/dxvk/dxvk_shader_ir.cpp:1533:17: error: no matching function for call to ‘dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation)’
 1533 |           io.add(dxbc_spv::ir::IoLocation(dxbc_spv::ir::IoEntryType::ePerVertex, 0u, 0xfu));
      |           ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • there is 1 candidate
In file included from ../src/dxvk/dxvk_shader_ir.h:11,
                 from ../src/dxvk/dxvk_shader_ir.cpp:7:
    • candidate 1: ‘void dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation, dxbc_spv::ir::IoSemantic)’
      ../subprojects/dxbc-spirv/ir/passes/ir_pass_lower_io.h:160:8:
        160 |   void add(IoLocation entry, IoSemantic semantic);
            |        ^~~
      • candidate expects 2 arguments, 1 provided
../src/dxvk/dxvk_shader_ir.cpp:1534:17: error: no matching function for call to ‘dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation)’
 1534 |           io.add(dxbc_spv::ir::IoLocation(dxbc_spv::ir::IoEntryType::ePerVertex, 1u, 0xfu));
      |           ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • there is 1 candidate
    • candidate 1: ‘void dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation, dxbc_spv::ir::IoSemantic)’
      ../subprojects/dxbc-spirv/ir/passes/ir_pass_lower_io.h:160:8:
        160 |   void add(IoLocation entry, IoSemantic semantic);
            |        ^~~
      • candidate expects 2 arguments, 1 provided
../src/dxvk/dxvk_shader_ir.cpp: In static member function ‘static dxbc_spv::ir::IoMap dxvk::DxvkIrShader::convertIoMap(const dxvk::DxvkShaderIo&, VkShaderStageFlagBits)’:
../src/dxvk/dxvk_shader_ir.cpp:1865:18: error: no matching function for call to ‘dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation)’
 1865 |           map.add(dxbc_spv::ir::IoLocation(*builtIn, uint8_t((1u << var.componentCount) - 1u)));
      |           ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • there is 1 candidate
    • candidate 1: ‘void dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation, dxbc_spv::ir::IoSemantic)’
      ../subprojects/dxbc-spirv/ir/passes/ir_pass_lower_io.h:160:8:
        160 |   void add(IoLocation entry, IoSemantic semantic);
            |        ^~~
      • candidate expects 2 arguments, 1 provided
../src/dxvk/dxvk_shader_ir.cpp:1871:16: error: no matching function for call to ‘dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation)’
 1871 |         map.add(dxbc_spv::ir::IoLocation(type, var.location,
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1872 |           ((1u << var.componentCount) - 1u) << var.componentIndex));
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • there is 1 candidate
    • candidate 1: ‘void dxbc_spv::ir::IoMap::add(dxbc_spv::ir::IoLocation, dxbc_spv::ir::IoSemantic)’
      ../subprojects/dxbc-spirv/ir/passes/ir_pass_lower_io.h:160:8:
        160 |   void add(IoLocation entry, IoSemantic semantic);
            |        ^~~
      • candidate expects 2 arguments, 1 provided
[112/205] Compiling C++ object src/dxvk/libdxvk.a.p/dxvk_sparse.cpp.obj
ninja: build stopped: subcommand failed.

Software information

Tom Clancy's Splinter Cell 2: Pandora Tomorrow (retail version)

System information

  • GPU: AMD Radeon RX 5500 XT (RADV NAVI14)
  • Driver: Mesa 26.1.1-arch1.2
  • Wine version: wine-11.10
  • DXVK version: v2.7.1-647-g6eddf20c

Log files

Here is the log with DXVK_LOG_LEVEL=debug and VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation:

SplinterCell2-output-log-1.txt

...and the log with DXVK_LOG_LEVEL=debug, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation and WINEDEBUG=+vulkan (in case it’s helpful):

SplinterCell2-output-log-2.txt

WWinterSnowfall 2026-06-04 github

Can reproduce, here's a trace that can also be used to that end: https://drive.proton.me/urls/D4Y93K7YB8#eUzyNdlnaGIR

The issue goes away if I use d3d9.useDxbcSpirv = False, so it is a regression with the new shader compiler.

Ddanielfikko 2026-06-05 github

It was indeed fixed by that commit. Thank you!

Launch options