From ad0920fe1ed2e4d65ec77225add0de3bd9c8884a Mon Sep 17 00:00:00 2001 From: WinterSnowfall Date: Sun, 26 Jan 2025 18:41:08 +0200 Subject: [PATCH] [d3d9] Relax SM2 minor version checks on shader creation --- src/d3d9/d3d9_device.cpp | 6 ++++-- src/d3d9/d3d9_options.cpp | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 415afebf4..e52710311 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -3322,7 +3322,8 @@ namespace dxvk { if (unlikely(majorVersion > shaderModelVS || (majorVersion == 1 && minorVersion > 1) - || (majorVersion > 1 && minorVersion != 0))) { + // Skip checking the SM2 minor version, as it has a 2_x mode apparently + || (majorVersion == 3 && minorVersion != 0))) { Logger::err(str::format("D3D9DeviceEx::CreateVertexShader: Unsupported VS version ", majorVersion, ".", minorVersion)); return D3DERR_INVALIDCALL; } @@ -3696,7 +3697,8 @@ namespace dxvk { if (unlikely(majorVersion > m_d3d9Options.shaderModel || (majorVersion == 1 && minorVersion > 4) - || (majorVersion > 1 && minorVersion != 0))) { + // Skip checking the SM2 minor version, as it has a 2_x mode apparently + || (majorVersion == 3 && minorVersion != 0))) { Logger::err(str::format("D3D9DeviceEx::CreatePixelShader: Unsupported PS version ", majorVersion, ".", minorVersion)); return D3DERR_INVALIDCALL; } diff --git a/src/d3d9/d3d9_options.cpp b/src/d3d9/d3d9_options.cpp index 1b66699c7..b128abfd0 100644 --- a/src/d3d9/d3d9_options.cpp +++ b/src/d3d9/d3d9_options.cpp @@ -79,6 +79,8 @@ namespace dxvk { // D3D8 options this->drefScaling = config.getOption ("d3d8.scaleDref", 0); + // Clamp the shader model value between 0 and 3 + this->shaderModel = dxvk::clamp(this->shaderModel, 0u, 3u); // Clamp LOD bias so that people don't abuse this in unintended ways this->samplerLodBias = dxvk::fclamp(this->samplerLodBias, -2.0f, 1.0f);