diff --git a/src/gallium/drivers/zink/ci/zink-anv-cml-fails.txt b/src/gallium/drivers/zink/ci/zink-anv-cml-fails.txt index 8befdc5f868..554e27a97a8 100644 --- a/src/gallium/drivers/zink/ci/zink-anv-cml-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-anv-cml-fails.txt @@ -1,6 +1,5 @@ # ../src/intel/common/intel_urb_config.c:173: intel_get_urb_config: Assertion `total_needs <= urb_chunks' failed. dEQP-GLES31.functional.geometry_shading.basic.output_0_and_128,Crash -dEQP-GLES31.functional.geometry_shading.basic.output_128_and_0,Crash dEQP-GLES31.functional.geometry_shading.basic.output_128,Crash dEQP-GLES31.functional.geometry_shading.basic.output_max,Crash dEQP-GLES31.functional.geometry_shading.basic.output_vary_by_attribute,Crash diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index c102a33fd18..da6babacb5f 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -947,6 +947,8 @@ void anv_CmdBindIndexBuffer2KHR( cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_INDEX_TYPE; } + vk_cmd_set_index_buffer_type(&cmd_buffer->vk, indexType); + uint64_t index_addr = buffer ? anv_address_physical(anv_address_add(buffer->address, offset)) : 0; uint32_t index_size = buffer ? vk_buffer_range(&buffer->vk, offset, size) : 0; diff --git a/src/intel/vulkan/anv_physical_device.c b/src/intel/vulkan/anv_physical_device.c index 67582f09eb3..fcdbf3aff3b 100644 --- a/src/intel/vulkan/anv_physical_device.c +++ b/src/intel/vulkan/anv_physical_device.c @@ -353,6 +353,7 @@ get_device_extensions(const struct anv_physical_device *device, .EXT_present_timing = device->has_reg_timestamp, #endif .EXT_primitive_topology_list_restart = true, + .EXT_primitive_restart_index = true, .EXT_primitives_generated_query = true, .EXT_private_data = true, .EXT_provoking_vertex = true, @@ -1019,6 +1020,9 @@ get_features(const struct anv_physical_device *pdevice, /* VK_EXT_device_address_binding_report */ .reportAddressBinding = true, + + /* VK_EXT_primitive_restart_index */ + .primitiveRestartIndex = true, }; /* The new DOOM and Wolfenstein games require depthBounds without diff --git a/src/intel/vulkan/genX_gfx_state.c b/src/intel/vulkan/genX_gfx_state.c index 1b3a963f4ce..1b52673097a 100644 --- a/src/intel/vulkan/genX_gfx_state.c +++ b/src/intel/vulkan/genX_gfx_state.c @@ -1723,7 +1723,7 @@ update_vf_restart(struct anv_gfx_dynamic_state *hw_state, const struct anv_cmd_graphics_state *gfx) { SET(VF, vf.IndexedDrawCutIndexEnable, dyn->ia.primitive_restart_enable); - SET(VF, vf.CutIndex, vk_index_to_restart(gfx->index_type)); + SET(VF, vf.CutIndex, dyn->ia.primitive_restart_index); } ALWAYS_INLINE static void @@ -2461,7 +2461,8 @@ cmd_buffer_flush_gfx_runtime_state(struct anv_gfx_dynamic_state *hw_state, update_line_stipple(hw_state, dyn); if ((gfx->dirty & ANV_CMD_DIRTY_INDEX_TYPE) || - BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE)) + BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE) || + BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_INDEX)) update_vf_restart(hw_state, dyn, gfx); if ((gfx->dirty & ANV_CMD_DIRTY_INDEX_BUFFER) ||