mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-07 16:54:14 +01:00
[dxvk] Introduce dxvk.tearFree option
And replace the old frontend-specific options.
This commit is contained in:
parent
85d52ccb88
commit
ab00591297
@ -122,8 +122,7 @@
|
|||||||
#
|
#
|
||||||
# Supported values: Auto, True, False
|
# Supported values: Auto, True, False
|
||||||
|
|
||||||
# dxgi.tearFree = Auto
|
# dxvk.tearFree = Auto
|
||||||
# d3d9.tearFree = Auto
|
|
||||||
|
|
||||||
|
|
||||||
# Assume single-use mode for command lists created on deferred contexts.
|
# Assume single-use mode for command lists created on deferred contexts.
|
||||||
|
@ -31,7 +31,6 @@ namespace dxvk {
|
|||||||
this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0);
|
this->maxFrameLatency = config.getOption<int32_t>("dxgi.maxFrameLatency", 0);
|
||||||
this->maxFrameRate = config.getOption<int32_t>("dxgi.maxFrameRate", 0);
|
this->maxFrameRate = config.getOption<int32_t>("dxgi.maxFrameRate", 0);
|
||||||
this->syncInterval = config.getOption<int32_t>("dxgi.syncInterval", -1);
|
this->syncInterval = config.getOption<int32_t>("dxgi.syncInterval", -1);
|
||||||
this->tearFree = config.getOption<Tristate>("dxgi.tearFree", Tristate::Auto);
|
|
||||||
|
|
||||||
// Clamp LOD bias so that people don't abuse this in unintended ways
|
// Clamp LOD bias so that people don't abuse this in unintended ways
|
||||||
this->samplerLodBias = dxvk::fclamp(this->samplerLodBias, -2.0f, 1.0f);
|
this->samplerLodBias = dxvk::fclamp(this->samplerLodBias, -2.0f, 1.0f);
|
||||||
|
@ -77,10 +77,6 @@ namespace dxvk {
|
|||||||
/// passed to IDXGISwapChain::Present.
|
/// passed to IDXGISwapChain::Present.
|
||||||
int32_t syncInterval;
|
int32_t syncInterval;
|
||||||
|
|
||||||
/// Tear-free mode if vsync is disabled
|
|
||||||
/// Tearing mode if vsync is enabled
|
|
||||||
Tristate tearFree;
|
|
||||||
|
|
||||||
/// Override maximum frame latency if the app specifies
|
/// Override maximum frame latency if the app specifies
|
||||||
/// a higher value. May help with frame timing issues.
|
/// a higher value. May help with frame timing issues.
|
||||||
int32_t maxFrameLatency;
|
int32_t maxFrameLatency;
|
||||||
|
@ -67,7 +67,6 @@ namespace dxvk {
|
|||||||
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);
|
||||||
this->tearFree = config.getOption<Tristate> ("d3d9.tearFree", Tristate::Auto);
|
|
||||||
this->apitraceMode = config.getOption<bool> ("d3d9.apitraceMode", false);
|
this->apitraceMode = config.getOption<bool> ("d3d9.apitraceMode", false);
|
||||||
this->deviceLocalConstantBuffers = config.getOption<bool> ("d3d9.deviceLocalConstantBuffers", false);
|
this->deviceLocalConstantBuffers = config.getOption<bool> ("d3d9.deviceLocalConstantBuffers", false);
|
||||||
this->allowDirectBufferMapping = config.getOption<bool> ("d3d9.allowDirectBufferMapping", true);
|
this->allowDirectBufferMapping = config.getOption<bool> ("d3d9.allowDirectBufferMapping", true);
|
||||||
|
@ -127,10 +127,6 @@ namespace dxvk {
|
|||||||
/// don't match entirely to the regular vertex shader in this way.
|
/// don't match entirely to the regular vertex shader in this way.
|
||||||
bool longMad;
|
bool longMad;
|
||||||
|
|
||||||
/// Tear-free mode if vsync is disabled
|
|
||||||
/// Tearing mode if vsync is enabled
|
|
||||||
Tristate tearFree;
|
|
||||||
|
|
||||||
/// Apitrace mode: Maps all buffers in cached memory.
|
/// Apitrace mode: Maps all buffers in cached memory.
|
||||||
bool apitraceMode;
|
bool apitraceMode;
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ namespace dxvk {
|
|||||||
useRawSsbo = config.getOption<Tristate>("dxvk.useRawSsbo", Tristate::Auto);
|
useRawSsbo = config.getOption<Tristate>("dxvk.useRawSsbo", Tristate::Auto);
|
||||||
maxChunkSize = config.getOption<int32_t> ("dxvk.maxChunkSize", 0);
|
maxChunkSize = config.getOption<int32_t> ("dxvk.maxChunkSize", 0);
|
||||||
hud = config.getOption<std::string>("dxvk.hud", "");
|
hud = config.getOption<std::string>("dxvk.hud", "");
|
||||||
|
tearFree = config.getOption<Tristate>("dxvk.tearFree", Tristate::Auto);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,10 @@ namespace dxvk {
|
|||||||
|
|
||||||
/// HUD elements
|
/// HUD elements
|
||||||
std::string hud;
|
std::string hud;
|
||||||
|
|
||||||
|
/// Forces swap chain into MAILBOX (if true)
|
||||||
|
/// or FIFO_RELAXED (if false) present mode
|
||||||
|
Tristate tearFree;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -518,9 +518,15 @@ namespace dxvk {
|
|||||||
std::array<VkPresentModeKHR, 2> desired = { };
|
std::array<VkPresentModeKHR, 2> desired = { };
|
||||||
uint32_t numDesired = 0;
|
uint32_t numDesired = 0;
|
||||||
|
|
||||||
|
Tristate tearFree = m_device->config().tearFree;
|
||||||
|
|
||||||
if (!syncInterval) {
|
if (!syncInterval) {
|
||||||
|
if (tearFree != Tristate::True)
|
||||||
desired[numDesired++] = VK_PRESENT_MODE_IMMEDIATE_KHR;
|
desired[numDesired++] = VK_PRESENT_MODE_IMMEDIATE_KHR;
|
||||||
desired[numDesired++] = VK_PRESENT_MODE_MAILBOX_KHR;
|
desired[numDesired++] = VK_PRESENT_MODE_MAILBOX_KHR;
|
||||||
|
} else {
|
||||||
|
if (tearFree == Tristate::False)
|
||||||
|
desired[numDesired++] = VK_PRESENT_MODE_FIFO_RELAXED_KHR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Just pick the first desired and supported mode
|
// Just pick the first desired and supported mode
|
||||||
|
Loading…
x
Reference in New Issue
Block a user