tu: Implement buffer_write_cp

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28447>
This commit is contained in:
Connor Abbott 2024-03-27 15:25:14 -04:00 committed by Marge Bot
parent 7073a8d458
commit 24a1d54502
3 changed files with 34 additions and 0 deletions

View file

@ -7260,3 +7260,29 @@ tu_CmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer,
tu_flush_for_access(cache, TU_ACCESS_CP_WRITE, TU_ACCESS_NONE);
}
TU_GENX(tu_CmdWriteBufferMarker2AMD);
void
tu_write_buffer_cp(VkCommandBuffer commandBuffer,
VkDeviceAddress addr,
void *data, uint32_t size)
{
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
TU_CALLX(cmd->device, tu_emit_cache_flush)(cmd);
struct tu_cs *cs = &cmd->cs;
tu_cs_emit_pkt7(cs, CP_MEM_WRITE, 2 + size / 4);
tu_cs_emit_qw(cs, addr);
tu_cs_emit_array(cs, (uint32_t *)data, size / 4);
}
void
tu_flush_buffer_write_cp(VkCommandBuffer commandBuffer)
{
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
struct tu_cache_state *cache = &cmd->state.cache;
tu_flush_for_access(cache, TU_ACCESS_CP_WRITE, (enum tu_cmd_access_mask)0);
}

View file

@ -683,6 +683,12 @@ tu_restore_suspended_pass(struct tu_cmd_buffer *cmd,
template <chip CHIP>
void tu_cmd_render(struct tu_cmd_buffer *cmd);
void tu_write_buffer_cp(VkCommandBuffer commandBuffer,
VkDeviceAddress addr,
void *data, uint32_t size);
void tu_flush_buffer_write_cp(VkCommandBuffer commandBuffer);
enum fd_gpu_event : uint32_t;
template <chip CHIP>

View file

@ -2707,6 +2707,8 @@ tu_CreateDevice(VkPhysicalDevice physicalDevice,
fd_rd_output_init(&device->rd_output, output_name);
}
device->vk.write_buffer_cp = tu_write_buffer_cp;
device->vk.flush_buffer_write_cp = tu_flush_buffer_write_cp;
device->vk.cmd_fill_buffer_addr = tu_cmd_fill_buffer_addr;
*pDevice = tu_device_to_handle(device);