Browse Source

[vk] ExtendedDynamicState repair #1

true-eds
CamilleLaVey 4 weeks ago
committed by Caio Oliveira
parent
commit
72d61c38be
No known key found for this signature in database GPG Key ID: AAAE6C7FD4186B0C
  1. 22
      src/video_core/renderer_vulkan/vk_rasterizer.cpp
  2. 2
      src/video_core/renderer_vulkan/vk_rasterizer.h
  3. 5
      src/video_core/renderer_vulkan/vk_state_tracker.cpp
  4. 10
      src/video_core/renderer_vulkan/vk_state_tracker.h
  5. 2
      src/video_core/vulkan_common/vulkan_wrapper.cpp
  6. 10
      src/video_core/vulkan_common/vulkan_wrapper.h

22
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@ -1034,6 +1034,8 @@ void RasterizerVulkan::UpdateDynamicStates() {
UpdateDepthClampEnable(regs); UpdateDepthClampEnable(regs);
UpdateLineStippleEnable(regs); UpdateLineStippleEnable(regs);
UpdateConservativeRasterizationMode(regs); UpdateConservativeRasterizationMode(regs);
UpdateAlphaToCoverageEnable(regs);
UpdateAlphaToOneEnable(regs);
} }
// EDS3 Blending: ColorBlendEnable, ColorBlendEquation, ColorWriteMask // EDS3 Blending: ColorBlendEnable, ColorBlendEquation, ColorWriteMask
@ -1483,6 +1485,26 @@ void RasterizerVulkan::UpdateDepthClampEnable(Tegra::Engines::Maxwell3D::Regs& r
[is_enabled](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthClampEnableEXT(is_enabled); }); [is_enabled](vk::CommandBuffer cmdbuf) { cmdbuf.SetDepthClampEnableEXT(is_enabled); });
} }
void RasterizerVulkan::UpdateAlphaToCoverageEnable(Tegra::Engines::Maxwell3D::Regs& regs) {
if (!state_tracker.TouchAlphaToCoverageEnable()) {
return;
}
scheduler.Record([enable = regs.anti_alias_alpha_control.alpha_to_coverage](
vk::CommandBuffer cmdbuf) {
cmdbuf.SetAlphaToCoverageEnableEXT(enable != 0);
});
}
void RasterizerVulkan::UpdateAlphaToOneEnable(Tegra::Engines::Maxwell3D::Regs& regs) {
if (!state_tracker.TouchAlphaToOneEnable()) {
return;
}
scheduler.Record([enable = regs.anti_alias_alpha_control.alpha_to_one](
vk::CommandBuffer cmdbuf) {
cmdbuf.SetAlphaToOneEnableEXT(enable != 0);
});
}
void RasterizerVulkan::UpdateDepthCompareOp(Tegra::Engines::Maxwell3D::Regs& regs) { void RasterizerVulkan::UpdateDepthCompareOp(Tegra::Engines::Maxwell3D::Regs& regs) {
if (!state_tracker.TouchDepthCompareOp()) { if (!state_tracker.TouchDepthCompareOp()) {
return; return;

2
src/video_core/renderer_vulkan/vk_rasterizer.h

@ -183,6 +183,8 @@ private:
void UpdateDepthBiasEnable(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateDepthBiasEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateLogicOpEnable(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateLogicOpEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateDepthClampEnable(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateDepthClampEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateAlphaToCoverageEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateAlphaToOneEnable(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateFrontFace(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateFrontFace(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateStencilOp(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateStencilOp(Tegra::Engines::Maxwell3D::Regs& regs);
void UpdateStencilTestEnable(Tegra::Engines::Maxwell3D::Regs& regs); void UpdateStencilTestEnable(Tegra::Engines::Maxwell3D::Regs& regs);

5
src/video_core/renderer_vulkan/vk_state_tracker.cpp

@ -48,6 +48,7 @@ Flags MakeInvalidationFlags() {
FrontFace, FrontFace,
StencilOp, StencilOp,
StencilTestEnable, StencilTestEnable,
RasterizerDiscardEnable,
VertexBuffers, VertexBuffers,
VertexInput, VertexInput,
StateEnable, StateEnable,
@ -55,6 +56,8 @@ Flags MakeInvalidationFlags() {
DepthBiasEnable, DepthBiasEnable,
LogicOpEnable, LogicOpEnable,
DepthClampEnable, DepthClampEnable,
AlphaToCoverageEnable,
AlphaToOneEnable,
LogicOp, LogicOp,
Blending, Blending,
ColorMask, ColorMask,
@ -148,6 +151,8 @@ void SetupDirtyStateEnable(Tables& tables) {
setup(OFF(logic_op.enable), LogicOpEnable); setup(OFF(logic_op.enable), LogicOpEnable);
setup(OFF(viewport_clip_control.geometry_clip), DepthClampEnable); setup(OFF(viewport_clip_control.geometry_clip), DepthClampEnable);
setup(OFF(line_stipple_enable), LineStippleEnable); setup(OFF(line_stipple_enable), LineStippleEnable);
setup(OFF(anti_alias_alpha_control.alpha_to_coverage), AlphaToCoverageEnable);
setup(OFF(anti_alias_alpha_control.alpha_to_one), AlphaToOneEnable);
} }
void SetupDirtyDepthCompareOp(Tables& tables) { void SetupDirtyDepthCompareOp(Tables& tables) {

10
src/video_core/renderer_vulkan/vk_state_tracker.h

@ -61,6 +61,8 @@ enum : u8 {
LogicOp, LogicOp,
LogicOpEnable, LogicOpEnable,
DepthClampEnable, DepthClampEnable,
AlphaToCoverageEnable,
AlphaToOneEnable,
Blending, Blending,
BlendEnable, BlendEnable,
@ -225,6 +227,14 @@ public:
return Exchange(Dirty::DepthClampEnable, false); return Exchange(Dirty::DepthClampEnable, false);
} }
bool TouchAlphaToCoverageEnable() {
return Exchange(Dirty::AlphaToCoverageEnable, false);
}
bool TouchAlphaToOneEnable() {
return Exchange(Dirty::AlphaToOneEnable, false);
}
bool TouchDepthCompareOp() { bool TouchDepthCompareOp() {
return Exchange(Dirty::DepthCompareOp, false); return Exchange(Dirty::DepthCompareOp, false);
} }

2
src/video_core/vulkan_common/vulkan_wrapper.cpp

@ -147,6 +147,8 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
X(vkCmdSetDepthWriteEnableEXT); X(vkCmdSetDepthWriteEnableEXT);
X(vkCmdSetPrimitiveRestartEnableEXT); X(vkCmdSetPrimitiveRestartEnableEXT);
X(vkCmdSetRasterizerDiscardEnableEXT); X(vkCmdSetRasterizerDiscardEnableEXT);
X(vkCmdSetAlphaToCoverageEnableEXT);
X(vkCmdSetAlphaToOneEnableEXT);
X(vkCmdSetConservativeRasterizationModeEXT); X(vkCmdSetConservativeRasterizationModeEXT);
X(vkCmdSetLineRasterizationModeEXT); X(vkCmdSetLineRasterizationModeEXT);
X(vkCmdSetLineStippleEnableEXT); X(vkCmdSetLineStippleEnableEXT);

10
src/video_core/vulkan_common/vulkan_wrapper.h

@ -240,6 +240,8 @@ struct DeviceDispatch : InstanceDispatch {
PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT{}; PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT{};
PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT{}; PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT{};
PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT{}; PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT{};
PFN_vkCmdSetAlphaToCoverageEnableEXT vkCmdSetAlphaToCoverageEnableEXT{};
PFN_vkCmdSetAlphaToOneEnableEXT vkCmdSetAlphaToOneEnableEXT{};
PFN_vkCmdSetConservativeRasterizationModeEXT vkCmdSetConservativeRasterizationModeEXT{}; PFN_vkCmdSetConservativeRasterizationModeEXT vkCmdSetConservativeRasterizationModeEXT{};
PFN_vkCmdSetLineRasterizationModeEXT vkCmdSetLineRasterizationModeEXT{}; PFN_vkCmdSetLineRasterizationModeEXT vkCmdSetLineRasterizationModeEXT{};
PFN_vkCmdSetLineStippleEnableEXT vkCmdSetLineStippleEnableEXT{}; PFN_vkCmdSetLineStippleEnableEXT vkCmdSetLineStippleEnableEXT{};
@ -1486,6 +1488,14 @@ public:
dld->vkCmdSetLogicOpEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); dld->vkCmdSetLogicOpEnableEXT(handle, enable ? VK_TRUE : VK_FALSE);
} }
void SetAlphaToCoverageEnableEXT(bool enable) const noexcept {
dld->vkCmdSetAlphaToCoverageEnableEXT(handle, enable ? VK_TRUE : VK_FALSE);
}
void SetAlphaToOneEnableEXT(bool enable) const noexcept {
dld->vkCmdSetAlphaToOneEnableEXT(handle, enable ? VK_TRUE : VK_FALSE);
}
void SetDepthClampEnableEXT(bool enable) const noexcept { void SetDepthClampEnableEXT(bool enable) const noexcept {
dld->vkCmdSetDepthClampEnableEXT(handle, enable ? VK_TRUE : VK_FALSE); dld->vkCmdSetDepthClampEnableEXT(handle, enable ? VK_TRUE : VK_FALSE);
} }

Loading…
Cancel
Save