mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-16 14:47:00 +02:00
[vk] ExtendedDynamicState repair #1
This commit is contained in:
parent
8dfc42b45a
commit
fbb513c83d
6 changed files with 51 additions and 0 deletions
|
|
@ -1016,6 +1016,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
|
||||||
|
|
@ -1465,6 +1467,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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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…
Add table
Add a link
Reference in a new issue