mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 15:10:12 +01:00
v3dv: vkCmdWaitEvents2 takes an array of VkDependencyInfo
We have been incorrectly assuming there was just one for all the
events, apparently CTS never uses more than one event.
Fixes: e6884df088 ('v3dv: fix event synchronization')
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19518>
This commit is contained in:
parent
dc08875415
commit
36ef75b6eb
1 changed files with 46 additions and 42 deletions
|
|
@ -685,47 +685,51 @@ v3dv_CmdWaitEvents2(VkCommandBuffer commandBuffer,
|
|||
/* We need to add the compute stage to the srcStageMask of all dependencies,
|
||||
* so let's go ahead and patch the dependency info we receive.
|
||||
*/
|
||||
uint32_t memory_barrier_count = pDependencyInfo->memoryBarrierCount;
|
||||
VkMemoryBarrier2 *memory_barriers = memory_barrier_count ?
|
||||
malloc(memory_barrier_count * sizeof(memory_barriers[0])): NULL;
|
||||
for (int i = 0; i < memory_barrier_count; i++) {
|
||||
memory_barriers[i] = pDependencyInfo->pMemoryBarriers[i];
|
||||
memory_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
|
||||
for (int e = 0; e < eventCount; e++) {
|
||||
const VkDependencyInfo *info = &pDependencyInfo[e];
|
||||
|
||||
uint32_t memory_barrier_count = info->memoryBarrierCount;
|
||||
VkMemoryBarrier2 *memory_barriers = memory_barrier_count ?
|
||||
malloc(memory_barrier_count * sizeof(memory_barriers[0])): NULL;
|
||||
for (int i = 0; i < memory_barrier_count; i++) {
|
||||
memory_barriers[i] = info->pMemoryBarriers[i];
|
||||
memory_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
|
||||
}
|
||||
|
||||
uint32_t buffer_barrier_count = info->bufferMemoryBarrierCount;
|
||||
VkBufferMemoryBarrier2 *buffer_barriers = buffer_barrier_count ?
|
||||
malloc(buffer_barrier_count * sizeof(buffer_barriers[0])): NULL;
|
||||
for (int i = 0; i < buffer_barrier_count; i++) {
|
||||
buffer_barriers[i] = info->pBufferMemoryBarriers[i];
|
||||
buffer_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
|
||||
}
|
||||
|
||||
uint32_t image_barrier_count = info->imageMemoryBarrierCount;
|
||||
VkImageMemoryBarrier2 *image_barriers = image_barrier_count ?
|
||||
malloc(image_barrier_count * sizeof(image_barriers[0])): NULL;
|
||||
for (int i = 0; i < image_barrier_count; i++) {
|
||||
image_barriers[i] = info->pImageMemoryBarriers[i];
|
||||
image_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
|
||||
}
|
||||
|
||||
VkDependencyInfo new_info = {
|
||||
.sType = info->sType,
|
||||
.dependencyFlags = info->dependencyFlags,
|
||||
.memoryBarrierCount = memory_barrier_count,
|
||||
.pMemoryBarriers = memory_barriers,
|
||||
.bufferMemoryBarrierCount = buffer_barrier_count,
|
||||
.pBufferMemoryBarriers = buffer_barriers,
|
||||
.imageMemoryBarrierCount = image_barrier_count,
|
||||
.pImageMemoryBarriers = image_barriers,
|
||||
};
|
||||
|
||||
v3dv_cmd_buffer_emit_pipeline_barrier(cmd_buffer, &new_info);
|
||||
|
||||
if (memory_barriers)
|
||||
free(memory_barriers);
|
||||
if (buffer_barriers)
|
||||
free(buffer_barriers);
|
||||
if (image_barriers)
|
||||
free(image_barriers);
|
||||
}
|
||||
|
||||
uint32_t buffer_barrier_count = pDependencyInfo->bufferMemoryBarrierCount;
|
||||
VkBufferMemoryBarrier2 *buffer_barriers = buffer_barrier_count ?
|
||||
malloc(buffer_barrier_count * sizeof(buffer_barriers[0])): NULL;
|
||||
for (int i = 0; i < buffer_barrier_count; i++) {
|
||||
buffer_barriers[i] = pDependencyInfo->pBufferMemoryBarriers[i];
|
||||
buffer_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
|
||||
}
|
||||
|
||||
uint32_t image_barrier_count = pDependencyInfo->imageMemoryBarrierCount;
|
||||
VkImageMemoryBarrier2 *image_barriers = image_barrier_count ?
|
||||
malloc(image_barrier_count * sizeof(image_barriers[0])): NULL;
|
||||
for (int i = 0; i < image_barrier_count; i++) {
|
||||
image_barriers[i] = pDependencyInfo->pImageMemoryBarriers[i];
|
||||
image_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
|
||||
}
|
||||
|
||||
VkDependencyInfo info = {
|
||||
.sType = pDependencyInfo->sType,
|
||||
.dependencyFlags = pDependencyInfo->dependencyFlags,
|
||||
.memoryBarrierCount = memory_barrier_count,
|
||||
.pMemoryBarriers = memory_barriers,
|
||||
.bufferMemoryBarrierCount = buffer_barrier_count,
|
||||
.pBufferMemoryBarriers = buffer_barriers,
|
||||
.imageMemoryBarrierCount = image_barrier_count,
|
||||
.pImageMemoryBarriers = image_barriers,
|
||||
};
|
||||
|
||||
v3dv_cmd_buffer_emit_pipeline_barrier(cmd_buffer, &info);
|
||||
|
||||
if (memory_barriers)
|
||||
free(memory_barriers);
|
||||
if (buffer_barriers)
|
||||
free(buffer_barriers);
|
||||
if (image_barriers)
|
||||
free(image_barriers);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue