mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-23 02:47:04 +02:00
[video_core] Clean up the code and fix some inconsistences (#3015)
This cleans up the code and fixes some inconsistencies in the EDS settings. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3015 Co-authored-by: MaranBr <maranbr@outlook.com> Co-committed-by: MaranBr <maranbr@outlook.com>
This commit is contained in:
parent
87c4f658ce
commit
d89df63a28
3 changed files with 18 additions and 43 deletions
|
|
@ -414,13 +414,8 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
|
||||||
.has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1,
|
.has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1,
|
||||||
.has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2,
|
.has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2,
|
||||||
.has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2,
|
.has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2,
|
||||||
.has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported(),
|
.has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported() && dynamic_state > 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
LOG_INFO(Render_Vulkan, "DynamicState1: {}", dynamic_features.has_extended_dynamic_state);
|
|
||||||
LOG_INFO(Render_Vulkan, "DynamicState2: {}", dynamic_features.has_extended_dynamic_state_2);
|
|
||||||
LOG_INFO(Render_Vulkan, "DynamicState3: {}", dynamic_features.has_extended_dynamic_state_3_enables);
|
|
||||||
LOG_INFO(Render_Vulkan, "DynamicVertexInput: {}", dynamic_features.has_dynamic_vertex_input);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PipelineCache::~PipelineCache() {
|
PipelineCache::~PipelineCache() {
|
||||||
|
|
|
||||||
|
|
@ -956,38 +956,24 @@ void RasterizerVulkan::UpdateDynamicStates() {
|
||||||
|
|
||||||
const u8 dynamic_state = Settings::values.dyna_state.GetValue();
|
const u8 dynamic_state = Settings::values.dyna_state.GetValue();
|
||||||
|
|
||||||
auto features = DynamicFeatures{
|
if (device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0) {
|
||||||
.has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported() && dynamic_state > 0,
|
|
||||||
.has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1,
|
|
||||||
.has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1,
|
|
||||||
.has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2,
|
|
||||||
.has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2,
|
|
||||||
.has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported(),
|
|
||||||
};
|
|
||||||
|
|
||||||
if (features.has_extended_dynamic_state) {
|
|
||||||
UpdateCullMode(regs);
|
UpdateCullMode(regs);
|
||||||
UpdateDepthCompareOp(regs);
|
UpdateDepthCompareOp(regs);
|
||||||
UpdateFrontFace(regs);
|
UpdateFrontFace(regs);
|
||||||
UpdateStencilOp(regs);
|
UpdateStencilOp(regs);
|
||||||
|
|
||||||
if (state_tracker.TouchStateEnable()) {
|
if (state_tracker.TouchStateEnable()) {
|
||||||
UpdateDepthBoundsTestEnable(regs);
|
UpdateDepthBoundsTestEnable(regs);
|
||||||
UpdateDepthTestEnable(regs);
|
UpdateDepthTestEnable(regs);
|
||||||
UpdateDepthWriteEnable(regs);
|
UpdateDepthWriteEnable(regs);
|
||||||
UpdateStencilTestEnable(regs);
|
UpdateStencilTestEnable(regs);
|
||||||
|
if (device.IsExtExtendedDynamicState2Supported() && dynamic_state > 1) {
|
||||||
if (features.has_extended_dynamic_state_2) {
|
|
||||||
UpdatePrimitiveRestartEnable(regs);
|
UpdatePrimitiveRestartEnable(regs);
|
||||||
UpdateRasterizerDiscardEnable(regs);
|
UpdateRasterizerDiscardEnable(regs);
|
||||||
UpdateDepthBiasEnable(regs);
|
UpdateDepthBiasEnable(regs);
|
||||||
}
|
}
|
||||||
|
if (device.IsExtExtendedDynamicState3EnablesSupported() && dynamic_state > 2) {
|
||||||
if (features.has_extended_dynamic_state_3_enables) {
|
|
||||||
using namespace Tegra::Engines;
|
using namespace Tegra::Engines;
|
||||||
|
if (device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_OPEN_SOURCE || device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_PROPRIETARY) {
|
||||||
if (device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_OPEN_SOURCE ||
|
|
||||||
device.GetDriverID() == VkDriverIdKHR::VK_DRIVER_ID_AMD_PROPRIETARY) {
|
|
||||||
struct In {
|
struct In {
|
||||||
const Maxwell3D::Regs::VertexAttribute::Type d;
|
const Maxwell3D::Regs::VertexAttribute::Type d;
|
||||||
In(Maxwell3D::Regs::VertexAttribute::Type n) : d(n) {}
|
In(Maxwell3D::Regs::VertexAttribute::Type n) : d(n) {}
|
||||||
|
|
@ -995,33 +981,28 @@ void RasterizerVulkan::UpdateDynamicStates() {
|
||||||
return n.type == d;
|
return n.type == d;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
auto has_float = std::any_of(regs.vertex_attrib_format.begin(), regs.vertex_attrib_format.end(), In(Maxwell3D::Regs::VertexAttribute::Type::Float));
|
||||||
auto has_float = std::any_of(regs.vertex_attrib_format.begin(),
|
if (regs.logic_op.enable) {
|
||||||
regs.vertex_attrib_format.end(),
|
|
||||||
In(Maxwell3D::Regs::VertexAttribute::Type::Float));
|
|
||||||
|
|
||||||
if (regs.logic_op.enable)
|
|
||||||
regs.logic_op.enable = static_cast<u32>(!has_float);
|
regs.logic_op.enable = static_cast<u32>(!has_float);
|
||||||
|
}
|
||||||
UpdateLogicOpEnable(regs);
|
UpdateLogicOpEnable(regs);
|
||||||
} else {
|
} else {
|
||||||
UpdateLogicOpEnable(regs);
|
UpdateLogicOpEnable(regs);
|
||||||
}
|
}
|
||||||
UpdateDepthClampEnable(regs);
|
UpdateDepthClampEnable(regs);
|
||||||
|
UpdateLineStippleEnable(regs);
|
||||||
|
UpdateConservativeRasterizationMode(regs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (features.has_extended_dynamic_state_2_extra) {
|
if (device.IsExtExtendedDynamicState2ExtrasSupported() && dynamic_state > 1) {
|
||||||
UpdateLogicOp(regs);
|
UpdateLogicOp(regs);
|
||||||
}
|
}
|
||||||
if (features.has_extended_dynamic_state_3_enables) {
|
if (device.IsExtExtendedDynamicState3BlendingSupported() && dynamic_state > 2) {
|
||||||
UpdateBlending(regs);
|
UpdateBlending(regs);
|
||||||
UpdateLineStippleEnable(regs);
|
|
||||||
UpdateConservativeRasterizationMode(regs);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (features.has_dynamic_vertex_input) {
|
if (device.IsExtVertexInputDynamicStateSupported() && dynamic_state > 2) {
|
||||||
if (auto* gp = pipeline_cache.CurrentGraphicsPipeline();
|
if (auto* gp = pipeline_cache.CurrentGraphicsPipeline(); gp && gp->HasDynamicVertexInput()) {
|
||||||
gp && gp->HasDynamicVertexInput()) {
|
|
||||||
UpdateVertexInput(regs);
|
UpdateVertexInput(regs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -745,21 +745,20 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
|
||||||
|
|
||||||
if (Settings::values.dyna_state.GetValue() == 0) {
|
if (Settings::values.dyna_state.GetValue() == 0) {
|
||||||
must_emulate_scaled_formats = true;
|
must_emulate_scaled_formats = true;
|
||||||
LOG_INFO(Render_Vulkan, "Dynamic state is disabled (dyna_state = 0), forcing scaled format emulation ON");
|
LOG_INFO(Render_Vulkan, "Extended dynamic state is fully disabled, scaled format emulation is ON");
|
||||||
|
|
||||||
// Disable dynamic state 1-3 and all extensions
|
|
||||||
RemoveExtensionFeature(extensions.custom_border_color, features.custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME);
|
RemoveExtensionFeature(extensions.custom_border_color, features.custom_border_color, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME);
|
||||||
RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
||||||
RemoveExtensionFeature(extensions.extended_dynamic_state2, features.extended_dynamic_state2, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
|
RemoveExtensionFeature(extensions.extended_dynamic_state2, features.extended_dynamic_state2, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
|
||||||
RemoveExtensionFeature(extensions.vertex_input_dynamic_state, features.vertex_input_dynamic_state, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
|
|
||||||
RemoveExtensionFeature(extensions.extended_dynamic_state3, features.extended_dynamic_state3, VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME);
|
RemoveExtensionFeature(extensions.extended_dynamic_state3, features.extended_dynamic_state3, VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME);
|
||||||
|
RemoveExtensionFeature(extensions.vertex_input_dynamic_state, features.vertex_input_dynamic_state, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
|
||||||
dynamic_state3_blending = false;
|
dynamic_state3_blending = false;
|
||||||
dynamic_state3_enables = false;
|
dynamic_state3_enables = false;
|
||||||
|
|
||||||
LOG_INFO(Render_Vulkan, "All dynamic state extensions and features have been disabled");
|
LOG_INFO(Render_Vulkan, "All dynamic state extensions and features have been disabled");
|
||||||
} else {
|
} else {
|
||||||
must_emulate_scaled_formats = false;
|
must_emulate_scaled_formats = false;
|
||||||
LOG_INFO(Render_Vulkan, "Dynamic state is enabled (dyna_state = 1-3), disabling scaled format emulation");
|
LOG_INFO(Render_Vulkan, "Extended dynamic state is enabled, scaled format emulation is OFF");
|
||||||
}
|
}
|
||||||
|
|
||||||
logical = vk::Device::Create(physical, queue_cis, ExtensionListForVulkan(loaded_extensions), first_next, dld);
|
logical = vk::Device::Create(physical, queue_cis, ExtensionListForVulkan(loaded_extensions), first_next, dld);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue