graphics: accept asymmetric Z clip state

This commit is contained in:
Senaxx
2026-08-16 04:14:57 +02:00
committed by nmzik
parent 5e27a28ab0
commit d7fd4a2864
4 changed files with 9 additions and 14 deletions
+1 -4
View File
@@ -295,10 +295,7 @@ struct ClipControl {
bool linear_attribute_clip_enable = false;
bool force_viewport_index_from_vs_enable = false;
[[nodiscard]] bool IsZClipModeRepresentable() const {
return min_z_clip_disable == max_z_clip_disable;
}
[[nodiscard]] bool IsZClipEnabled() const { return !min_z_clip_disable; }
[[nodiscard]] bool IsZClipEnabled() const { return !min_z_clip_disable && !max_z_clip_disable; }
};
struct DepthControl {
+1 -2
View File
@@ -617,8 +617,7 @@ static void ClipCheck(const HW::ClipControl& c) {
// dx_linear_attr_clip_enable preserves linear (noperspective) attributes at clip-generated
// vertices, which Vulkan provides as part of clipping and interpolation.
EXIT_NOT_IMPLEMENTED(c.user_clip_planes != 0 || c.user_clip_plane_mode != 0 ||
c.vertex_kill_any || !c.IsZClipModeRepresentable() ||
c.user_clip_plane_negate_y || c.clip_disable ||
c.vertex_kill_any || c.user_clip_plane_negate_y || c.clip_disable ||
c.user_clip_plane_cull_only || c.cull_on_clipping_error_disable ||
c.force_viewport_index_from_vs_enable);
}
@@ -131,8 +131,7 @@ PipelineCache::GraphicsPipeline& PipelineCache::CreateGraphicsPipeline(
}
}
const auto& clip_control = ctx.GetClipControl();
EXIT_NOT_IMPLEMENTED(!clip_control.IsZClipModeRepresentable());
const auto& clip_control = ctx.GetClipControl();
static_params.negative_one_to_one = !clip_control.dx_clip_space;
static_params.depth_clip_enable = clip_control.IsZClipEnabled();
static_params.topology = topology;
+6 -6
View File
@@ -20143,23 +20143,23 @@ void CheckReferenceClockScale() {
void CheckClipControlDepthClipState() {
HW::ClipControl clip;
Require("ClipControlDepthClipState", "default",
clip.IsZClipModeRepresentable() && clip.IsZClipEnabled(),
clip.IsZClipEnabled(),
"default paired Z clipping was not enabled");
clip.min_z_clip_disable = true;
Require("ClipControlDepthClipState", "asymmetric near",
!clip.IsZClipModeRepresentable(),
"asymmetric near-plane state was accepted");
!clip.IsZClipEnabled(),
"near-plane disable did not disable paired host Z clipping");
clip.min_z_clip_disable = false;
clip.max_z_clip_disable = true;
Require("ClipControlDepthClipState", "asymmetric far",
!clip.IsZClipModeRepresentable(),
"asymmetric far-plane state was accepted");
!clip.IsZClipEnabled(),
"far-plane disable did not disable paired host Z clipping");
clip.min_z_clip_disable = true;
Require("ClipControlDepthClipState", "both disabled",
clip.IsZClipModeRepresentable() && !clip.IsZClipEnabled(),
!clip.IsZClipEnabled(),
"paired Z-clip disable was not represented");
std::printf("[host] %-32s ok\n", "ClipControlDepthClipState");
}