mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 22:29:15 +01:00
[d3d11] Introduce d3d11.enableContextLock option
This commit is contained in:
parent
86bdda70b4
commit
559fa50f54
@ -236,6 +236,14 @@
|
|||||||
# d3d11.cachedDynamicResources = ""
|
# d3d11.cachedDynamicResources = ""
|
||||||
|
|
||||||
|
|
||||||
|
# Force-enables the D3D11 context lock via the ID3D10Multithread
|
||||||
|
# interface. This may be useful to debug race conditions.
|
||||||
|
#
|
||||||
|
# Supported values: True, False
|
||||||
|
|
||||||
|
# d3d11.enableContextLock = False
|
||||||
|
|
||||||
|
|
||||||
# Sets number of pipeline compiler threads.
|
# Sets number of pipeline compiler threads.
|
||||||
#
|
#
|
||||||
# If the graphics pipeline library feature is enabled, the given
|
# If the graphics pipeline library feature is enabled, the given
|
||||||
|
@ -6,9 +6,12 @@ namespace dxvk {
|
|||||||
|
|
||||||
D3D10Multithread::D3D10Multithread(
|
D3D10Multithread::D3D10Multithread(
|
||||||
IUnknown* pParent,
|
IUnknown* pParent,
|
||||||
BOOL Protected)
|
BOOL Protected,
|
||||||
|
BOOL Force)
|
||||||
: m_parent (pParent),
|
: m_parent (pParent),
|
||||||
m_protected (Protected) {
|
m_protected (Protected || Force),
|
||||||
|
m_enabled (Protected),
|
||||||
|
m_forced (Force) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,12 +52,18 @@ namespace dxvk {
|
|||||||
|
|
||||||
BOOL STDMETHODCALLTYPE D3D10Multithread::SetMultithreadProtected(
|
BOOL STDMETHODCALLTYPE D3D10Multithread::SetMultithreadProtected(
|
||||||
BOOL bMTProtect) {
|
BOOL bMTProtect) {
|
||||||
return std::exchange(m_protected, bMTProtect);
|
BOOL result = m_enabled;
|
||||||
|
m_enabled = bMTProtect;
|
||||||
|
|
||||||
|
if (!m_forced)
|
||||||
|
m_protected = m_enabled;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOL STDMETHODCALLTYPE D3D10Multithread::GetMultithreadProtected() {
|
BOOL STDMETHODCALLTYPE D3D10Multithread::GetMultithreadProtected() {
|
||||||
return m_protected;
|
return m_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
D3D10Multithread(
|
D3D10Multithread(
|
||||||
IUnknown* pParent,
|
IUnknown* pParent,
|
||||||
BOOL Protected);
|
BOOL Protected,
|
||||||
|
BOOL Force);
|
||||||
|
|
||||||
~D3D10Multithread();
|
~D3D10Multithread();
|
||||||
|
|
||||||
@ -95,6 +96,8 @@ namespace dxvk {
|
|||||||
|
|
||||||
IUnknown* m_parent;
|
IUnknown* m_parent;
|
||||||
BOOL m_protected;
|
BOOL m_protected;
|
||||||
|
BOOL m_enabled;
|
||||||
|
BOOL m_forced;
|
||||||
|
|
||||||
sync::RecursiveSpinlock m_mutex;
|
sync::RecursiveSpinlock m_mutex;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ namespace dxvk {
|
|||||||
: D3D11CommonContext<D3D11ImmediateContext>(pParent, Device, 0, DxvkCsChunkFlag::SingleUse),
|
: D3D11CommonContext<D3D11ImmediateContext>(pParent, Device, 0, DxvkCsChunkFlag::SingleUse),
|
||||||
m_csThread(Device, Device->createContext(DxvkContextType::Primary)),
|
m_csThread(Device, Device->createContext(DxvkContextType::Primary)),
|
||||||
m_maxImplicitDiscardSize(pParent->GetOptions()->maxImplicitDiscardSize),
|
m_maxImplicitDiscardSize(pParent->GetOptions()->maxImplicitDiscardSize),
|
||||||
m_multithread(this, false),
|
m_multithread(this, false, pParent->GetOptions()->enableContextLock),
|
||||||
m_videoContext(this, Device) {
|
m_videoContext(this, Device) {
|
||||||
EmitCs([
|
EmitCs([
|
||||||
cDevice = m_device,
|
cDevice = m_device,
|
||||||
|
@ -25,6 +25,7 @@ namespace dxvk {
|
|||||||
this->invariantPosition = config.getOption<bool>("d3d11.invariantPosition", true);
|
this->invariantPosition = config.getOption<bool>("d3d11.invariantPosition", true);
|
||||||
this->floatControls = config.getOption<bool>("d3d11.floatControls", true);
|
this->floatControls = config.getOption<bool>("d3d11.floatControls", true);
|
||||||
this->disableMsaa = config.getOption<bool>("d3d11.disableMsaa", false);
|
this->disableMsaa = config.getOption<bool>("d3d11.disableMsaa", false);
|
||||||
|
this->enableContextLock = config.getOption<bool>("d3d11.enableContextLock", false);
|
||||||
this->deferSurfaceCreation = config.getOption<bool>("dxgi.deferSurfaceCreation", false);
|
this->deferSurfaceCreation = config.getOption<bool>("dxgi.deferSurfaceCreation", false);
|
||||||
this->numBackBuffers = config.getOption<int32_t>("dxgi.numBackBuffers", 0);
|
this->numBackBuffers = config.getOption<int32_t>("dxgi.numBackBuffers", 0);
|
||||||
this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0);
|
this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0);
|
||||||
|
@ -111,6 +111,11 @@ namespace dxvk {
|
|||||||
/// in cached system memory. Enabled automatically when recording
|
/// in cached system memory. Enabled automatically when recording
|
||||||
/// an api trace.
|
/// an api trace.
|
||||||
uint32_t cachedDynamicResources;
|
uint32_t cachedDynamicResources;
|
||||||
|
|
||||||
|
/// Always lock immediate context on every API call. May be
|
||||||
|
/// useful for debugging purposes or when applications have
|
||||||
|
/// race conditions.
|
||||||
|
bool enableContextLock;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user