radv: use 32-bit predication for skipping FCE on GFX10.3+

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7897>
This commit is contained in:
Samuel Pitoiset 2020-12-03 12:51:35 +01:00 committed by Marge Bot
parent 3494551d08
commit b24b3026cc
2 changed files with 11 additions and 3 deletions

View file

@ -1278,11 +1278,15 @@ static void
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) ||

View file

@ -565,14 +565,18 @@ radv_emit_set_predication_state_from_image(struct radv_cmd_buffer *cmd_buffer,
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