Module: Mesa Branch: main Commit: 0bd9e4d3b60ce8a87624fb3562a5ffde2345d868 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0bd9e4d3b60ce8a87624fb3562a5ffde2345d868
Author: Alyssa Rosenzweig <[email protected]> Date: Mon Apr 25 11:32:39 2022 -0400 panvk: Conform viewport code to Vulkan spec The depth equations weren't quite right, with spec citations to prove it. This didn't fix the test I was debugging, but it surely fixed /something/. Signed-off-by: Alyssa Rosenzweig <[email protected]> Reviewed-by: Boris Brezillon <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16155> --- src/panfrost/vulkan/panvk_cs.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/panfrost/vulkan/panvk_cs.c b/src/panfrost/vulkan/panvk_cs.c index cf1915b9287..fe717dd9ae2 100644 --- a/src/panfrost/vulkan/panvk_cs.c +++ b/src/panfrost/vulkan/panvk_cs.c @@ -30,20 +30,38 @@ #include "panvk_cs.h" #include "panvk_private.h" +/* + * Upload the viewport scale. Defined as (px/2, py/2, pz) at the start of section + * 24.5 ("Controlling the Viewport") of the Vulkan spec. At the end of the + * section, the spec defines: + * + * px = width + * py = height + * pz = maxDepth - minDepth + */ void panvk_sysval_upload_viewport_scale(const VkViewport *viewport, union panvk_sysval_data *data) { data->f32[0] = 0.5f * viewport->width; data->f32[1] = 0.5f * viewport->height; - data->f32[2] = 0.5f * (viewport->maxDepth - viewport->minDepth); + data->f32[2] = (viewport->maxDepth - viewport->minDepth); } +/* + * Upload the viewport offset. Defined as (ox, oy, oz) at the start of section + * 24.5 ("Controlling the Viewport") of the Vulkan spec. At the end of the + * section, the spec defines: + * + * ox = x + width/2 + * oy = y + height/2 + * oz = minDepth + */ void panvk_sysval_upload_viewport_offset(const VkViewport *viewport, union panvk_sysval_data *data) { data->f32[0] = (0.5f * viewport->width) + viewport->x; data->f32[1] = (0.5f * viewport->height) + viewport->y; - data->f32[2] = (0.5f * (viewport->maxDepth - viewport->minDepth)) + viewport->minDepth; + data->f32[2] = viewport->minDepth; }
