pvr: Fix packing issue with max_{x,y}_clip

The spec. guarantees the framebuffer width and height to be `> 0`
but the same is not true for the render area.

Previously a render area of `0` size would wrap around due to the
`- 1` so we now check for `0`.

Fixes:
  pvr_packet_helpers.h:79: __pvr_uint: Assertion `v <= max' failed.
on
  dEQP-VK.api.pipeline.renderpass.framebuffer_compatible_renderpass

Signed-off-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Reviewed-by: Luigi Santivetti <luigi.santivetti@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24329>
This commit is contained in:
Karmjit Mahil 2023-07-19 13:13:09 +01:00 committed by Marge Bot
parent 670bd70fa6
commit 2c6cadb5ea

View file

@ -1017,16 +1017,18 @@ static void pvr_setup_pbe_state(
break; break;
} }
#define PVR_DEC_IF_NOT_ZERO(_v) (((_v) > 0) ? (_v)-1 : 0)
render_params.min_x_clip = MAX2(0, render_area->offset.x); render_params.min_x_clip = MAX2(0, render_area->offset.x);
render_params.min_y_clip = MAX2(0, render_area->offset.y); render_params.min_y_clip = MAX2(0, render_area->offset.y);
render_params.max_x_clip = render_params.max_x_clip = MIN2(
MIN2(framebuffer->width, framebuffer->width - 1,
render_area->offset.x + render_area->extent.width) - PVR_DEC_IF_NOT_ZERO(render_area->offset.x + render_area->extent.width));
1; render_params.max_y_clip = MIN2(
render_params.max_y_clip = framebuffer->height - 1,
MIN2(framebuffer->height, PVR_DEC_IF_NOT_ZERO(render_area->offset.y + render_area->extent.height));
render_area->offset.y + render_area->extent.height) -
1; #undef PVR_DEC_IF_NOT_ZERO
render_params.slice = 0; render_params.slice = 0;
render_params.mrt_index = mrt_index; render_params.mrt_index = mrt_index;