turnip: fix huge scissor min/max case
Now that tu_cs_emit_regs is used for the scissor, it hits an assert when
the scissor is too large. Fixes this dEQP test:
dEQP-VK.draw.scissor.static_scissor_max_int32
Fixes: 9c0ae5704d
("turnip: fix empty scissor case")
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5655>
This commit is contained in:
parent
1854eeefde
commit
2fbc12a0ac
|
@ -1562,6 +1562,15 @@ tu6_emit_scissor(struct tu_cs *cs, const VkRect2D *scissor)
|
|||
if (max.y == 0)
|
||||
min.y = max.y = 1;
|
||||
|
||||
/* avoid overflow with large scissor
|
||||
* note the max will be limited to min - 1, so that empty scissor works
|
||||
*/
|
||||
uint32_t scissor_max = BITFIELD_MASK(15);
|
||||
min.x = MIN2(scissor_max, min.x);
|
||||
min.y = MIN2(scissor_max, min.y);
|
||||
max.x = MIN2(scissor_max, max.x);
|
||||
max.y = MIN2(scissor_max, max.y);
|
||||
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_GRAS_SC_SCREEN_SCISSOR_TL_0(.x = min.x, .y = min.y),
|
||||
A6XX_GRAS_SC_SCREEN_SCISSOR_BR_0(.x = max.x - 1, .y = max.y - 1));
|
||||
|
|
Loading…
Reference in New Issue