mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 21:08:11 +02:00
anv: Fix near plane clipping on Gen7/7.5.
The Gen7/7.5 clip code used APIMODE_OGL, while the Gen8+ clip code used
APIMODE_D3D. The meaning hasn't changed, so one of these must be wrong.
It appears that the hardware documentation is completely wrong. It
claims that the "API Mode" bit means:
0h APIMODE_OGL NEAR_VP boundary == 0.0 (NDC)
1h APIMODE_D3D NEAR_VP boundary == -1.0 (NDC)
However, DirectX typically uses 0.0 for the near plane, while unextended
OpenGL uses -1.0. i965's gen6_clip_state.c uses APIMODE_D3D for the
GL_ZERO_TO_ONE case, so I believe the meanings are backwards from what
the documentation says.
Section 23.2 ("Primitive Clipping") of the Vulkan 1.0.21 specification
contains the following equations:
-w_c <= x_c <= w_c
-w_c <= y_c <= w_c
0 <= z_c <= w_c
This means that Vulkan follows D3D semantics.
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
6b67270262
commit
0d77f08042
1 changed files with 1 additions and 1 deletions
|
|
@ -124,7 +124,7 @@ genX(graphics_pipeline_create)(
|
|||
clip.FrontWinding = vk_to_gen_front_face[rs_info->frontFace],
|
||||
clip.CullMode = vk_to_gen_cullmode[rs_info->cullMode],
|
||||
clip.ClipEnable = !(extra && extra->use_rectlist),
|
||||
clip.APIMode = APIMODE_OGL,
|
||||
clip.APIMode = APIMODE_D3D,
|
||||
clip.ViewportXYClipTestEnable = true,
|
||||
clip.ViewportZClipTestEnable = !pipeline->depth_clamp_enable,
|
||||
clip.ClipMode = CLIPMODE_NORMAL,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue