Mesa (main): turnip: clamp per-tile scissors to max viewport size in binning pass
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Oct 5 15:02:18 UTC 2021
Module: Mesa
Branch: main
Commit: d2543658ef6fe0ad59af217a09a931d3b6174a43
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d2543658ef6fe0ad59af217a09a931d3b6174a43
Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date: Tue Oct 5 14:49:40 2021 +0300
turnip: clamp per-tile scissors to max viewport size in binning pass
Tiles on the edge may cross maximum viewport size, we have to clamp
per-tile scissor to maximum allowed viewport dimensions.
Add MAX_VIEWPORT_SIZE constant along the way.
Fixes vkd3d test "test_draw_uav_only"
Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13197>
---
src/freedreno/vulkan/tu_cmd_buffer.c | 4 ++--
src/freedreno/vulkan/tu_device.c | 2 +-
src/freedreno/vulkan/tu_private.h | 1 +
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index f2bb632bc5a..285e3c173a5 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -609,8 +609,8 @@ tu6_emit_tile_select(struct tu_cmd_buffer *cmd,
const uint32_t x1 = fb->tile0.width * tx;
const uint32_t y1 = fb->tile0.height * ty;
- const uint32_t x2 = x1 + fb->tile0.width - 1;
- const uint32_t y2 = y1 + fb->tile0.height - 1;
+ const uint32_t x2 = MIN2(x1 + fb->tile0.width - 1, MAX_VIEWPORT_SIZE - 1);
+ const uint32_t y2 = MIN2(y1 + fb->tile0.height - 1, MAX_VIEWPORT_SIZE - 1);
tu6_emit_window_scissor(cs, x1, y1, x2, y2);
tu6_emit_window_offset(cs, x1, y1);
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index 855409db3ee..181772fcc48 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -922,7 +922,7 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
.maxSamplerLodBias = 4095.0 / 256.0, /* [-16, 15.99609375] */
.maxSamplerAnisotropy = 16,
.maxViewports = MAX_VIEWPORTS,
- .maxViewportDimensions = { (1 << 14), (1 << 14) },
+ .maxViewportDimensions = { MAX_VIEWPORT_SIZE, MAX_VIEWPORT_SIZE },
.viewportBoundsRange = { INT16_MIN, INT16_MAX },
.viewportSubPixelBits = 8,
.minMemoryMapAlignment = 4096, /* A page */
diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h
index 44694ff5850..788f9bf737b 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -100,6 +100,7 @@ typedef uint32_t xcb_window_t;
#define MAX_RTS 8
#define MAX_VSC_PIPES 32
#define MAX_VIEWPORTS 16
+#define MAX_VIEWPORT_SIZE (1 << 14)
#define MAX_SCISSORS 16
#define MAX_DISCARD_RECTANGLES 4
#define MAX_PUSH_CONSTANTS_SIZE 128
More information about the mesa-commit
mailing list