mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-23 14:18:59 +02:00
[vulkan] Fixing some incongruences with pipeline keys and dynamic state flags
This commit is contained in:
parent
72ced6b947
commit
c9eb764d2a
3 changed files with 16 additions and 5 deletions
|
|
@ -686,9 +686,9 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.viewportCount = num_viewports,
|
.viewportCount = key.state.extended_dynamic_state ? 0u : num_viewports,
|
||||||
.pViewports = nullptr,
|
.pViewports = nullptr,
|
||||||
.scissorCount = num_viewports,
|
.scissorCount = key.state.extended_dynamic_state ? 0u : num_viewports,
|
||||||
.pScissors = nullptr,
|
.pScissors = nullptr,
|
||||||
};
|
};
|
||||||
if (device.IsNvViewportSwizzleSupported()) {
|
if (device.IsNvViewportSwizzleSupported()) {
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,12 @@ public:
|
||||||
bool UsesExtendedDynamicState() const noexcept {
|
bool UsesExtendedDynamicState() const noexcept {
|
||||||
return key.state.extended_dynamic_state != 0;
|
return key.state.extended_dynamic_state != 0;
|
||||||
}
|
}
|
||||||
|
bool UsesExtendedDynamicState2() const noexcept {
|
||||||
|
return key.state.extended_dynamic_state_2 != 0;
|
||||||
|
}
|
||||||
|
bool UsesExtendedDynamicState2LogicOp() const noexcept {
|
||||||
|
return key.state.extended_dynamic_state_2_logic_op != 0;
|
||||||
|
}
|
||||||
GraphicsPipeline& operator=(GraphicsPipeline&&) noexcept = delete;
|
GraphicsPipeline& operator=(GraphicsPipeline&&) noexcept = delete;
|
||||||
GraphicsPipeline(GraphicsPipeline&&) noexcept = delete;
|
GraphicsPipeline(GraphicsPipeline&&) noexcept = delete;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -277,6 +277,10 @@ void RasterizerVulkan::PrepareDraw(bool is_indexed, Func&& draw_func) {
|
||||||
if (!pipeline->Configure(is_indexed))
|
if (!pipeline->Configure(is_indexed))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (pipeline->UsesExtendedDynamicState()) {
|
||||||
|
state_tracker.InvalidateStateEnableFlag();
|
||||||
|
}
|
||||||
|
|
||||||
UpdateDynamicStates();
|
UpdateDynamicStates();
|
||||||
|
|
||||||
HandleTransformFeedback();
|
HandleTransformFeedback();
|
||||||
|
|
@ -1064,6 +1068,7 @@ bool AccelerateDMA::BufferToImage(const Tegra::DMA::ImageCopy& copy_info,
|
||||||
|
|
||||||
void RasterizerVulkan::UpdateDynamicStates() {
|
void RasterizerVulkan::UpdateDynamicStates() {
|
||||||
auto& regs = maxwell3d->regs;
|
auto& regs = maxwell3d->regs;
|
||||||
|
GraphicsPipeline* pipeline = pipeline_cache.CurrentGraphicsPipeline();
|
||||||
|
|
||||||
// Core Dynamic States (Vulkan 1.0) - Always active regardless of dyna_state setting
|
// Core Dynamic States (Vulkan 1.0) - Always active regardless of dyna_state setting
|
||||||
UpdateViewportsState(regs);
|
UpdateViewportsState(regs);
|
||||||
|
|
@ -1076,7 +1081,7 @@ void RasterizerVulkan::UpdateDynamicStates() {
|
||||||
UpdateLineStipple(regs);
|
UpdateLineStipple(regs);
|
||||||
|
|
||||||
// EDS1: CullMode, DepthCompare, FrontFace, StencilOp, DepthBoundsTest, DepthTest, DepthWrite, StencilTest
|
// EDS1: CullMode, DepthCompare, FrontFace, StencilOp, DepthBoundsTest, DepthTest, DepthWrite, StencilTest
|
||||||
if (device.IsExtExtendedDynamicStateSupported()) {
|
if (device.IsExtExtendedDynamicStateSupported() && pipeline && pipeline->UsesExtendedDynamicState()) {
|
||||||
UpdateCullMode(regs);
|
UpdateCullMode(regs);
|
||||||
UpdateDepthCompareOp(regs);
|
UpdateDepthCompareOp(regs);
|
||||||
UpdateFrontFace(regs);
|
UpdateFrontFace(regs);
|
||||||
|
|
@ -1091,14 +1096,14 @@ void RasterizerVulkan::UpdateDynamicStates() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// EDS2: PrimitiveRestart, RasterizerDiscard, DepthBias enable/disable
|
// EDS2: PrimitiveRestart, RasterizerDiscard, DepthBias enable/disable
|
||||||
if (device.IsExtExtendedDynamicState2Supported()) {
|
if (device.IsExtExtendedDynamicState2Supported() && pipeline && pipeline->UsesExtendedDynamicState2()) {
|
||||||
UpdatePrimitiveRestartEnable(regs);
|
UpdatePrimitiveRestartEnable(regs);
|
||||||
UpdateRasterizerDiscardEnable(regs);
|
UpdateRasterizerDiscardEnable(regs);
|
||||||
UpdateDepthBiasEnable(regs);
|
UpdateDepthBiasEnable(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// EDS2 Extras: LogicOp operation selection
|
// EDS2 Extras: LogicOp operation selection
|
||||||
if (device.IsExtExtendedDynamicState2ExtrasSupported()) {
|
if (device.IsExtExtendedDynamicState2ExtrasSupported() && pipeline && pipeline->UsesExtendedDynamicState2LogicOp()) {
|
||||||
UpdateLogicOp(regs);
|
UpdateLogicOp(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue