mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-13 16:08:50 +01:00
[d3d9+util] Always ignore D3DLOCK_DONOTWAIT
We only ever stall when locking a texture that was previously used with GetRenderTargetData or GetFrontBufferData. Games are known to break if locking those textures doesn't succeed.
This commit is contained in:
parent
67614917c3
commit
46cb05ce45
@ -4200,7 +4200,8 @@ namespace dxvk {
|
|||||||
if (unlikely((Flags & (D3DLOCK_DISCARD | D3DLOCK_READONLY)) == (D3DLOCK_DISCARD | D3DLOCK_READONLY)))
|
if (unlikely((Flags & (D3DLOCK_DISCARD | D3DLOCK_READONLY)) == (D3DLOCK_DISCARD | D3DLOCK_READONLY)))
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
if (unlikely(!m_d3d9Options.allowDoNotWait))
|
// We only ever wait for textures that were used with GetRenderTargetData or GetFrontBufferData anyway.
|
||||||
|
// Games like Beyond Good and Evil break if this doesn't succeed.
|
||||||
Flags &= ~D3DLOCK_DONOTWAIT;
|
Flags &= ~D3DLOCK_DONOTWAIT;
|
||||||
|
|
||||||
if (unlikely((Flags & (D3DLOCK_DISCARD | D3DLOCK_NOOVERWRITE)) == (D3DLOCK_DISCARD | D3DLOCK_NOOVERWRITE)))
|
if (unlikely((Flags & (D3DLOCK_DISCARD | D3DLOCK_NOOVERWRITE)) == (D3DLOCK_DISCARD | D3DLOCK_NOOVERWRITE)))
|
||||||
|
@ -63,7 +63,6 @@ namespace dxvk {
|
|||||||
this->forceSamplerTypeSpecConstants = config.getOption<bool> ("d3d9.forceSamplerTypeSpecConstants", false);
|
this->forceSamplerTypeSpecConstants = config.getOption<bool> ("d3d9.forceSamplerTypeSpecConstants", false);
|
||||||
this->forceSwapchainMSAA = config.getOption<int32_t> ("d3d9.forceSwapchainMSAA", -1);
|
this->forceSwapchainMSAA = config.getOption<int32_t> ("d3d9.forceSwapchainMSAA", -1);
|
||||||
this->forceAspectRatio = config.getOption<std::string> ("d3d9.forceAspectRatio", "");
|
this->forceAspectRatio = config.getOption<std::string> ("d3d9.forceAspectRatio", "");
|
||||||
this->allowDoNotWait = config.getOption<bool> ("d3d9.allowDoNotWait", true);
|
|
||||||
this->allowDiscard = config.getOption<bool> ("d3d9.allowDiscard", true);
|
this->allowDiscard = config.getOption<bool> ("d3d9.allowDiscard", true);
|
||||||
this->enumerateByDisplays = config.getOption<bool> ("d3d9.enumerateByDisplays", true);
|
this->enumerateByDisplays = config.getOption<bool> ("d3d9.enumerateByDisplays", true);
|
||||||
this->longMad = config.getOption<bool> ("d3d9.longMad", false);
|
this->longMad = config.getOption<bool> ("d3d9.longMad", false);
|
||||||
|
@ -120,9 +120,6 @@ namespace dxvk {
|
|||||||
/// Forces an MSAA level on the swapchain
|
/// Forces an MSAA level on the swapchain
|
||||||
int32_t forceSwapchainMSAA;
|
int32_t forceSwapchainMSAA;
|
||||||
|
|
||||||
/// Allow D3DLOCK_DONOTWAIT
|
|
||||||
bool allowDoNotWait;
|
|
||||||
|
|
||||||
/// Allow D3DLOCK_DISCARD
|
/// Allow D3DLOCK_DISCARD
|
||||||
bool allowDiscard;
|
bool allowDiscard;
|
||||||
|
|
||||||
|
@ -386,15 +386,6 @@ namespace dxvk {
|
|||||||
{ R"(\\TESV\.exe$)", {{
|
{ R"(\\TESV\.exe$)", {{
|
||||||
{ "d3d9.customVendorId", "1002" },
|
{ "d3d9.customVendorId", "1002" },
|
||||||
}} },
|
}} },
|
||||||
/* RTHDRIBL Demo
|
|
||||||
Uses DONOTWAIT after GetRenderTargetData
|
|
||||||
then goes into an infinite loop if it gets
|
|
||||||
D3DERR_WASSTILLDRAWING.
|
|
||||||
This is a better solution than penalizing
|
|
||||||
other apps that use this properly. */
|
|
||||||
{ R"(\\rthdribl\.exe$)", {{
|
|
||||||
{ "d3d9.allowDoNotWait", "False" },
|
|
||||||
}} },
|
|
||||||
/* Hyperdimension Neptunia U: Action Unleashed */
|
/* Hyperdimension Neptunia U: Action Unleashed */
|
||||||
{ R"(\\Neptunia\.exe$)", {{
|
{ R"(\\Neptunia\.exe$)", {{
|
||||||
{ "d3d9.forceAspectRatio", "16:9" },
|
{ "d3d9.forceAspectRatio", "16:9" },
|
||||||
@ -562,11 +553,6 @@ namespace dxvk {
|
|||||||
{ R"(\\eoa\.exe$)", {{
|
{ R"(\\eoa\.exe$)", {{
|
||||||
{ "d3d9.customVendorId", "10de" },
|
{ "d3d9.customVendorId", "10de" },
|
||||||
}} },
|
}} },
|
||||||
/* Beyond Good And Evil *
|
|
||||||
* Fixes missing sun and light shafts */
|
|
||||||
{ R"(\\BGE\.exe$)", {{
|
|
||||||
{ "d3d9.allowDoNotWait", "False" },
|
|
||||||
}} },
|
|
||||||
/* Supreme Commander & Forged Alliance Forever */
|
/* Supreme Commander & Forged Alliance Forever */
|
||||||
{ R"(\\(SupremeCommander|ForgedAlliance)\.exe$)", {{
|
{ R"(\\(SupremeCommander|ForgedAlliance)\.exe$)", {{
|
||||||
{ "d3d9.floatEmulation", "Strict" },
|
{ "d3d9.floatEmulation", "Strict" },
|
||||||
@ -580,11 +566,6 @@ namespace dxvk {
|
|||||||
{ R"(\\bionic_commando\.exe$)", {{
|
{ R"(\\bionic_commando\.exe$)", {{
|
||||||
{ "d3d9.maxFrameRate", "60" },
|
{ "d3d9.maxFrameRate", "60" },
|
||||||
}} },
|
}} },
|
||||||
/* Port Royale 3 *
|
|
||||||
* Fixes infinite loading screens */
|
|
||||||
{ R"(\\PortRoyale3\.exe$)", {{
|
|
||||||
{ "d3d9.allowDoNotWait", "False" },
|
|
||||||
}} },
|
|
||||||
/* Need For Speed 3 modern patch */
|
/* Need For Speed 3 modern patch */
|
||||||
{ R"(\\nfs3\.exe$)", {{
|
{ R"(\\nfs3\.exe$)", {{
|
||||||
{ "d3d9.enableDialogMode", "True" },
|
{ "d3d9.enableDialogMode", "True" },
|
||||||
|
Loading…
Reference in New Issue
Block a user