mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[d3d11] Fallout 4: Force Flush on GetData calls
This commit is contained in:
parent
a90c2843a7
commit
26b319b29b
@ -203,9 +203,9 @@ namespace dxvk {
|
|||||||
void STDMETHODCALLTYPE D3D11DeviceContext::End(ID3D11Asynchronous *pAsync) {
|
void STDMETHODCALLTYPE D3D11DeviceContext::End(ID3D11Asynchronous *pAsync) {
|
||||||
if (pAsync == nullptr)
|
if (pAsync == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Com<ID3D11Query> query;
|
Com<ID3D11Query> query;
|
||||||
|
|
||||||
if (SUCCEEDED(pAsync->QueryInterface(__uuidof(ID3D11Query), reinterpret_cast<void**>(&query)))) {
|
if (SUCCEEDED(pAsync->QueryInterface(__uuidof(ID3D11Query), reinterpret_cast<void**>(&query)))) {
|
||||||
Com<D3D11Query> queryPtr = static_cast<D3D11Query*>(query.ptr());
|
Com<D3D11Query> queryPtr = static_cast<D3D11Query*>(query.ptr());
|
||||||
|
|
||||||
@ -242,6 +242,12 @@ namespace dxvk {
|
|||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallout 4 never actually calls this function without
|
||||||
|
// D3D11_ASYNC_GETDATA_DONOTFLUSH set, which may cause
|
||||||
|
// the game to freeze in certain situations.
|
||||||
|
if (m_parent->TestOption(D3D11Option::DisableGetDataFlagDoNotFlush))
|
||||||
|
GetDataFlags &= ~D3D11_ASYNC_GETDATA_DONOTFLUSH;
|
||||||
|
|
||||||
// Flush in order to make sure the query commands get dispatched
|
// Flush in order to make sure the query commands get dispatched
|
||||||
if ((GetDataFlags & D3D11_ASYNC_GETDATA_DONOTFLUSH) == 0)
|
if ((GetDataFlags & D3D11_ASYNC_GETDATA_DONOTFLUSH) == 0)
|
||||||
Flush();
|
Flush();
|
||||||
|
@ -6,6 +6,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
const static std::unordered_map<std::string, D3D11OptionSet> g_d3d11AppOptions = {{
|
const static std::unordered_map<std::string, D3D11OptionSet> g_d3d11AppOptions = {{
|
||||||
{ "Dishonored2.exe", D3D11OptionSet(D3D11Option::AllowMapFlagNoWait) },
|
{ "Dishonored2.exe", D3D11OptionSet(D3D11Option::AllowMapFlagNoWait) },
|
||||||
|
{ "Fallout4.exe", D3D11OptionSet(D3D11Option::DisableGetDataFlagDoNotFlush) },
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,6 +14,15 @@ namespace dxvk {
|
|||||||
* operation succeeds when that flag is set.
|
* operation succeeds when that flag is set.
|
||||||
*/
|
*/
|
||||||
AllowMapFlagNoWait = 0,
|
AllowMapFlagNoWait = 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Ignore D3D11_ASYNC_GETDATA_DONOTFLUSH
|
||||||
|
*
|
||||||
|
* This can cause significant slowdowns, but some games
|
||||||
|
* expect the implementation to flush the context even
|
||||||
|
* when passing the \c DONOTFLUSH flag.
|
||||||
|
*/
|
||||||
|
DisableGetDataFlagDoNotFlush = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
using D3D11OptionSet = Flags<D3D11Option>;
|
using D3D11OptionSet = Flags<D3D11Option>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user