radv: reject unsupported buffer formats earlier

To simplify adding common helpers for translating buffer formats.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29236>
This commit is contained in:
Samuel Pitoiset 2024-05-16 09:01:02 +02:00 committed by Marge Bot
parent 622e1b6385
commit 3409015103
2 changed files with 13 additions and 8 deletions

View file

@ -76,7 +76,6 @@ radv_make_texel_buffer_descriptor(struct radv_device *device, uint64_t va, VkFor
data_format = radv_translate_buffer_dataformat(desc, first_non_void);
assert(data_format != V_008F0C_BUF_DATA_FORMAT_INVALID);
assert(num_format != ~0);
rsrc_word3 |= S_008F0C_NUM_FORMAT(num_format) | S_008F0C_DATA_FORMAT(data_format);
}

View file

@ -36,8 +36,8 @@ radv_translate_buffer_dataformat(const struct util_format_description *desc, int
if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
return V_008F0C_BUF_DATA_FORMAT_10_11_11;
if (first_non_void < 0)
return V_008F0C_BUF_DATA_FORMAT_INVALID;
assert(first_non_void >= 0);
type = desc->channel[first_non_void].type;
if (type == UTIL_FORMAT_TYPE_FIXED)
@ -108,8 +108,7 @@ radv_translate_buffer_numformat(const struct util_format_description *desc, int
if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
if (first_non_void < 0)
return ~0;
assert(first_non_void >= 0);
switch (desc->channel[first_non_void].type) {
case UTIL_FORMAT_TYPE_SIGNED:
@ -538,12 +537,19 @@ radv_is_buffer_format_supported(VkFormat format, bool *scaled)
if (format == VK_FORMAT_UNDEFINED)
return false;
data_format = radv_translate_buffer_dataformat(desc, vk_format_get_first_non_void_channel(format));
num_format = radv_translate_buffer_numformat(desc, vk_format_get_first_non_void_channel(format));
const int first_non_void = vk_format_get_first_non_void_channel(format);
if (first_non_void < 0)
return false;
data_format = radv_translate_buffer_dataformat(desc, first_non_void);
if (data_format == V_008F0C_BUF_DATA_FORMAT_INVALID)
return false;
num_format = radv_translate_buffer_numformat(desc, first_non_void);
if (scaled)
*scaled = (num_format == V_008F0C_BUF_NUM_FORMAT_SSCALED) || (num_format == V_008F0C_BUF_NUM_FORMAT_USCALED);
return data_format != V_008F0C_BUF_DATA_FORMAT_INVALID && num_format != ~0;
return true;
}
bool