lavapipe: maint6

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26881>
This commit is contained in:
Mike Blumenkrantz
2023-09-12 12:51:01 -04:00
committed by Marge Bot
parent 89a7ee7393
commit ec656e1984
3 changed files with 35 additions and 7 deletions

View File

@@ -521,6 +521,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_KHR_global_priority DONE (radv, tu)
VK_KHR_incremental_present DONE (anv, hasvk, lvp, radv, tu, v3dv, vn)
VK_KHR_maintenance5 DONE (anv, lvp, radv, tu)
VK_KHR_maintenance6 DONE (lvp)
VK_KHR_performance_query DONE (anv/gen8+, radv/gfx10.3+, tu, v3dv)
VK_KHR_pipeline_executable_properties DONE (anv, nvk, hasvk, radv, tu, v3dv)
VK_KHR_pipeline_library DONE (anv, lvp, radv, tu, vn)

View File

@@ -123,6 +123,7 @@ static const struct vk_device_extension_table lvp_device_extensions_supported =
.KHR_maintenance3 = true,
.KHR_maintenance4 = true,
.KHR_maintenance5 = true,
.KHR_maintenance6 = true,
.KHR_map_memory2 = true,
.KHR_multiview = true,
.KHR_push_descriptor = true,
@@ -603,6 +604,9 @@ lvp_get_features(const struct lvp_physical_device *pdevice,
/* VK_EXT_ycbcr_image_arrays */
.ycbcrImageArrays = true,
/* maintenance6 */
.maintenance6 = true,
/* VK_AMDX_shader_enqueue */
#ifdef VK_ENABLE_BETA_EXTENSIONS
.shaderEnqueue = true,
@@ -910,6 +914,9 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie
.nonStrictSinglePixelWideLinesUseParallelogram = false,
.nonStrictWideLinesUseParallelogram = false,
/* maintenance6 */
.maxCombinedImageSamplerDescriptorCount = 3,
/* VK_EXT_extended_dynamic_state3 */
.dynamicPrimitiveTopologyUnrestricted = VK_TRUE,
@@ -1061,6 +1068,9 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie
else
p->maxVertexAttribDivisor = 1;
/* maintenance6 */
p->blockTexelViewCompatibleMultipleLayers = true,
/* VK_EXT_shader_object */
/* this is basically unsupported */
lvp_device_get_cache_uuid(p->shaderBinaryUUID);
@@ -2001,6 +2011,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindBufferMemory2(VkDevice _device,
for (uint32_t i = 0; i < bindInfoCount; ++i) {
LVP_FROM_HANDLE(lvp_device_memory, mem, pBindInfos[i].memory);
LVP_FROM_HANDLE(lvp_buffer, buffer, pBindInfos[i].buffer);
VkBindMemoryStatusKHR *status = (void*)vk_find_struct_const(&pBindInfos[i], BIND_MEMORY_STATUS_KHR);
buffer->pmem = mem->pmem;
buffer->offset = pBindInfos[i].memoryOffset;
@@ -2008,6 +2019,8 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindBufferMemory2(VkDevice _device,
buffer->bo,
mem->pmem,
pBindInfos[i].memoryOffset);
if (status)
*status->pResult = VK_SUCCESS;
}
return VK_SUCCESS;
}
@@ -2042,10 +2055,12 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindImageMemory2(VkDevice _device,
const VkBindImageMemoryInfo *pBindInfos)
{
LVP_FROM_HANDLE(lvp_device, device, _device);
VkResult res = VK_SUCCESS;
for (uint32_t i = 0; i < bindInfoCount; ++i) {
const VkBindImageMemoryInfo *bind_info = &pBindInfos[i];
LVP_FROM_HANDLE(lvp_device_memory, mem, bind_info->memory);
LVP_FROM_HANDLE(lvp_image, image, bind_info->image);
VkBindMemoryStatusKHR *status = (void*)vk_find_struct_const(&pBindInfos[i], BIND_MEMORY_STATUS_KHR);
bool did_bind = false;
vk_foreach_struct_const(s, bind_info->pNext) {
@@ -2064,6 +2079,8 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindImageMemory2(VkDevice _device,
image->planes[0].pmem,
image->planes[0].memory_offset);
did_bind = true;
if (status)
*status->pResult = VK_SUCCESS;
break;
}
default:
@@ -2080,19 +2097,26 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindImageMemory2(VkDevice _device,
uint8_t plane = lvp_image_aspects_to_plane(image, plane_info->planeAspect);
result = lvp_image_plane_bind(device, &image->planes[plane],
mem, bind_info->memoryOffset, &offset_B);
if (status)
*status->pResult = result;
if (result != VK_SUCCESS)
return result;
} else {
VkResult fail = VK_SUCCESS;
for (unsigned plane = 0; plane < image->plane_count; plane++) {
result = lvp_image_plane_bind(device, &image->planes[plane],
mem, bind_info->memoryOffset, &offset_B);
if (status)
*status->pResult = res;
if (result != VK_SUCCESS)
return result;
fail = result;
}
if (fail != VK_SUCCESS)
return fail;
}
}
}
}
return VK_SUCCESS;
return res;
}
#ifdef PIPE_MEMORY_FD

View File

@@ -2638,13 +2638,15 @@ static void handle_index_buffer2(struct vk_cmd_queue_entry *cmd,
struct rendering_state *state)
{
struct vk_cmd_bind_index_buffer2_khr *ib = &cmd->u.bind_index_buffer2_khr;
state->index_size = vk_index_type_to_bytes(ib->index_type);
state->index_buffer_size = ib->size;
if (ib->buffer) {
state->index_size = vk_index_type_to_bytes(ib->index_type);
state->index_buffer_size = ib->size;
state->index_offset = ib->offset;
state->index_buffer = lvp_buffer_from_handle(ib->buffer)->bo;
} else {
state->index_size = 4;
state->index_buffer_size = sizeof(uint32_t);
state->index_offset = 0;
state->index_buffer = state->device->zero_buffer;
}
@@ -4327,12 +4329,9 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp)
ENQUEUE_CMD(CmdEndQuery)
ENQUEUE_CMD(CmdResetQueryPool)
ENQUEUE_CMD(CmdCopyQueryPoolResults)
// ENQUEUE_CMD(CmdPushConstants2KHR)
ENQUEUE_CMD(CmdExecuteCommands)
ENQUEUE_CMD(CmdDrawIndirectCount)
ENQUEUE_CMD(CmdDrawIndexedIndirectCount)
ENQUEUE_CMD(CmdPushDescriptorSet2KHR)
// ENQUEUE_CMD(CmdPushDescriptorSetWithTemplateKHR)
ENQUEUE_CMD(CmdBindTransformFeedbackBuffersEXT)
ENQUEUE_CMD(CmdBeginTransformFeedbackEXT)
ENQUEUE_CMD(CmdEndTransformFeedbackEXT)
@@ -4821,6 +4820,10 @@ VkResult lvp_execute_cmds(struct lvp_device *device,
state->rs_state.no_ms_sample_mask_out = true;
state->blend_state.independent_blend_enable = true;
state->index_size = 4;
state->index_buffer_size = sizeof(uint32_t);
state->index_buffer = state->device->zero_buffer;
/* create a gallium context */
lvp_execute_cmd_buffer(&cmd_buffer->vk.cmd_queue.cmds, state, device->print_cmds);