pvr: Implement VK_KHR_index_type_uint8

This commit will also add a helper function to simplify the code

Signed-off-by: Vlad Schiller <vlad-radu.schiller@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28361>
This commit is contained in:
Vlad Schiller
2024-03-12 11:12:35 +00:00
committed by Marge Bot
parent d7517afa81
commit 8dde690a5b
4 changed files with 29 additions and 33 deletions

View File

@@ -521,7 +521,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_KHR_get_surface_capabilities2 DONE (anv, lvp, nvk, pvr, radv, tu, v3dv, vn)
VK_KHR_global_priority DONE (anv, radv, tu)
VK_KHR_incremental_present DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn)
VK_KHR_index_type_uint8 DONE (anv, nvk, radv, tu, v3dv)
VK_KHR_index_type_uint8 DONE (anv, nvk, pvr, radv, tu, v3dv)
VK_KHR_line_rasterization DONE (anv, nvk, radv, tu, v3dv)
VK_KHR_load_store_op_none DONE (anv, nvk, radv, tu, v3dv)
VK_KHR_maintenance5 DONE (anv, lvp, nvk, radv, tu)
@@ -592,7 +592,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_EXT_image_drm_format_modifier DONE (anv, hasvk, radv/gfx9+, tu, v3dv, vn)
VK_EXT_image_sliced_view_of_3d DONE (anv, nvk, radv/gfx10+)
VK_EXT_image_view_min_lod DONE (anv, hasvk, nvk, radv, tu, vn)
VK_EXT_index_type_uint8 DONE (anv, hasvk, nvk, lvp, panvk, radv/gfx8+, tu, v3dv, vn)
VK_EXT_index_type_uint8 DONE (anv, hasvk, nvk, lvp, panvk, pvr, radv/gfx8+, tu, v3dv, vn)
VK_EXT_line_rasterization DONE (anv, hasvk, nvk, lvp, radv, tu, v3dv, vn)
VK_EXT_load_store_op_none DONE (anv, nvk, radv, tu, v3dv, vn)
VK_EXT_memory_budget DONE (anv, hasvk, lvp, nvk, pvr, radv, tu, v3dv, vn)

View File

@@ -2689,7 +2689,8 @@ void pvr_CmdBindIndexBuffer(VkCommandBuffer commandBuffer,
assert(offset < index_buffer->vk.size);
assert(indexType == VK_INDEX_TYPE_UINT32 ||
indexType == VK_INDEX_TYPE_UINT16);
indexType == VK_INDEX_TYPE_UINT16 ||
indexType == VK_INDEX_TYPE_UINT8_KHR);
PVR_CHECK_COMMAND_BUFFER_BUILDING_STATE(cmd_buffer);
@@ -6184,22 +6185,8 @@ static void pvr_emit_dirty_vdm_state(struct pvr_cmd_buffer *const cmd_buffer,
if (header.cut_index_present) {
pvr_csb_emit (csb, VDMCTRL_VDM_STATE1, state1) {
switch (state->index_buffer_binding.type) {
case VK_INDEX_TYPE_UINT32:
/* FIXME: Defines for these? These seem to come from the Vulkan
* spec. for VkPipelineInputAssemblyStateCreateInfo
* primitiveRestartEnable.
*/
state1.cut_index = 0xFFFFFFFF;
break;
case VK_INDEX_TYPE_UINT16:
state1.cut_index = 0xFFFF;
break;
default:
unreachable("Invalid index type");
}
state1.cut_index =
vk_index_to_restart(state->index_buffer_binding.type);
}
}
@@ -6683,20 +6670,9 @@ static void pvr_emit_vdm_index_list(struct pvr_cmd_buffer *cmd_buffer,
list_hdr.index_offset_present = true;
if (state->draw_state.draw_indexed) {
switch (state->index_buffer_binding.type) {
case VK_INDEX_TYPE_UINT32:
list_hdr.index_size = PVRX(VDMCTRL_INDEX_SIZE_B32);
index_stride = 4;
break;
case VK_INDEX_TYPE_UINT16:
list_hdr.index_size = PVRX(VDMCTRL_INDEX_SIZE_B16);
index_stride = 2;
break;
default:
unreachable("Invalid index type");
}
list_hdr.index_size =
pvr_vdmctrl_index_size_from_type(state->index_buffer_binding.type);
index_stride = vk_index_type_to_bytes(state->index_buffer_binding.type);
index_buffer_addr = PVR_DEV_ADDR_OFFSET(
state->index_buffer_binding.buffer->dev_addr,

View File

@@ -247,4 +247,19 @@ pvr_vdmctrl_index_size_nr_bytes(enum PVRX(VDMCTRL_INDEX_SIZE) index_size)
}
}
static enum PVRX(VDMCTRL_INDEX_SIZE)
pvr_vdmctrl_index_size_from_type(VkIndexType type)
{
switch (type) {
case VK_INDEX_TYPE_UINT32:
return PVRX(VDMCTRL_INDEX_SIZE_B32);
case VK_INDEX_TYPE_UINT16:
return PVRX(VDMCTRL_INDEX_SIZE_B16);
case VK_INDEX_TYPE_UINT8_KHR:
return PVRX(VDMCTRL_INDEX_SIZE_B8);
default:
unreachable("Invalid index type");
}
}
#endif /* PVR_CSB_ENUM_HELPERS_H */

View File

@@ -183,12 +183,14 @@ static void pvr_physical_device_get_supported_extensions(
.KHR_external_semaphore_fd = PVR_USE_WSI_PLATFORM,
.KHR_get_memory_requirements2 = true,
.KHR_image_format_list = true,
.KHR_index_type_uint8 = true,
.KHR_shader_expect_assume = true,
.KHR_swapchain = PVR_USE_WSI_PLATFORM,
.KHR_timeline_semaphore = true,
.KHR_uniform_buffer_standard_layout = true,
.EXT_external_memory_dma_buf = true,
.EXT_host_query_reset = true,
.EXT_index_type_uint8 = true,
.EXT_memory_budget = true,
.EXT_private_data = true,
.EXT_scalar_block_layout = true,
@@ -259,6 +261,9 @@ static void pvr_physical_device_get_supported_features(
.variableMultisampleRate = false,
.inheritedQueries = false,
/* VK_KHR_index_type_uint8 */
.indexTypeUint8 = true,
/* Vulkan 1.2 / VK_KHR_timeline_semaphore */
.timelineSemaphore = true,