radv_image_alloc_values(const struct radv_device *device, struct radv_image *image)
{
if (radv_image_has_dcc(image)) {
+ unsigned pred_size = 8;
+ if (device->physical_device->rad_info.has_32bit_predication)
+ pred_size = 4;
+
image->fce_pred_offset = image->size;
- image->size += 8 * image->info.levels;
+ image->size += pred_size * image->info.levels;
image->dcc_pred_offset = image->size;
- image->size += 8 * image->info.levels;
+ image->size += pred_size * image->info.levels;
}
if (radv_image_has_dcc(image) || radv_image_has_cmask(image) ||
struct radv_image *image,
uint64_t pred_offset, bool value)
{
+ unsigned pred_op = PREDICATION_OP_BOOL64;
uint64_t va = 0;
+ if (cmd_buffer->device->physical_device->rad_info.has_32bit_predication)
+ pred_op = PREDICATION_OP_BOOL32;
+
if (value) {
va = radv_buffer_get_va(image->bo) + image->offset;
va += pred_offset;
}
- si_emit_set_predication_state(cmd_buffer, true, PREDICATION_OP_BOOL64, va);
+ si_emit_set_predication_state(cmd_buffer, true, pred_op, va);
}
static void