nv2a/vk: Use unsigned types for clear scissor calculation for now

This commit is contained in:
Matt Borgerson 2024-12-30 18:11:18 -07:00 committed by mborgerson
parent f834b85bb7
commit 4a09eeb121
1 changed files with 10 additions and 9 deletions

View File

@ -1698,10 +1698,10 @@ void pgraph_vk_clear_surface(NV2AState *d, uint32_t parameter)
uint32_t clearrectx = pgraph_reg_r(pg, NV_PGRAPH_CLEARRECTX);
uint32_t clearrecty = pgraph_reg_r(pg, NV_PGRAPH_CLEARRECTY);
int xmin = GET_MASK(clearrectx, NV_PGRAPH_CLEARRECTX_XMIN);
int xmax = GET_MASK(clearrectx, NV_PGRAPH_CLEARRECTX_XMAX);
int ymin = GET_MASK(clearrecty, NV_PGRAPH_CLEARRECTY_YMIN);
int ymax = GET_MASK(clearrecty, NV_PGRAPH_CLEARRECTY_YMAX);
unsigned int xmin = GET_MASK(clearrectx, NV_PGRAPH_CLEARRECTX_XMIN);
unsigned int xmax = GET_MASK(clearrectx, NV_PGRAPH_CLEARRECTX_XMAX);
unsigned int ymin = GET_MASK(clearrecty, NV_PGRAPH_CLEARRECTY_YMIN);
unsigned int ymax = GET_MASK(clearrecty, NV_PGRAPH_CLEARRECTY_YMAX);
NV2A_VK_DGROUP_BEGIN("CLEAR min=(%d,%d) max=(%d,%d)%s%s", xmin, ymin, xmax,
ymax, write_color ? " color" : "",
@ -1713,14 +1713,15 @@ void pgraph_vk_clear_surface(NV2AState *d, uint32_t parameter)
binding->vram_addr);
begin_draw(pg);
// FIXME: What does hardware do when min <= max?
// FIXME: What does hardware do when min >= max?
// FIXME: What does hardware do when min >= surface size?
xmin = MIN(xmin, binding->width - 1);
ymin = MIN(ymin, binding->height - 1);
xmax = MIN(xmax, binding->width - 1);
ymax = MIN(ymax, binding->height - 1);
xmax = MAX(xmin, MIN(xmax, binding->width - 1));
ymax = MAX(ymin, MIN(ymax, binding->height - 1));
int scissor_width = MAX(0, xmax - xmin + 1),
scissor_height = MAX(0, ymax - ymin + 1);
unsigned int scissor_width = MAX(0, xmax - xmin + 1);
unsigned int scissor_height = MAX(0, ymax - ymin + 1);
pgraph_apply_anti_aliasing_factor(pg, &xmin, &ymin);
pgraph_apply_anti_aliasing_factor(pg, &scissor_width, &scissor_height);