mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-23 04:16:57 +02:00
graphics: accept asymmetric Z clip state
This commit is contained in:
@@ -295,10 +295,7 @@ struct ClipControl {
|
|||||||
bool linear_attribute_clip_enable = false;
|
bool linear_attribute_clip_enable = false;
|
||||||
bool force_viewport_index_from_vs_enable = false;
|
bool force_viewport_index_from_vs_enable = false;
|
||||||
|
|
||||||
[[nodiscard]] bool IsZClipModeRepresentable() const {
|
[[nodiscard]] bool IsZClipEnabled() const { return !min_z_clip_disable && !max_z_clip_disable; }
|
||||||
return min_z_clip_disable == max_z_clip_disable;
|
|
||||||
}
|
|
||||||
[[nodiscard]] bool IsZClipEnabled() const { return !min_z_clip_disable; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DepthControl {
|
struct DepthControl {
|
||||||
|
|||||||
@@ -617,8 +617,7 @@ static void ClipCheck(const HW::ClipControl& c) {
|
|||||||
// dx_linear_attr_clip_enable preserves linear (noperspective) attributes at clip-generated
|
// dx_linear_attr_clip_enable preserves linear (noperspective) attributes at clip-generated
|
||||||
// vertices, which Vulkan provides as part of clipping and interpolation.
|
// vertices, which Vulkan provides as part of clipping and interpolation.
|
||||||
EXIT_NOT_IMPLEMENTED(c.user_clip_planes != 0 || c.user_clip_plane_mode != 0 ||
|
EXIT_NOT_IMPLEMENTED(c.user_clip_planes != 0 || c.user_clip_plane_mode != 0 ||
|
||||||
c.vertex_kill_any || !c.IsZClipModeRepresentable() ||
|
c.vertex_kill_any || c.user_clip_plane_negate_y || c.clip_disable ||
|
||||||
c.user_clip_plane_negate_y || c.clip_disable ||
|
|
||||||
c.user_clip_plane_cull_only || c.cull_on_clipping_error_disable ||
|
c.user_clip_plane_cull_only || c.cull_on_clipping_error_disable ||
|
||||||
c.force_viewport_index_from_vs_enable);
|
c.force_viewport_index_from_vs_enable);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,8 +131,7 @@ PipelineCache::GraphicsPipeline& PipelineCache::CreateGraphicsPipeline(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& clip_control = ctx.GetClipControl();
|
const auto& clip_control = ctx.GetClipControl();
|
||||||
EXIT_NOT_IMPLEMENTED(!clip_control.IsZClipModeRepresentable());
|
|
||||||
static_params.negative_one_to_one = !clip_control.dx_clip_space;
|
static_params.negative_one_to_one = !clip_control.dx_clip_space;
|
||||||
static_params.depth_clip_enable = clip_control.IsZClipEnabled();
|
static_params.depth_clip_enable = clip_control.IsZClipEnabled();
|
||||||
static_params.topology = topology;
|
static_params.topology = topology;
|
||||||
|
|||||||
@@ -20143,23 +20143,23 @@ void CheckReferenceClockScale() {
|
|||||||
void CheckClipControlDepthClipState() {
|
void CheckClipControlDepthClipState() {
|
||||||
HW::ClipControl clip;
|
HW::ClipControl clip;
|
||||||
Require("ClipControlDepthClipState", "default",
|
Require("ClipControlDepthClipState", "default",
|
||||||
clip.IsZClipModeRepresentable() && clip.IsZClipEnabled(),
|
clip.IsZClipEnabled(),
|
||||||
"default paired Z clipping was not enabled");
|
"default paired Z clipping was not enabled");
|
||||||
|
|
||||||
clip.min_z_clip_disable = true;
|
clip.min_z_clip_disable = true;
|
||||||
Require("ClipControlDepthClipState", "asymmetric near",
|
Require("ClipControlDepthClipState", "asymmetric near",
|
||||||
!clip.IsZClipModeRepresentable(),
|
!clip.IsZClipEnabled(),
|
||||||
"asymmetric near-plane state was accepted");
|
"near-plane disable did not disable paired host Z clipping");
|
||||||
|
|
||||||
clip.min_z_clip_disable = false;
|
clip.min_z_clip_disable = false;
|
||||||
clip.max_z_clip_disable = true;
|
clip.max_z_clip_disable = true;
|
||||||
Require("ClipControlDepthClipState", "asymmetric far",
|
Require("ClipControlDepthClipState", "asymmetric far",
|
||||||
!clip.IsZClipModeRepresentable(),
|
!clip.IsZClipEnabled(),
|
||||||
"asymmetric far-plane state was accepted");
|
"far-plane disable did not disable paired host Z clipping");
|
||||||
|
|
||||||
clip.min_z_clip_disable = true;
|
clip.min_z_clip_disable = true;
|
||||||
Require("ClipControlDepthClipState", "both disabled",
|
Require("ClipControlDepthClipState", "both disabled",
|
||||||
clip.IsZClipModeRepresentable() && !clip.IsZClipEnabled(),
|
!clip.IsZClipEnabled(),
|
||||||
"paired Z-clip disable was not represented");
|
"paired Z-clip disable was not represented");
|
||||||
std::printf("[host] %-32s ok\n", "ClipControlDepthClipState");
|
std::printf("[host] %-32s ok\n", "ClipControlDepthClipState");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user