zink: min/max blit region in coverage functions
these regions might not have the coords in the correct order, which will cause them to fail intersection tests, resulting in clears that are never applied cc: mesa-stable fixes: GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_all_buffer_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_color_and_depth_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_color_and_stencil_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_linear_filter_color_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_magnifying_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_minifying_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_missing_buffers_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_nearest_filter_color_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_negative_dimensions_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_negative_height_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_negative_width_blit GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_scissor_blit Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14867>
This commit is contained in:
committed by
Marge Bot
parent
b656ab75a6
commit
388f23eabe
@@ -363,12 +363,18 @@ bool
|
||||
zink_blit_region_fills(struct u_rect region, unsigned width, unsigned height)
|
||||
{
|
||||
struct u_rect intersect = {0, width, 0, height};
|
||||
struct u_rect r = {
|
||||
MIN2(region.x0, region.x1),
|
||||
MAX2(region.x0, region.x1),
|
||||
MIN2(region.y0, region.y1),
|
||||
MAX2(region.y0, region.y1),
|
||||
};
|
||||
|
||||
if (!u_rect_test_intersection(®ion, &intersect))
|
||||
if (!u_rect_test_intersection(&r, &intersect))
|
||||
/* is this even a thing? */
|
||||
return false;
|
||||
|
||||
u_rect_find_intersection(®ion, &intersect);
|
||||
u_rect_find_intersection(&r, &intersect);
|
||||
if (intersect.x0 != 0 || intersect.y0 != 0 ||
|
||||
intersect.x1 != width || intersect.y1 != height)
|
||||
return false;
|
||||
@@ -379,11 +385,23 @@ zink_blit_region_fills(struct u_rect region, unsigned width, unsigned height)
|
||||
bool
|
||||
zink_blit_region_covers(struct u_rect region, struct u_rect covers)
|
||||
{
|
||||
struct u_rect r = {
|
||||
MIN2(region.x0, region.x1),
|
||||
MAX2(region.x0, region.x1),
|
||||
MIN2(region.y0, region.y1),
|
||||
MAX2(region.y0, region.y1),
|
||||
};
|
||||
struct u_rect c = {
|
||||
MIN2(covers.x0, covers.x1),
|
||||
MAX2(covers.x0, covers.x1),
|
||||
MIN2(covers.y0, covers.y1),
|
||||
MAX2(covers.y0, covers.y1),
|
||||
};
|
||||
struct u_rect intersect;
|
||||
if (!u_rect_test_intersection(®ion, &covers))
|
||||
if (!u_rect_test_intersection(&r, &c))
|
||||
return false;
|
||||
|
||||
u_rect_union(&intersect, ®ion, &covers);
|
||||
return intersect.x0 == covers.x0 && intersect.y0 == covers.y0 &&
|
||||
intersect.x1 == covers.x1 && intersect.y1 == covers.y1;
|
||||
u_rect_union(&intersect, &r, &c);
|
||||
return intersect.x0 == c.x0 && intersect.y0 == c.y0 &&
|
||||
intersect.x1 == c.x1 && intersect.y1 == c.y1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user