From aea35a5ac246f92026a6a05bb8862b9a5acd1e7b Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Thu, 3 Jun 2021 08:58:19 -0400 Subject: [PATCH] r600: explicitly advertise index buffer format support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Erik Faye-Lund Reviewed-by: Marek Olšák Part-of: --- src/gallium/drivers/r600/evergreen_state.c | 5 +++++ src/gallium/drivers/r600/r600_formats.h | 13 +++++++++++++ src/gallium/drivers/r600/r600_state.c | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index f76b1e331a8..83a521102af 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -307,6 +307,11 @@ bool evergreen_is_format_supported(struct pipe_screen *screen, retval |= PIPE_BIND_VERTEX_BUFFER; } + if (usage & PIPE_BIND_INDEX_BUFFER && + r600_is_index_format_supported(format)) { + retval |= PIPE_BIND_INDEX_BUFFER; + } + if ((usage & PIPE_BIND_LINEAR) && !util_format_is_compressed(format) && !(usage & PIPE_BIND_DEPTH_STENCIL)) diff --git a/src/gallium/drivers/r600/r600_formats.h b/src/gallium/drivers/r600/r600_formats.h index 6c94a24700b..3ff12ddf8c7 100644 --- a/src/gallium/drivers/r600/r600_formats.h +++ b/src/gallium/drivers/r600/r600_formats.h @@ -122,4 +122,17 @@ static inline bool r600_is_vertex_format_supported(enum pipe_format format) return true; } +static inline bool r600_is_index_format_supported(enum pipe_format format) +{ + switch (format) { + case PIPE_FORMAT_R8_UINT: + case PIPE_FORMAT_R16_UINT: + case PIPE_FORMAT_R32_UINT: + return true; + + default: + return false; + } +} + #endif diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index 6eb2bd42b1c..3448eb482ba 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -236,6 +236,11 @@ bool r600_is_format_supported(struct pipe_screen *screen, retval |= PIPE_BIND_VERTEX_BUFFER; } + if (usage & PIPE_BIND_INDEX_BUFFER && + r600_is_index_format_supported(format)) { + retval |= PIPE_BIND_INDEX_BUFFER; + } + if ((usage & PIPE_BIND_LINEAR) && !util_format_is_compressed(format) && !(usage & PIPE_BIND_DEPTH_STENCIL))