mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
v3dv: check dest bitsize in color blit
Otherwise, if src_bit_size > 0 and dst_bit_size == 0, we end up doing a
bad shift in `1 << (dst_bit_size - 1)`, as `dst_bit_size - 1` is a
negative value (in this case would be MAX_UINT32).
Fixes CID#1468134 "Bad bit shift operation (BAD_SHIFT)":
"large_shift: In expression 1 << dst_bit_size - 1U, left shifting by
more than 31 bits has undefined behavior. The shift amount,
dst_bit_size - 1U, is 4294967295."
v2:
- Use an assertion instead (Iago)
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10251>
This commit is contained in:
parent
fd8d71ce41
commit
33f9b06b0e
1 changed files with 1 additions and 0 deletions
|
|
@ -4657,6 +4657,7 @@ get_color_blit_fs(struct v3dv_device *device,
|
|||
if (dst_bit_size >= src_bit_size)
|
||||
continue;
|
||||
|
||||
assert(dst_bit_size > 0);
|
||||
if (util_format_is_pure_uint(dst_pformat)) {
|
||||
nir_ssa_def *max = nir_imm_int(&b, (1 << dst_bit_size) - 1);
|
||||
c[i] = nir_umin(&b, c[i], max);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue