The result of 0xf << 28 is a signed integer and hence overflows into the sign
bit. In practice compilers did the right thing here, since the intent of the
code was unsigned arithmetic anyway.
These conditions were observed in:
* dEQP-VK.pipeline.image.suballocation.sampling_type.combined.view_type.1d.format.r4g4b4a4_unorm_pack16.count_8.size.512x1
* dEQP-VK.binding_model.descriptorset_random.sets32.noarray.ubolimitlow.sbolimitlow.sampledimglow.outimgonly.noiub.nouab.frag.ialimithigh.0
Cc: mesa-stable
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6568>
*/
num_targets = (util_last_bit(col_format) + 3) / 4;
for (unsigned i = 0; i < num_targets; i++) {
*/
num_targets = (util_last_bit(col_format) + 3) / 4;
for (unsigned i = 0; i < num_targets; i++) {
- if (!(col_format & (0xf << (i * 4)))) {
+ if (!(col_format & (0xfu << (i * 4)))) {
col_format |= V_028714_SPI_SHADER_32_R << (i * 4);
}
}
col_format |= V_028714_SPI_SHADER_32_R << (i * 4);
}
}
continue;
blend.cb_target_mask |= (unsigned)att->colorWriteMask << (4 * i);
continue;
blend.cb_target_mask |= (unsigned)att->colorWriteMask << (4 * i);
- blend.cb_target_enabled_4bit |= 0xf << (4 * i);
+ blend.cb_target_enabled_4bit |= 0xfu << (4 * i);
if (!att->blendEnable) {
blend.cb_blend_control[i] = blend_cntl;
continue;
if (!att->blendEnable) {
blend.cb_blend_control[i] = blend_cntl;
continue;
}
radv_blend_check_commutativity(&blend, eqRGB, srcRGB, dstRGB,
}
radv_blend_check_commutativity(&blend, eqRGB, srcRGB, dstRGB,
radv_blend_check_commutativity(&blend, eqA, srcA, dstA,
radv_blend_check_commutativity(&blend, eqA, srcA, dstA,
/* Blending optimizations for RB+.
* These transformations don't change the behavior.
/* Blending optimizations for RB+.
* These transformations don't change the behavior.
set_loc(ud_info, sgpr_idx, 1);
set_loc(ud_info, sgpr_idx, 1);
- locs->descriptor_sets_enabled |= 1 << idx;
+ locs->descriptor_sets_enabled |= 1u << idx;
}
struct user_sgpr_info {
}
struct user_sgpr_info {
static void mark_sampler_desc(const nir_variable *var,
struct radv_shader_info *info)
{
static void mark_sampler_desc(const nir_variable *var,
struct radv_shader_info *info)
{
- info->desc_set_used_mask |= (1 << var->data.descriptor_set);
+ info->desc_set_used_mask |= (1u << var->data.descriptor_set);
}
static void mark_ls_output(struct radv_shader_info *info,
}
static void mark_ls_output(struct radv_shader_info *info,
gather_push_constant_info(nir, instr, info);
break;
case nir_intrinsic_vulkan_resource_index:
gather_push_constant_info(nir, instr, info);
break;
case nir_intrinsic_vulkan_resource_index:
- info->desc_set_used_mask |= (1 << nir_intrinsic_desc_set(instr));
+ info->desc_set_used_mask |= (1u << nir_intrinsic_desc_set(instr));
break;
case nir_intrinsic_image_deref_load:
case nir_intrinsic_image_deref_store:
break;
case nir_intrinsic_image_deref_load:
case nir_intrinsic_image_deref_store:
*/
unsigned num_targets = (util_last_bit(info->ps.cb_shader_mask) + 3) / 4;
for (unsigned i = 0; i < num_targets; i++) {
*/
unsigned num_targets = (util_last_bit(info->ps.cb_shader_mask) + 3) / 4;
for (unsigned i = 0; i < num_targets; i++) {
- if (!(info->ps.cb_shader_mask & (0xf << (i * 4)))) {
- info->ps.cb_shader_mask |= 0xf << (i * 4);
+ if (!(info->ps.cb_shader_mask & (0xfu << (i * 4)))) {
+ info->ps.cb_shader_mask |= 0xfu << (i * 4);