diff --git a/DDrawCompat/Config/Config.cpp b/DDrawCompat/Config/Config.cpp index 1c7d0fd..2cc302b 100644 --- a/DDrawCompat/Config/Config.cpp +++ b/DDrawCompat/Config/Config.cpp @@ -10,6 +10,7 @@ namespace Config Settings::DisplayFilter displayFilter; Settings::DisplayRefreshRate displayRefreshRate; Settings::DisplayResolution displayResolution; + Settings::ForceD3D9On12 forceD3D9On12; Settings::RenderColorDepth renderColorDepth; Settings::ResolutionScale resolutionScale; Settings::SpriteDetection spriteDetection; diff --git a/DDrawCompat/Config/Config.h b/DDrawCompat/Config/Config.h index 2495d2c..e130e2d 100644 --- a/DDrawCompat/Config/Config.h +++ b/DDrawCompat/Config/Config.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -30,6 +31,7 @@ namespace Config extern Settings::DisplayFilter displayFilter; extern Settings::DisplayRefreshRate displayRefreshRate; extern Settings::DisplayResolution displayResolution; + extern Settings::ForceD3D9On12 forceD3D9On12; extern Settings::RenderColorDepth renderColorDepth; extern Settings::ResolutionScale resolutionScale; extern Settings::SpriteDetection spriteDetection; diff --git a/DDrawCompat/Config/Settings/ForceD3D9On12.h b/DDrawCompat/Config/Settings/ForceD3D9On12.h new file mode 100644 index 0000000..bc85415 --- /dev/null +++ b/DDrawCompat/Config/Settings/ForceD3D9On12.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace Config +{ + namespace Settings + { + class ForceD3D9On12 : public MappedSetting + { + public: + ForceD3D9On12() + : MappedSetting("ForceD3D9On12", "off", { {"off", false}, {"on", true} }) + { + } + }; + } +} diff --git a/DDrawCompat/D3dDdi/KernelModeThunks.cpp b/DDrawCompat/D3dDdi/KernelModeThunks.cpp index 310552a..e1927b8 100644 --- a/DDrawCompat/D3dDdi/KernelModeThunks.cpp +++ b/DDrawCompat/D3dDdi/KernelModeThunks.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -206,6 +207,14 @@ namespace { switch (pData->Type) { + case KMTQAITYPE_UMDRIVERNAME: + if (Config::forceD3D9On12.get() && + KMTUMDVERSION_DX9 == static_cast(pData->pPrivateDriverData)->Version) + { + return STATUS_INVALID_PARAMETER; + } + break; + case KMTQAITYPE_GETSEGMENTSIZE: { auto info = static_cast(pData->pPrivateDriverData); @@ -222,8 +231,8 @@ namespace info->DedicatedVideoMemorySize = min(info->DedicatedVideoMemorySize, maxMem); info->SharedSystemMemorySize = min(info->SharedSystemMemorySize, maxMem); + break; } - break; } } return LOG_RESULT(result); diff --git a/DDrawCompat/DDrawCompat.vcxproj b/DDrawCompat/DDrawCompat.vcxproj index 802775b..1d3e118 100644 --- a/DDrawCompat/DDrawCompat.vcxproj +++ b/DDrawCompat/DDrawCompat.vcxproj @@ -225,6 +225,7 @@ + diff --git a/DDrawCompat/DDrawCompat.vcxproj.filters b/DDrawCompat/DDrawCompat.vcxproj.filters index 1bed1a4..9262924 100644 --- a/DDrawCompat/DDrawCompat.vcxproj.filters +++ b/DDrawCompat/DDrawCompat.vcxproj.filters @@ -537,6 +537,9 @@ Header Files\Config\Settings + + Header Files\Config\Settings +