From 6526e6d11b82a96139c3e5d16120765262d5707e Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Mon, 14 Dec 2020 12:01:40 +0100 Subject: [PATCH] lavapipe: implement VK_EXT_index_type_uint8 Since Gallium supports 8 bit indices, this extension is a simple matter of plumbing a value through, exposing a feature and flipping the switch for the extension. This lets zink avoid up-converting the index-buffer before drawing. Reviewed-by: Eric Anholt Part-of: --- src/gallium/frontends/lavapipe/lvp_device.c | 7 +++++++ src/gallium/frontends/lavapipe/lvp_execute.c | 3 +++ src/gallium/frontends/lavapipe/lvp_extensions.py | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 2f60b1e9f63..063e63e13c2 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -386,6 +386,13 @@ void lvp_GetPhysicalDeviceFeatures2( break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: { + VkPhysicalDeviceIndexTypeUint8FeaturesEXT *features = + (VkPhysicalDeviceIndexTypeUint8FeaturesEXT *)ext; + features->indexTypeUint8 = true; + break; + } + default: break; } diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index e397cceb92b..6f1c4ef5270 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -1917,6 +1917,9 @@ static void handle_index_buffer(struct lvp_cmd_buffer_entry *cmd, { struct lvp_cmd_bind_index_buffer *ib = &cmd->u.index_buffer; switch (ib->index_type) { + case VK_INDEX_TYPE_UINT8_EXT: + state->index_size = 1; + break; case VK_INDEX_TYPE_UINT16: state->index_size = 2; break; diff --git a/src/gallium/frontends/lavapipe/lvp_extensions.py b/src/gallium/frontends/lavapipe/lvp_extensions.py index 935fe8f4ee0..c06e04064aa 100644 --- a/src/gallium/frontends/lavapipe/lvp_extensions.py +++ b/src/gallium/frontends/lavapipe/lvp_extensions.py @@ -123,7 +123,7 @@ EXTENSIONS = [ Extension('VK_EXT_external_memory_host', 1, False), Extension('VK_EXT_global_priority', 1, False), Extension('VK_EXT_host_query_reset', 1, False), - Extension('VK_EXT_index_type_uint8', 1, False), + Extension('VK_EXT_index_type_uint8', 1, True), Extension('VK_EXT_inline_uniform_block', 1, False), Extension('VK_EXT_memory_budget', 1, False), Extension('VK_EXT_memory_priority', 1, False),