Mesa (master): freedreno: clamp scissor bounds

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 4 15:43:32 UTC 2021


Module: Mesa
Branch: master
Commit: 6ae726b79988addc50c1ed149151a351d0343d9d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6ae726b79988addc50c1ed149151a351d0343d9d

Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date:   Wed Dec 23 14:54:22 2020 +0200

freedreno: clamp scissor bounds

We don't have negative scissor coords and maximum dimensions are:
 a3xx - 4096
 a4xx+ - 16384

Fixes piglit tests:
 fbo-viewport
 viewport-clamp

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/30
Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8209>

---

 .gitlab-ci/piglit/freedreno-a530-gl.txt         |  2 --
 .gitlab-ci/piglit/freedreno-a630-gl.txt         |  2 --
 src/gallium/drivers/freedreno/freedreno_state.c | 15 +++++++--------
 3 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/.gitlab-ci/piglit/freedreno-a530-gl.txt b/.gitlab-ci/piglit/freedreno-a530-gl.txt
index 5be19dbe341..ec8d1a259de 100644
--- a/.gitlab-ci/piglit/freedreno-a530-gl.txt
+++ b/.gitlab-ci/piglit/freedreno-a530-gl.txt
@@ -508,7 +508,6 @@ spec/!opengl 2.1/polygon-stipple-fs: fail
 spec/!opengl 3.0/clearbuffer-depth: fail
 spec/!opengl 3.0/clearbuffer-depth-cs-probe: skip
 spec/!opengl 3.0/clearbuffer-stencil: fail
-spec/!opengl 3.0/viewport-clamp: crash
 spec/!opengl 3.1/minmax: fail
 spec/!opengl 3.1/primitive-restart-xfb generated: fail
 spec/!opengl 3.1/primitive-restart-xfb written: fail
@@ -841,7 +840,6 @@ spec/arb_framebuffer_object/arb_framebuffer_object-depth-stencil-blit stencil gl
 spec/arb_framebuffer_object/arb_framebuffer_object-depth-stencil-blit stencil gl_stencil_index16: fail
 spec/arb_framebuffer_object/arb_framebuffer_object-depth-stencil-blit stencil gl_stencil_index4: fail
 spec/arb_framebuffer_object/arb_framebuffer_object-depth-stencil-blit stencil gl_stencil_index8: fail
-spec/arb_framebuffer_object/fbo-viewport: crash
 spec/arb_framebuffer_object/framebuffer-blit-levels draw stencil: fail
 spec/arb_framebuffer_object/framebuffer-blit-levels read stencil: fail
 spec/arb_framebuffer_srgb/blit renderbuffer linear msaa disabled clear: fail
diff --git a/.gitlab-ci/piglit/freedreno-a630-gl.txt b/.gitlab-ci/piglit/freedreno-a630-gl.txt
index ef968370e33..205f92ad2ab 100644
--- a/.gitlab-ci/piglit/freedreno-a630-gl.txt
+++ b/.gitlab-ci/piglit/freedreno-a630-gl.txt
@@ -869,7 +869,6 @@ spec/!opengl 2.1/pbo/test_polygon_stip: fail
 spec/!opengl 2.1/polygon-stipple-fs: fail
 spec/!opengl 3.0/clearbuffer-depth: fail
 spec/!opengl 3.0/clearbuffer-stencil: fail
-spec/!opengl 3.0/viewport-clamp: crash
 spec/!opengl 3.1/primitive-restart-xfb generated: fail
 spec/!opengl 3.2/layered-rendering/clear-depth: crash
 spec/!opengl 3.2/pointsprite-origin: fail
@@ -1069,7 +1068,6 @@ spec/arb_fragment_program/fp-indirections: skip
 spec/arb_fragment_program/sparse-samplers: crash
 spec/arb_fragment_shader_interlock/arb_fragment_shader_interlock-image-load-store: skip
 spec/arb_framebuffer_no_attachments/arb_framebuffer_no_attachments-params/dsa: skip
-spec/arb_framebuffer_object/fbo-viewport: crash
 spec/arb_framebuffer_srgb/blit renderbuffer linear msaa disabled clear: fail
 spec/arb_framebuffer_srgb/blit renderbuffer linear msaa disabled render: fail
 spec/arb_framebuffer_srgb/blit renderbuffer linear msaa enabled clear: fail
diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c
index 8ca1fd75adf..54471cb1b97 100644
--- a/src/gallium/drivers/freedreno/freedreno_state.c
+++ b/src/gallium/drivers/freedreno/freedreno_state.c
@@ -331,14 +331,13 @@ fd_set_viewport_states(struct pipe_context *pctx,
 		swap(miny, maxy);
 	}
 
-	debug_assert(miny >= 0);
-	debug_assert(maxy >= 0);
-
-	/* Convert to integer and round up the max bounds. */
-	scissor->minx = minx;
-	scissor->miny = miny;
-	scissor->maxx = ceilf(maxx);
-	scissor->maxy = ceilf(maxy);
+	const float max_dims = is_a3xx(ctx->screen) ? 4096.f : 16384.f;
+
+	/* Clamp, convert to integer and round up the max bounds. */
+	scissor->minx = CLAMP(minx, 0.f, max_dims);
+	scissor->miny = CLAMP(miny, 0.f, max_dims);
+	scissor->maxx = CLAMP(ceilf(maxx), 0.f, max_dims);
+	scissor->maxy = CLAMP(ceilf(maxy), 0.f, max_dims);
 
 	ctx->dirty |= FD_DIRTY_VIEWPORT;
 }



More information about the mesa-commit mailing list