From ed163a44b6a73ffac93fa40ee0eee5f7598cd54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Mon, 7 Jun 2021 23:43:27 +0200 Subject: [PATCH] radv: Expose radv_get_viewport_xform in radv_private.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need to emit viewport transform information for culling shaders. This is used for small primitive culling. Signed-off-by: Timur Kristóf Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_private.h | 3 +++ src/amd/vulkan/si_cmd_buffer.c | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 26c2aaa1ce4..06ef5928dc4 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1637,6 +1637,9 @@ radv_get_descriptors_state(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoi } } +void +radv_get_viewport_xform(const VkViewport *viewport, float scale[3], float translate[3]); + /* * Takes x,y,z as exact numbers of invocations, instead of blocks. * diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c index ccffad4675b..ad4968d99c3 100644 --- a/src/amd/vulkan/si_cmd_buffer.c +++ b/src/amd/vulkan/si_cmd_buffer.c @@ -648,8 +648,8 @@ fail: device->ws->cs_destroy(cs); } -static void -get_viewport_xform(const VkViewport *viewport, float scale[3], float translate[3]) +void +radv_get_viewport_xform(const VkViewport *viewport, float scale[3], float translate[3]) { float x = viewport->x; float y = viewport->y; @@ -678,7 +678,7 @@ si_write_viewport(struct radeon_cmdbuf *cs, int first_vp, int count, const VkVie for (i = 0; i < count; i++) { float scale[3], translate[3]; - get_viewport_xform(&viewports[i], scale, translate); + radv_get_viewport_xform(&viewports[i], scale, translate); radeon_emit(cs, fui(scale[0])); radeon_emit(cs, fui(translate[0])); radeon_emit(cs, fui(scale[1])); @@ -702,7 +702,7 @@ si_scissor_from_viewport(const VkViewport *viewport) float scale[3], translate[3]; VkRect2D rect; - get_viewport_xform(viewport, scale, translate); + radv_get_viewport_xform(viewport, scale, translate); rect.offset.x = translate[0] - fabsf(scale[0]); rect.offset.y = translate[1] - fabsf(scale[1]); @@ -740,7 +740,7 @@ si_write_scissors(struct radeon_cmdbuf *cs, int first, int count, const VkRect2D VkRect2D viewport_scissor = si_scissor_from_viewport(viewports + i); VkRect2D scissor = si_intersect_scissor(&scissors[i], &viewport_scissor); - get_viewport_xform(viewports + i, scale, translate); + radv_get_viewport_xform(viewports + i, scale, translate); scale[0] = fabsf(scale[0]); scale[1] = fabsf(scale[1]);