From b5beae5777a5c6abbd1b2a2769d86cfc71a7d248 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 16 Aug 2022 14:27:40 +1000 Subject: [PATCH] nvk: add basic primitive restart fixes crucible func.draw-index16-restart func.draw-index32-restart Part-of: --- src/nouveau/vulkan/nvk_cmd_draw.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c b/src/nouveau/vulkan/nvk_cmd_draw.c index 784fa26e879..df020e8c2c0 100644 --- a/src/nouveau/vulkan/nvk_cmd_draw.c +++ b/src/nouveau/vulkan/nvk_cmd_draw.c @@ -662,8 +662,8 @@ nvk_flush_ia_state(struct nvk_cmd_buffer *cmd) /** Nothing to do for MESA_VK_DYNAMIC_IA_PRIMITIVE_TOPOLOGY */ if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE)) { - P_IMMD(p, NV9097, SET_DA_PRIMITIVE_RESTART_VERTEX_ARRAY, - dyn->ia.primitive_restart_enable); + P_IMMD(p, NV9097, SET_DA_PRIMITIVE_RESTART, + dyn->ia.primitive_restart_enable); } } @@ -1077,6 +1077,21 @@ vk_to_nv_index_format(VkIndexType type) } } +static uint32_t +vk_index_to_restart(VkIndexType index_type) +{ + switch (index_type) { + case VK_INDEX_TYPE_UINT16: + return 0xffff; + case VK_INDEX_TYPE_UINT32: + return 0xffffffff; + case VK_INDEX_TYPE_UINT8_EXT: + return 0xff; + default: + unreachable("unexpected index type"); + } +} + VKAPI_ATTR void VKAPI_CALL nvk_CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer _buffer, @@ -1095,6 +1110,9 @@ nvk_CmdBindIndexBuffer(VkCommandBuffer commandBuffer, range = addr = 0; } + P_IMMD(p, NV9097, SET_DA_PRIMITIVE_RESTART_INDEX, + vk_index_to_restart(indexType)); + P_MTHD(p, NV9097, SET_INDEX_BUFFER_A); P_NV9097_SET_INDEX_BUFFER_A(p, addr >> 32); P_NV9097_SET_INDEX_BUFFER_B(p, addr);