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:
@@ -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_get_surface_capabilities2 DONE (anv, lvp, nvk, pvr, radv, tu, v3dv, vn)
|
||||||
VK_KHR_global_priority DONE (anv, radv, tu)
|
VK_KHR_global_priority DONE (anv, radv, tu)
|
||||||
VK_KHR_incremental_present DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn)
|
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_line_rasterization DONE (anv, nvk, radv, tu, v3dv)
|
||||||
VK_KHR_load_store_op_none 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)
|
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_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_sliced_view_of_3d DONE (anv, nvk, radv/gfx10+)
|
||||||
VK_EXT_image_view_min_lod DONE (anv, hasvk, nvk, radv, tu, vn)
|
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_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_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)
|
VK_EXT_memory_budget DONE (anv, hasvk, lvp, nvk, pvr, radv, tu, v3dv, vn)
|
||||||
|
@@ -2689,7 +2689,8 @@ void pvr_CmdBindIndexBuffer(VkCommandBuffer commandBuffer,
|
|||||||
|
|
||||||
assert(offset < index_buffer->vk.size);
|
assert(offset < index_buffer->vk.size);
|
||||||
assert(indexType == VK_INDEX_TYPE_UINT32 ||
|
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);
|
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) {
|
if (header.cut_index_present) {
|
||||||
pvr_csb_emit (csb, VDMCTRL_VDM_STATE1, state1) {
|
pvr_csb_emit (csb, VDMCTRL_VDM_STATE1, state1) {
|
||||||
switch (state->index_buffer_binding.type) {
|
state1.cut_index =
|
||||||
case VK_INDEX_TYPE_UINT32:
|
vk_index_to_restart(state->index_buffer_binding.type);
|
||||||
/* 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");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6683,20 +6670,9 @@ static void pvr_emit_vdm_index_list(struct pvr_cmd_buffer *cmd_buffer,
|
|||||||
list_hdr.index_offset_present = true;
|
list_hdr.index_offset_present = true;
|
||||||
|
|
||||||
if (state->draw_state.draw_indexed) {
|
if (state->draw_state.draw_indexed) {
|
||||||
switch (state->index_buffer_binding.type) {
|
list_hdr.index_size =
|
||||||
case VK_INDEX_TYPE_UINT32:
|
pvr_vdmctrl_index_size_from_type(state->index_buffer_binding.type);
|
||||||
list_hdr.index_size = PVRX(VDMCTRL_INDEX_SIZE_B32);
|
index_stride = vk_index_type_to_bytes(state->index_buffer_binding.type);
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
index_buffer_addr = PVR_DEV_ADDR_OFFSET(
|
index_buffer_addr = PVR_DEV_ADDR_OFFSET(
|
||||||
state->index_buffer_binding.buffer->dev_addr,
|
state->index_buffer_binding.buffer->dev_addr,
|
||||||
|
@@ -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 */
|
#endif /* PVR_CSB_ENUM_HELPERS_H */
|
||||||
|
@@ -183,12 +183,14 @@ static void pvr_physical_device_get_supported_extensions(
|
|||||||
.KHR_external_semaphore_fd = PVR_USE_WSI_PLATFORM,
|
.KHR_external_semaphore_fd = PVR_USE_WSI_PLATFORM,
|
||||||
.KHR_get_memory_requirements2 = true,
|
.KHR_get_memory_requirements2 = true,
|
||||||
.KHR_image_format_list = true,
|
.KHR_image_format_list = true,
|
||||||
|
.KHR_index_type_uint8 = true,
|
||||||
.KHR_shader_expect_assume = true,
|
.KHR_shader_expect_assume = true,
|
||||||
.KHR_swapchain = PVR_USE_WSI_PLATFORM,
|
.KHR_swapchain = PVR_USE_WSI_PLATFORM,
|
||||||
.KHR_timeline_semaphore = true,
|
.KHR_timeline_semaphore = true,
|
||||||
.KHR_uniform_buffer_standard_layout = true,
|
.KHR_uniform_buffer_standard_layout = true,
|
||||||
.EXT_external_memory_dma_buf = true,
|
.EXT_external_memory_dma_buf = true,
|
||||||
.EXT_host_query_reset = true,
|
.EXT_host_query_reset = true,
|
||||||
|
.EXT_index_type_uint8 = true,
|
||||||
.EXT_memory_budget = true,
|
.EXT_memory_budget = true,
|
||||||
.EXT_private_data = true,
|
.EXT_private_data = true,
|
||||||
.EXT_scalar_block_layout = true,
|
.EXT_scalar_block_layout = true,
|
||||||
@@ -259,6 +261,9 @@ static void pvr_physical_device_get_supported_features(
|
|||||||
.variableMultisampleRate = false,
|
.variableMultisampleRate = false,
|
||||||
.inheritedQueries = false,
|
.inheritedQueries = false,
|
||||||
|
|
||||||
|
/* VK_KHR_index_type_uint8 */
|
||||||
|
.indexTypeUint8 = true,
|
||||||
|
|
||||||
/* Vulkan 1.2 / VK_KHR_timeline_semaphore */
|
/* Vulkan 1.2 / VK_KHR_timeline_semaphore */
|
||||||
.timelineSemaphore = true,
|
.timelineSemaphore = true,
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user