Lines Matching refs:cmd_buffer

116 cmd_buffer_init(struct v3dv_cmd_buffer *cmd_buffer,  in cmd_buffer_init()  argument
126 uint8_t *cmd_buffer_driver_start = ((uint8_t *) cmd_buffer) + base_size; in cmd_buffer_init()
127 memset(cmd_buffer_driver_start, 0, sizeof(*cmd_buffer) - base_size); in cmd_buffer_init()
129 cmd_buffer->device = device; in cmd_buffer_init()
130 cmd_buffer->pool = pool; in cmd_buffer_init()
131 cmd_buffer->level = level; in cmd_buffer_init()
133 list_inithead(&cmd_buffer->private_objs); in cmd_buffer_init()
134 list_inithead(&cmd_buffer->jobs); in cmd_buffer_init()
135 list_inithead(&cmd_buffer->list_link); in cmd_buffer_init()
138 list_addtail(&cmd_buffer->pool_link, &pool->cmd_buffers); in cmd_buffer_init()
140 cmd_buffer->state.subpass_idx = -1; in cmd_buffer_init()
141 cmd_buffer->state.meta.subpass_idx = -1; in cmd_buffer_init()
143 cmd_buffer->status = V3DV_CMD_BUFFER_STATUS_INITIALIZED; in cmd_buffer_init()
152 struct v3dv_cmd_buffer *cmd_buffer; in cmd_buffer_create() local
153 cmd_buffer = vk_zalloc2(&device->vk.alloc, in cmd_buffer_create()
155 sizeof(*cmd_buffer), in cmd_buffer_create()
158 if (cmd_buffer == NULL) in cmd_buffer_create()
162 result = vk_command_buffer_init(&cmd_buffer->vk, &device->vk); in cmd_buffer_create()
164 vk_free2(&device->vk.alloc, &pool->alloc, cmd_buffer); in cmd_buffer_create()
168 cmd_buffer_init(cmd_buffer, device, pool, level); in cmd_buffer_create()
170 *pCommandBuffer = v3dv_cmd_buffer_to_handle(cmd_buffer); in cmd_buffer_create()
220 assert(job->cmd_buffer); in job_destroy_gpu_csd_resources()
234 assert(job->cmd_buffer); in job_destroy_cpu_wait_events_resources()
235 vk_free(&job->cmd_buffer->device->vk.alloc, job->cpu.event_wait.events); in job_destroy_cpu_wait_events_resources()
242 assert(job->cmd_buffer); in job_destroy_cpu_csd_indirect_resources()
285 v3dv_cmd_buffer_add_private_obj(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_add_private_obj() argument
290 vk_alloc(&cmd_buffer->device->vk.alloc, sizeof(*pobj), 8, in v3dv_cmd_buffer_add_private_obj()
293 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_add_private_obj()
300 list_addtail(&pobj->list_link, &cmd_buffer->private_objs); in v3dv_cmd_buffer_add_private_obj()
304 cmd_buffer_destroy_private_obj(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_destroy_private_obj() argument
308 pobj->destroy_cb(v3dv_device_to_handle(cmd_buffer->device), in cmd_buffer_destroy_private_obj()
310 &cmd_buffer->device->vk.alloc); in cmd_buffer_destroy_private_obj()
312 vk_free(&cmd_buffer->device->vk.alloc, pobj); in cmd_buffer_destroy_private_obj()
316 cmd_buffer_free_resources(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_free_resources() argument
319 &cmd_buffer->jobs, list_link) { in cmd_buffer_free_resources()
323 if (cmd_buffer->state.job) in cmd_buffer_free_resources()
324 v3dv_job_destroy(cmd_buffer->state.job); in cmd_buffer_free_resources()
326 if (cmd_buffer->state.attachments) in cmd_buffer_free_resources()
327 vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.attachments); in cmd_buffer_free_resources()
329 if (cmd_buffer->state.query.end.alloc_count > 0) in cmd_buffer_free_resources()
330 vk_free(&cmd_buffer->device->vk.alloc, cmd_buffer->state.query.end.states); in cmd_buffer_free_resources()
332 if (cmd_buffer->push_constants_resource.bo) in cmd_buffer_free_resources()
333 v3dv_bo_free(cmd_buffer->device, cmd_buffer->push_constants_resource.bo); in cmd_buffer_free_resources()
336 &cmd_buffer->private_objs, list_link) { in cmd_buffer_free_resources()
337 cmd_buffer_destroy_private_obj(cmd_buffer, pobj); in cmd_buffer_free_resources()
340 if (cmd_buffer->state.meta.attachments) { in cmd_buffer_free_resources()
341 assert(cmd_buffer->state.meta.attachment_alloc_count > 0); in cmd_buffer_free_resources()
342 vk_free(&cmd_buffer->device->vk.alloc, cmd_buffer->state.meta.attachments); in cmd_buffer_free_resources()
347 cmd_buffer_destroy(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_destroy() argument
349 list_del(&cmd_buffer->pool_link); in cmd_buffer_destroy()
350 cmd_buffer_free_resources(cmd_buffer); in cmd_buffer_destroy()
351 vk_command_buffer_finish(&cmd_buffer->vk); in cmd_buffer_destroy()
352 vk_free2(&cmd_buffer->device->vk.alloc, &cmd_buffer->pool->alloc, in cmd_buffer_destroy()
353 cmd_buffer); in cmd_buffer_destroy()
378 cmd_buffer_can_merge_subpass(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_can_merge_subpass() argument
381 const struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in cmd_buffer_can_merge_subpass()
385 &cmd_buffer->device->instance->physicalDevice; in cmd_buffer_can_merge_subpass()
387 if (cmd_buffer->level != VK_COMMAND_BUFFER_LEVEL_PRIMARY) in cmd_buffer_can_merge_subpass()
390 if (!cmd_buffer->state.job) in cmd_buffer_can_merge_subpass()
393 if (cmd_buffer->state.job->always_flush) in cmd_buffer_can_merge_subpass()
611 cmd_buffer_end_render_pass_frame(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_end_render_pass_frame() argument
613 assert(cmd_buffer->state.job); in cmd_buffer_end_render_pass_frame()
623 if (v3dv_cl_offset(&cmd_buffer->state.job->rcl) == 0) in cmd_buffer_end_render_pass_frame()
624 v3dv_X(cmd_buffer->device, cmd_buffer_emit_render_pass_rcl)(cmd_buffer); in cmd_buffer_end_render_pass_frame() local
626 v3dv_X(cmd_buffer->device, job_emit_binning_flush)(cmd_buffer->state.job); in cmd_buffer_end_render_pass_frame()
632 struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_create_cpu_job() argument
639 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_create_cpu_job()
643 v3dv_job_init(job, type, device, cmd_buffer, subpass_idx); in v3dv_cmd_buffer_create_cpu_job()
648 cmd_buffer_add_cpu_jobs_for_pending_state(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_add_cpu_jobs_for_pending_state() argument
650 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in cmd_buffer_add_cpu_jobs_for_pending_state()
657 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in cmd_buffer_add_cpu_jobs_for_pending_state()
659 cmd_buffer, -1); in cmd_buffer_add_cpu_jobs_for_pending_state()
660 v3dv_return_if_oom(cmd_buffer, NULL); in cmd_buffer_add_cpu_jobs_for_pending_state()
663 list_addtail(&job->list_link, &cmd_buffer->jobs); in cmd_buffer_add_cpu_jobs_for_pending_state()
669 v3dv_cmd_buffer_finish_job(struct v3dv_cmd_buffer *cmd_buffer) in v3dv_cmd_buffer_finish_job() argument
671 struct v3dv_job *job = cmd_buffer->state.job; in v3dv_cmd_buffer_finish_job()
675 if (cmd_buffer->state.oom) { in v3dv_cmd_buffer_finish_job()
677 cmd_buffer->state.job = NULL; in v3dv_cmd_buffer_finish_job()
687 assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY || in v3dv_cmd_buffer_finish_job()
695 assert(v3dv_cl_offset(&job->rcl) != 0 || cmd_buffer->state.pass); in v3dv_cmd_buffer_finish_job()
708 if (cmd_buffer->state.pass) { in v3dv_cmd_buffer_finish_job()
710 cmd_buffer_end_render_pass_frame(cmd_buffer); in v3dv_cmd_buffer_finish_job()
713 v3dv_X(cmd_buffer->device, cmd_buffer_end_render_pass_secondary)(cmd_buffer); in v3dv_cmd_buffer_finish_job() local
717 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_cmd_buffer_finish_job()
718 cmd_buffer->state.job = NULL; in v3dv_cmd_buffer_finish_job()
726 if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY || in v3dv_cmd_buffer_finish_job()
727 !cmd_buffer->state.pass) { in v3dv_cmd_buffer_finish_job()
728 cmd_buffer_add_cpu_jobs_for_pending_state(cmd_buffer); in v3dv_cmd_buffer_finish_job()
747 cmd_buffer_serialize_job_if_needed(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_serialize_job_if_needed() argument
750 assert(cmd_buffer && job); in cmd_buffer_serialize_job_if_needed()
752 if (!cmd_buffer->state.has_barrier) in cmd_buffer_serialize_job_if_needed()
762 if (cmd_buffer->state.has_bcl_barrier && in cmd_buffer_serialize_job_if_needed()
768 cmd_buffer->state.has_barrier = false; in cmd_buffer_serialize_job_if_needed()
769 cmd_buffer->state.has_bcl_barrier = false; in cmd_buffer_serialize_job_if_needed()
776 struct v3dv_cmd_buffer *cmd_buffer, in v3dv_job_init() argument
782 assert(!cmd_buffer || cmd_buffer->state.job != job); in v3dv_job_init()
787 job->cmd_buffer = cmd_buffer; in v3dv_job_init()
810 if (cmd_buffer) { in v3dv_job_init()
817 cmd_buffer->state.dirty = ~0; in v3dv_job_init()
818 cmd_buffer->state.dirty_descriptor_stages = ~0; in v3dv_job_init()
821 if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY && in v3dv_job_init()
822 cmd_buffer->state.inheritance.occlusion_query_enable) { in v3dv_job_init()
823 cmd_buffer->state.dirty &= ~V3DV_CMD_DIRTY_OCCLUSION_QUERY; in v3dv_job_init()
830 if (cmd_buffer->state.pass) in v3dv_job_init()
833 cmd_buffer_serialize_job_if_needed(cmd_buffer, job); in v3dv_job_init()
838 v3dv_cmd_buffer_start_job(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_start_job() argument
845 if (cmd_buffer->state.pass && in v3dv_cmd_buffer_start_job()
847 cmd_buffer_can_merge_subpass(cmd_buffer, subpass_idx)) { in v3dv_cmd_buffer_start_job()
848 cmd_buffer->state.job->is_subpass_finish = false; in v3dv_cmd_buffer_start_job()
849 return cmd_buffer->state.job; in v3dv_cmd_buffer_start_job()
853 if (cmd_buffer->state.job != NULL) in v3dv_cmd_buffer_start_job()
854 v3dv_cmd_buffer_finish_job(cmd_buffer); in v3dv_cmd_buffer_start_job()
856 assert(cmd_buffer->state.job == NULL); in v3dv_cmd_buffer_start_job()
857 struct v3dv_job *job = vk_zalloc(&cmd_buffer->device->vk.alloc, in v3dv_cmd_buffer_start_job()
863 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_start_job()
867 v3dv_job_init(job, type, cmd_buffer->device, cmd_buffer, subpass_idx); in v3dv_cmd_buffer_start_job()
868 cmd_buffer->state.job = job; in v3dv_cmd_buffer_start_job()
874 cmd_buffer_reset(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_reset() argument
877 vk_command_buffer_reset(&cmd_buffer->vk); in cmd_buffer_reset()
878 if (cmd_buffer->status != V3DV_CMD_BUFFER_STATUS_INITIALIZED) { in cmd_buffer_reset()
879 struct v3dv_device *device = cmd_buffer->device; in cmd_buffer_reset()
880 struct v3dv_cmd_pool *pool = cmd_buffer->pool; in cmd_buffer_reset()
881 VkCommandBufferLevel level = cmd_buffer->level; in cmd_buffer_reset()
886 list_del(&cmd_buffer->pool_link); in cmd_buffer_reset()
891 if (cmd_buffer->status != V3DV_CMD_BUFFER_STATUS_NEW) in cmd_buffer_reset()
892 cmd_buffer_free_resources(cmd_buffer); in cmd_buffer_reset()
894 cmd_buffer_init(cmd_buffer, device, pool, level); in cmd_buffer_reset()
897 assert(cmd_buffer->status == V3DV_CMD_BUFFER_STATUS_INITIALIZED); in cmd_buffer_reset()
936 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, pCommandBuffers[i]); in v3dv_FreeCommandBuffers()
938 if (!cmd_buffer) in v3dv_FreeCommandBuffers()
941 cmd_buffer_destroy(cmd_buffer); in v3dv_FreeCommandBuffers()
956 list_for_each_entry_safe(struct v3dv_cmd_buffer, cmd_buffer, in v3dv_DestroyCommandPool()
958 cmd_buffer_destroy(cmd_buffer); in v3dv_DestroyCommandPool()
976 cmd_buffer_subpass_handle_pending_resolves(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_subpass_handle_pending_resolves() argument
978 assert(cmd_buffer->state.subpass_idx < cmd_buffer->state.pass->subpass_count); in cmd_buffer_subpass_handle_pending_resolves()
979 const struct v3dv_render_pass *pass = cmd_buffer->state.pass; in cmd_buffer_subpass_handle_pending_resolves()
981 &pass->subpasses[cmd_buffer->state.subpass_idx]; in cmd_buffer_subpass_handle_pending_resolves()
986 struct v3dv_framebuffer *fb = cmd_buffer->state.framebuffer; in cmd_buffer_subpass_handle_pending_resolves()
998 if (cmd_buffer->state.job) in cmd_buffer_subpass_handle_pending_resolves()
999 v3dv_cmd_buffer_finish_job(cmd_buffer); in cmd_buffer_subpass_handle_pending_resolves()
1000 struct v3dv_framebuffer *restore_fb = cmd_buffer->state.framebuffer; in cmd_buffer_subpass_handle_pending_resolves()
1001 struct v3dv_render_pass *restore_pass = cmd_buffer->state.pass; in cmd_buffer_subpass_handle_pending_resolves()
1002 uint32_t restore_subpass_idx = cmd_buffer->state.subpass_idx; in cmd_buffer_subpass_handle_pending_resolves()
1003 cmd_buffer->state.framebuffer = NULL; in cmd_buffer_subpass_handle_pending_resolves()
1004 cmd_buffer->state.pass = NULL; in cmd_buffer_subpass_handle_pending_resolves()
1005 cmd_buffer->state.subpass_idx = -1; in cmd_buffer_subpass_handle_pending_resolves()
1007 VkCommandBuffer cmd_buffer_handle = v3dv_cmd_buffer_to_handle(cmd_buffer); in cmd_buffer_subpass_handle_pending_resolves()
1058 cmd_buffer->state.framebuffer = restore_fb; in cmd_buffer_subpass_handle_pending_resolves()
1059 cmd_buffer->state.pass = restore_pass; in cmd_buffer_subpass_handle_pending_resolves()
1060 cmd_buffer->state.subpass_idx = restore_subpass_idx; in cmd_buffer_subpass_handle_pending_resolves()
1065 struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_begin_render_pass_secondary() argument
1068 assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY); in cmd_buffer_begin_render_pass_secondary()
1069 assert(cmd_buffer->usage_flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT); in cmd_buffer_begin_render_pass_secondary()
1072 cmd_buffer->state.pass = in cmd_buffer_begin_render_pass_secondary()
1074 assert(cmd_buffer->state.pass); in cmd_buffer_begin_render_pass_secondary()
1076 cmd_buffer->state.framebuffer = in cmd_buffer_begin_render_pass_secondary()
1079 assert(inheritance_info->subpass < cmd_buffer->state.pass->subpass_count); in cmd_buffer_begin_render_pass_secondary()
1080 cmd_buffer->state.subpass_idx = inheritance_info->subpass; in cmd_buffer_begin_render_pass_secondary()
1082 cmd_buffer->state.inheritance.occlusion_query_enable = in cmd_buffer_begin_render_pass_secondary()
1089 v3dv_cmd_buffer_start_job(cmd_buffer, inheritance_info->subpass, in cmd_buffer_begin_render_pass_secondary()
1092 v3dv_flag_oom(cmd_buffer, NULL); in cmd_buffer_begin_render_pass_secondary()
1107 const struct v3dv_framebuffer *framebuffer = cmd_buffer->state.framebuffer; in cmd_buffer_begin_render_pass_secondary()
1108 cmd_buffer->state.render_area.offset.x = 0; in cmd_buffer_begin_render_pass_secondary()
1109 cmd_buffer->state.render_area.offset.y = 0; in cmd_buffer_begin_render_pass_secondary()
1110 cmd_buffer->state.render_area.extent.width = in cmd_buffer_begin_render_pass_secondary()
1112 cmd_buffer->state.render_area.extent.height = in cmd_buffer_begin_render_pass_secondary()
1122 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_BeginCommandBuffer()
1128 VkResult result = cmd_buffer_reset(cmd_buffer, 0); in v3dv_BeginCommandBuffer()
1132 assert(cmd_buffer->status == V3DV_CMD_BUFFER_STATUS_INITIALIZED); in v3dv_BeginCommandBuffer()
1134 cmd_buffer->usage_flags = pBeginInfo->flags; in v3dv_BeginCommandBuffer()
1136 if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) { in v3dv_BeginCommandBuffer()
1139 cmd_buffer_begin_render_pass_secondary(cmd_buffer, in v3dv_BeginCommandBuffer()
1146 cmd_buffer->status = V3DV_CMD_BUFFER_STATUS_RECORDING; in v3dv_BeginCommandBuffer()
1155 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_ResetCommandBuffer()
1156 return cmd_buffer_reset(cmd_buffer, flags); in v3dv_ResetCommandBuffer()
1169 list_for_each_entry_safe(struct v3dv_cmd_buffer, cmd_buffer, in v3dv_ResetCommandPool()
1171 cmd_buffer_reset(cmd_buffer, reset_flags); in v3dv_ResetCommandPool()
1178 cmd_buffer_update_tile_alignment(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_update_tile_alignment() argument
1184 assert(cmd_buffer->state.pass); in cmd_buffer_update_tile_alignment()
1185 const VkRect2D *rect = &cmd_buffer->state.render_area; in cmd_buffer_update_tile_alignment()
1190 assert(cmd_buffer->state.framebuffer); in cmd_buffer_update_tile_alignment()
1191 cmd_buffer->state.tile_aligned_render_area = in cmd_buffer_update_tile_alignment()
1192 v3dv_subpass_area_is_tile_aligned(cmd_buffer->device, rect, in cmd_buffer_update_tile_alignment()
1193 cmd_buffer->state.framebuffer, in cmd_buffer_update_tile_alignment()
1194 cmd_buffer->state.pass, in cmd_buffer_update_tile_alignment()
1195 cmd_buffer->state.subpass_idx); in cmd_buffer_update_tile_alignment()
1197 if (!cmd_buffer->state.tile_aligned_render_area) { in cmd_buffer_update_tile_alignment()
1200 cmd_buffer->state.subpass_idx, cmd_buffer->state.pass); in cmd_buffer_update_tile_alignment()
1205 cmd_buffer_state_set_attachment_clear_color(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_state_set_attachment_clear_color() argument
1209 assert(attachment_idx < cmd_buffer->state.pass->attachment_count); in cmd_buffer_state_set_attachment_clear_color()
1212 &cmd_buffer->state.pass->attachments[attachment_idx]; in cmd_buffer_state_set_attachment_clear_color()
1216 v3dv_X(cmd_buffer->device, get_format)(attachment->desc.format); in cmd_buffer_state_set_attachment_clear_color()
1218 v3dv_X(cmd_buffer->device, get_internal_type_bpp_for_output_format) in cmd_buffer_state_set_attachment_clear_color()
1224 &cmd_buffer->state.attachments[attachment_idx]; in cmd_buffer_state_set_attachment_clear_color()
1226 v3dv_X(cmd_buffer->device, get_hw_clear_color) in cmd_buffer_state_set_attachment_clear_color()
1234 struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_state_set_attachment_clear_depth_stencil() argument
1240 &cmd_buffer->state.attachments[attachment_idx]; in cmd_buffer_state_set_attachment_clear_depth_stencil()
1252 cmd_buffer_state_set_clear_values(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_state_set_clear_values() argument
1255 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in cmd_buffer_state_set_clear_values()
1273 cmd_buffer_state_set_attachment_clear_color(cmd_buffer, i, in cmd_buffer_state_set_clear_values()
1278 cmd_buffer, i, in cmd_buffer_state_set_clear_values()
1287 cmd_buffer_init_render_pass_attachment_state(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_init_render_pass_attachment_state() argument
1290 cmd_buffer_state_set_clear_values(cmd_buffer, in cmd_buffer_init_render_pass_attachment_state()
1296 cmd_buffer_ensure_render_pass_attachment_state(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_ensure_render_pass_attachment_state() argument
1298 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in cmd_buffer_ensure_render_pass_attachment_state()
1304 vk_free(&cmd_buffer->device->vk.alloc, state->attachments); in cmd_buffer_ensure_render_pass_attachment_state()
1309 state->attachments = vk_zalloc(&cmd_buffer->device->vk.alloc, size, 8, in cmd_buffer_ensure_render_pass_attachment_state()
1312 v3dv_flag_oom(cmd_buffer, NULL); in cmd_buffer_ensure_render_pass_attachment_state()
1326 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdBeginRenderPass()
1330 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdBeginRenderPass()
1334 cmd_buffer_ensure_render_pass_attachment_state(cmd_buffer); in v3dv_CmdBeginRenderPass()
1335 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_CmdBeginRenderPass()
1337 cmd_buffer_init_render_pass_attachment_state(cmd_buffer, pRenderPassBegin); in v3dv_CmdBeginRenderPass()
1358 v3dv_cmd_buffer_subpass_start(cmd_buffer, 0); in v3dv_CmdBeginRenderPass()
1364 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdNextSubpass()
1366 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdNextSubpass()
1370 v3dv_cmd_buffer_subpass_finish(cmd_buffer); in v3dv_CmdNextSubpass()
1371 cmd_buffer_subpass_handle_pending_resolves(cmd_buffer); in v3dv_CmdNextSubpass()
1374 v3dv_cmd_buffer_subpass_start(cmd_buffer, state->subpass_idx + 1); in v3dv_CmdNextSubpass()
1378 cmd_buffer_emit_subpass_clears(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_emit_subpass_clears() argument
1380 assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY); in cmd_buffer_emit_subpass_clears()
1382 assert(cmd_buffer->state.pass); in cmd_buffer_emit_subpass_clears()
1383 assert(cmd_buffer->state.subpass_idx < cmd_buffer->state.pass->subpass_count); in cmd_buffer_emit_subpass_clears()
1384 const struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in cmd_buffer_emit_subpass_clears()
1391 if (cmd_buffer->state.tile_aligned_render_area && in cmd_buffer_emit_subpass_clears()
1403 if (!cmd_buffer->state.tile_aligned_render_area) { in cmd_buffer_emit_subpass_clears()
1430 (cmd_buffer->state.tile_aligned_render_area && in cmd_buffer_emit_subpass_clears()
1435 (cmd_buffer->state.tile_aligned_render_area && in cmd_buffer_emit_subpass_clears()
1452 if (!cmd_buffer->state.tile_aligned_render_area) { in cmd_buffer_emit_subpass_clears()
1473 VkCommandBuffer _cmd_buffer = v3dv_cmd_buffer_to_handle(cmd_buffer); in cmd_buffer_emit_subpass_clears()
1483 cmd_buffer_subpass_create_job(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_subpass_create_job() argument
1490 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in cmd_buffer_subpass_create_job()
1498 v3dv_cmd_buffer_start_job(cmd_buffer, subpass_idx, type); in cmd_buffer_subpass_create_job()
1551 v3dv_cmd_buffer_subpass_start(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_subpass_start() argument
1554 assert(cmd_buffer->state.pass); in v3dv_cmd_buffer_subpass_start()
1555 assert(subpass_idx < cmd_buffer->state.pass->subpass_count); in v3dv_cmd_buffer_subpass_start()
1558 cmd_buffer_subpass_create_job(cmd_buffer, subpass_idx, in v3dv_cmd_buffer_subpass_start()
1567 cmd_buffer_update_tile_alignment(cmd_buffer); in v3dv_cmd_buffer_subpass_start()
1580 if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) in v3dv_cmd_buffer_subpass_start()
1581 cmd_buffer_emit_subpass_clears(cmd_buffer); in v3dv_cmd_buffer_subpass_start()
1587 v3dv_cmd_buffer_subpass_resume(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_subpass_resume() argument
1590 assert(cmd_buffer->state.pass); in v3dv_cmd_buffer_subpass_resume()
1591 assert(subpass_idx < cmd_buffer->state.pass->subpass_count); in v3dv_cmd_buffer_subpass_resume()
1594 if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) { in v3dv_cmd_buffer_subpass_resume()
1595 job = cmd_buffer_subpass_create_job(cmd_buffer, subpass_idx, in v3dv_cmd_buffer_subpass_resume()
1598 assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY); in v3dv_cmd_buffer_subpass_resume()
1599 job = cmd_buffer_subpass_create_job(cmd_buffer, subpass_idx, in v3dv_cmd_buffer_subpass_resume()
1612 v3dv_cmd_buffer_subpass_finish(struct v3dv_cmd_buffer *cmd_buffer) in v3dv_cmd_buffer_subpass_finish() argument
1619 struct v3dv_job *job = cmd_buffer->state.job; in v3dv_cmd_buffer_subpass_finish()
1627 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdEndRenderPass()
1630 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdEndRenderPass()
1632 v3dv_cmd_buffer_subpass_finish(cmd_buffer); in v3dv_CmdEndRenderPass()
1633 v3dv_cmd_buffer_finish_job(cmd_buffer); in v3dv_CmdEndRenderPass()
1635 cmd_buffer_subpass_handle_pending_resolves(cmd_buffer); in v3dv_CmdEndRenderPass()
1646 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_EndCommandBuffer()
1648 if (cmd_buffer->state.oom) in v3dv_EndCommandBuffer()
1658 if (cmd_buffer->state.job) { in v3dv_EndCommandBuffer()
1659 assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY && in v3dv_EndCommandBuffer()
1660 cmd_buffer->state.pass); in v3dv_EndCommandBuffer()
1661 v3dv_cmd_buffer_finish_job(cmd_buffer); in v3dv_EndCommandBuffer()
1664 cmd_buffer->status = V3DV_CMD_BUFFER_STATUS_EXECUTABLE; in v3dv_EndCommandBuffer()
1670 clone_bo_list(struct v3dv_cmd_buffer *cmd_buffer, in clone_bo_list() argument
1674 assert(cmd_buffer); in clone_bo_list()
1679 vk_alloc(&cmd_buffer->device->vk.alloc, sizeof(struct v3dv_bo), 8, in clone_bo_list()
1682 v3dv_flag_oom(cmd_buffer, NULL); in clone_bo_list()
1699 struct v3dv_cmd_buffer *cmd_buffer) in v3dv_job_clone_in_cmd_buffer() argument
1705 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_job_clone_in_cmd_buffer()
1712 clone_job->cmd_buffer = cmd_buffer; in v3dv_job_clone_in_cmd_buffer()
1713 list_addtail(&clone_job->list_link, &cmd_buffer->jobs); in v3dv_job_clone_in_cmd_buffer()
1719 clone_bo_list(cmd_buffer, &clone_job->bcl.bo_list, &job->bcl.bo_list); in v3dv_job_clone_in_cmd_buffer()
1720 clone_bo_list(cmd_buffer, &clone_job->rcl.bo_list, &job->rcl.bo_list); in v3dv_job_clone_in_cmd_buffer()
1721 clone_bo_list(cmd_buffer, &clone_job->indirect.bo_list, in v3dv_job_clone_in_cmd_buffer()
1807 cmd_buffer_bind_pipeline_static_state(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_bind_pipeline_static_state() argument
1810 struct v3dv_dynamic_state *dest = &cmd_buffer->state.dynamic; in cmd_buffer_bind_pipeline_static_state()
1894 cmd_buffer->state.dynamic.mask = dynamic_mask; in cmd_buffer_bind_pipeline_static_state()
1895 cmd_buffer->state.dirty |= dirty; in cmd_buffer_bind_pipeline_static_state()
1899 bind_graphics_pipeline(struct v3dv_cmd_buffer *cmd_buffer, in bind_graphics_pipeline() argument
1903 if (cmd_buffer->state.gfx.pipeline == pipeline) in bind_graphics_pipeline()
1906 cmd_buffer->state.gfx.pipeline = pipeline; in bind_graphics_pipeline()
1908 cmd_buffer_bind_pipeline_static_state(cmd_buffer, &pipeline->dynamic_state); in bind_graphics_pipeline()
1910 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_PIPELINE; in bind_graphics_pipeline()
1914 bind_compute_pipeline(struct v3dv_cmd_buffer *cmd_buffer, in bind_compute_pipeline() argument
1919 if (cmd_buffer->state.compute.pipeline == pipeline) in bind_compute_pipeline()
1922 cmd_buffer->state.compute.pipeline = pipeline; in bind_compute_pipeline()
1923 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_COMPUTE_PIPELINE; in bind_compute_pipeline()
1931 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdBindPipeline()
1936 bind_compute_pipeline(cmd_buffer, pipeline); in v3dv_CmdBindPipeline()
1940 bind_graphics_pipeline(cmd_buffer, pipeline); in v3dv_CmdBindPipeline()
1988 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetViewport()
1989 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdSetViewport()
2012 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_VIEWPORT; in v3dv_CmdSetViewport()
2021 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetScissor()
2022 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdSetScissor()
2039 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_SCISSOR; in v3dv_CmdSetScissor()
2043 emit_scissor(struct v3dv_cmd_buffer *cmd_buffer) in emit_scissor() argument
2045 if (cmd_buffer->state.dynamic.viewport.count == 0) in emit_scissor()
2048 struct v3dv_dynamic_state *dynamic = &cmd_buffer->state.dynamic; in emit_scissor()
2081 minx = MAX2(vp_minx, cmd_buffer->state.render_area.offset.x); in emit_scissor()
2082 miny = MAX2(vp_miny, cmd_buffer->state.render_area.offset.y); in emit_scissor()
2083 maxx = MIN2(vp_maxx, cmd_buffer->state.render_area.offset.x + in emit_scissor()
2084 cmd_buffer->state.render_area.extent.width); in emit_scissor()
2085 maxy = MIN2(vp_maxy, cmd_buffer->state.render_area.offset.y + in emit_scissor()
2086 cmd_buffer->state.render_area.extent.height); in emit_scissor()
2114 cmd_buffer->state.clip_window.offset.x = minx; in emit_scissor()
2115 cmd_buffer->state.clip_window.offset.y = miny; in emit_scissor()
2116 cmd_buffer->state.clip_window.extent.width = maxx - minx; in emit_scissor()
2117 cmd_buffer->state.clip_window.extent.height = maxy - miny; in emit_scissor()
2119 v3dv_X(cmd_buffer->device, job_emit_clip_window) in emit_scissor()
2120 (cmd_buffer->state.job, &cmd_buffer->state.clip_window); in emit_scissor()
2122 cmd_buffer->state.dirty &= ~V3DV_CMD_DIRTY_SCISSOR; in emit_scissor()
2126 update_gfx_uniform_state(struct v3dv_cmd_buffer *cmd_buffer, in update_gfx_uniform_state() argument
2136 struct v3dv_pipeline *pipeline = cmd_buffer->state.gfx.pipeline; in update_gfx_uniform_state()
2148 (cmd_buffer->state.dirty_descriptor_stages & VK_SHADER_STAGE_FRAGMENT_BIT); in update_gfx_uniform_state()
2152 (cmd_buffer->state.dirty_push_constants_stages & VK_SHADER_STAGE_FRAGMENT_BIT); in update_gfx_uniform_state()
2164 cmd_buffer->state.uniforms.fs = in update_gfx_uniform_state()
2165 v3dv_write_uniforms(cmd_buffer, pipeline, fs_variant); in update_gfx_uniform_state()
2172 (cmd_buffer->state.dirty_descriptor_stages & in update_gfx_uniform_state()
2177 (cmd_buffer->state.dirty_push_constants_stages & in update_gfx_uniform_state()
2193 cmd_buffer->state.uniforms.gs = in update_gfx_uniform_state()
2194 v3dv_write_uniforms(cmd_buffer, pipeline, gs_variant); in update_gfx_uniform_state()
2196 cmd_buffer->state.uniforms.gs_bin = in update_gfx_uniform_state()
2197 v3dv_write_uniforms(cmd_buffer, pipeline, gs_bin_variant); in update_gfx_uniform_state()
2204 (cmd_buffer->state.dirty_descriptor_stages & VK_SHADER_STAGE_VERTEX_BIT); in update_gfx_uniform_state()
2208 (cmd_buffer->state.dirty_push_constants_stages & VK_SHADER_STAGE_VERTEX_BIT); in update_gfx_uniform_state()
2223 cmd_buffer->state.uniforms.vs = in update_gfx_uniform_state()
2224 v3dv_write_uniforms(cmd_buffer, pipeline, vs_variant); in update_gfx_uniform_state()
2226 cmd_buffer->state.uniforms.vs_bin = in update_gfx_uniform_state()
2227 v3dv_write_uniforms(cmd_buffer, pipeline, vs_bin_variant); in update_gfx_uniform_state()
2230 cmd_buffer->state.dirty &= ~V3DV_CMD_DIRTY_VIEW_INDEX; in update_gfx_uniform_state()
2237 v3dv_cmd_buffer_meta_state_push(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_meta_state_push() argument
2240 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_cmd_buffer_meta_state_push()
2253 vk_free(&cmd_buffer->device->vk.alloc, state->meta.attachments); in v3dv_cmd_buffer_meta_state_push()
2255 state->meta.attachments = vk_zalloc(&cmd_buffer->device->vk.alloc, in v3dv_cmd_buffer_meta_state_push()
2259 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_meta_state_push()
2279 &cmd_buffer->state.gfx.descriptor_state; in v3dv_cmd_buffer_meta_state_push()
2295 memcpy(state->meta.push_constants, cmd_buffer->push_constants_data, in v3dv_cmd_buffer_meta_state_push()
2302 v3dv_cmd_buffer_meta_state_pop(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_meta_state_pop() argument
2306 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_cmd_buffer_meta_state_pop()
2329 v3dv_cmd_buffer_subpass_resume(cmd_buffer, state->meta.subpass_idx); in v3dv_cmd_buffer_meta_state_pop()
2338 v3dv_CmdBindPipeline(v3dv_cmd_buffer_to_handle(cmd_buffer), in v3dv_cmd_buffer_meta_state_pop()
2359 memcpy(cmd_buffer->push_constants_data, state->meta.push_constants, in v3dv_cmd_buffer_meta_state_pop()
2370 cmd_buffer_pre_draw_split_job(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_pre_draw_split_job() argument
2372 struct v3dv_job *job = cmd_buffer->state.job; in cmd_buffer_pre_draw_split_job()
2379 assert(cmd_buffer->state.pass); in cmd_buffer_pre_draw_split_job()
2388 job = v3dv_cmd_buffer_subpass_resume(cmd_buffer, in cmd_buffer_pre_draw_split_job()
2389 cmd_buffer->state.subpass_idx); in cmd_buffer_pre_draw_split_job()
2422 cmd_buffer_restart_job_for_msaa_if_needed(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_restart_job_for_msaa_if_needed() argument
2424 assert(cmd_buffer->state.job); in cmd_buffer_restart_job_for_msaa_if_needed()
2430 if (cmd_buffer->state.job->draw_count > 0) in cmd_buffer_restart_job_for_msaa_if_needed()
2436 if (!cmd_buffer->state.gfx.pipeline->msaa || in cmd_buffer_restart_job_for_msaa_if_needed()
2437 cmd_buffer->state.job->frame_tiling.msaa) { in cmd_buffer_restart_job_for_msaa_if_needed()
2448 if (cmd_buffer->level != VK_COMMAND_BUFFER_LEVEL_PRIMARY) in cmd_buffer_restart_job_for_msaa_if_needed()
2452 struct v3dv_job *old_job = cmd_buffer->state.job; in cmd_buffer_restart_job_for_msaa_if_needed()
2453 cmd_buffer->state.job = NULL; in cmd_buffer_restart_job_for_msaa_if_needed()
2455 struct v3dv_job *job = vk_zalloc(&cmd_buffer->device->vk.alloc, in cmd_buffer_restart_job_for_msaa_if_needed()
2459 v3dv_flag_oom(cmd_buffer, NULL); in cmd_buffer_restart_job_for_msaa_if_needed()
2463 v3dv_job_init(job, V3DV_JOB_TYPE_GPU_CL, cmd_buffer->device, cmd_buffer, in cmd_buffer_restart_job_for_msaa_if_needed()
2464 cmd_buffer->state.subpass_idx); in cmd_buffer_restart_job_for_msaa_if_needed()
2465 cmd_buffer->state.job = job; in cmd_buffer_restart_job_for_msaa_if_needed()
2480 v3dv_cmd_buffer_emit_pre_draw(struct v3dv_cmd_buffer *cmd_buffer) in v3dv_cmd_buffer_emit_pre_draw() argument
2482 assert(cmd_buffer->state.gfx.pipeline); in v3dv_cmd_buffer_emit_pre_draw()
2483 assert(!(cmd_buffer->state.gfx.pipeline->active_stages & VK_SHADER_STAGE_COMPUTE_BIT)); in v3dv_cmd_buffer_emit_pre_draw()
2489 if (!cmd_buffer->state.job) { in v3dv_cmd_buffer_emit_pre_draw()
2490 v3dv_cmd_buffer_subpass_resume(cmd_buffer, in v3dv_cmd_buffer_emit_pre_draw()
2491 cmd_buffer->state.subpass_idx); in v3dv_cmd_buffer_emit_pre_draw()
2495 cmd_buffer_restart_job_for_msaa_if_needed(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2500 struct v3dv_job *job = cmd_buffer_pre_draw_split_job(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2510 uint32_t *dirty = &cmd_buffer->state.dirty; in v3dv_cmd_buffer_emit_pre_draw()
2520 update_gfx_uniform_state(cmd_buffer, dirty_uniform_state); in v3dv_cmd_buffer_emit_pre_draw()
2522 struct v3dv_device *device = cmd_buffer->device; in v3dv_cmd_buffer_emit_pre_draw()
2525 v3dv_X(device, cmd_buffer_emit_gl_shader_state)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2528 v3dv_X(device, cmd_buffer_emit_configuration_bits)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2529 v3dv_X(device, cmd_buffer_emit_varyings_state)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2533 emit_scissor(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2537 v3dv_X(device, cmd_buffer_emit_viewport)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2541 v3dv_X(device, cmd_buffer_emit_index_buffer)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2548 v3dv_X(device, cmd_buffer_emit_stencil)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2551 v3dv_X(device, cmd_buffer_emit_depth_bias)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2554 v3dv_X(device, cmd_buffer_emit_blend)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2557 v3dv_X(device, cmd_buffer_emit_occlusion_query)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2560 v3dv_X(device, cmd_buffer_emit_line_width)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2563 v3dv_X(device, cmd_buffer_emit_sample_state)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2566 v3dv_X(device, cmd_buffer_emit_color_write_mask)(cmd_buffer); in v3dv_cmd_buffer_emit_pre_draw()
2568 cmd_buffer->state.dirty &= ~V3DV_CMD_DIRTY_PIPELINE; in v3dv_cmd_buffer_emit_pre_draw()
2572 cmd_buffer_set_view_index(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_set_view_index() argument
2575 cmd_buffer->state.view_index = view_index; in cmd_buffer_set_view_index()
2576 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_VIEW_INDEX; in cmd_buffer_set_view_index()
2580 cmd_buffer_draw(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_draw() argument
2584 struct v3dv_render_pass *pass = cmd_buffer->state.pass; in cmd_buffer_draw()
2586 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in cmd_buffer_draw()
2587 v3dv_X(cmd_buffer->device, cmd_buffer_emit_draw)(cmd_buffer, info); in cmd_buffer_draw() local
2591 uint32_t view_mask = pass->subpasses[cmd_buffer->state.subpass_idx].view_mask; in cmd_buffer_draw()
2593 cmd_buffer_set_view_index(cmd_buffer, u_bit_scan(&view_mask)); in cmd_buffer_draw()
2594 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in cmd_buffer_draw()
2595 v3dv_X(cmd_buffer->device, cmd_buffer_emit_draw)(cmd_buffer, info); in cmd_buffer_draw() local
2609 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDraw()
2616 cmd_buffer_draw(cmd_buffer, &info); in v3dv_CmdDraw()
2630 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDrawIndexed()
2632 struct v3dv_render_pass *pass = cmd_buffer->state.pass; in v3dv_CmdDrawIndexed()
2634 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in v3dv_CmdDrawIndexed()
2635 v3dv_X(cmd_buffer->device, cmd_buffer_emit_draw_indexed) in v3dv_CmdDrawIndexed() local
2636 (cmd_buffer, indexCount, instanceCount, in v3dv_CmdDrawIndexed()
2641 uint32_t view_mask = pass->subpasses[cmd_buffer->state.subpass_idx].view_mask; in v3dv_CmdDrawIndexed()
2643 cmd_buffer_set_view_index(cmd_buffer, u_bit_scan(&view_mask)); in v3dv_CmdDrawIndexed()
2644 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in v3dv_CmdDrawIndexed()
2645 v3dv_X(cmd_buffer->device, cmd_buffer_emit_draw_indexed) in v3dv_CmdDrawIndexed() local
2646 (cmd_buffer, indexCount, instanceCount, in v3dv_CmdDrawIndexed()
2662 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDrawIndirect()
2665 struct v3dv_render_pass *pass = cmd_buffer->state.pass; in v3dv_CmdDrawIndirect()
2667 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in v3dv_CmdDrawIndirect()
2668 v3dv_X(cmd_buffer->device, cmd_buffer_emit_draw_indirect) in v3dv_CmdDrawIndirect() local
2669 (cmd_buffer, buffer, offset, drawCount, stride); in v3dv_CmdDrawIndirect()
2673 uint32_t view_mask = pass->subpasses[cmd_buffer->state.subpass_idx].view_mask; in v3dv_CmdDrawIndirect()
2675 cmd_buffer_set_view_index(cmd_buffer, u_bit_scan(&view_mask)); in v3dv_CmdDrawIndirect()
2676 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in v3dv_CmdDrawIndirect()
2677 v3dv_X(cmd_buffer->device, cmd_buffer_emit_draw_indirect) in v3dv_CmdDrawIndirect() local
2678 (cmd_buffer, buffer, offset, drawCount, stride); in v3dv_CmdDrawIndirect()
2693 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDrawIndexedIndirect()
2696 struct v3dv_render_pass *pass = cmd_buffer->state.pass; in v3dv_CmdDrawIndexedIndirect()
2698 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in v3dv_CmdDrawIndexedIndirect()
2699 v3dv_X(cmd_buffer->device, cmd_buffer_emit_indexed_indirect) in v3dv_CmdDrawIndexedIndirect() local
2700 (cmd_buffer, buffer, offset, drawCount, stride); in v3dv_CmdDrawIndexedIndirect()
2704 uint32_t view_mask = pass->subpasses[cmd_buffer->state.subpass_idx].view_mask; in v3dv_CmdDrawIndexedIndirect()
2706 cmd_buffer_set_view_index(cmd_buffer, u_bit_scan(&view_mask)); in v3dv_CmdDrawIndexedIndirect()
2707 v3dv_cmd_buffer_emit_pre_draw(cmd_buffer); in v3dv_CmdDrawIndexedIndirect()
2708 v3dv_X(cmd_buffer->device, cmd_buffer_emit_indexed_indirect) in v3dv_CmdDrawIndexedIndirect() local
2709 (cmd_buffer, buffer, offset, drawCount, stride); in v3dv_CmdDrawIndexedIndirect()
2725 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdPipelineBarrier()
2734 struct v3dv_job *job = cmd_buffer->state.job; in v3dv_CmdPipelineBarrier()
2736 v3dv_cmd_buffer_finish_job(cmd_buffer); in v3dv_CmdPipelineBarrier()
2738 cmd_buffer->state.has_barrier = true; in v3dv_CmdPipelineBarrier()
2745 cmd_buffer->state.has_bcl_barrier = true; in v3dv_CmdPipelineBarrier()
2756 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdBindVertexBuffers()
2757 struct v3dv_vertex_binding *vb = cmd_buffer->state.vertex_bindings; in v3dv_CmdBindVertexBuffers()
2777 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_VERTEX_BUFFER; in v3dv_CmdBindVertexBuffers()
2804 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdBindIndexBuffer()
2807 if (buffer == cmd_buffer->state.index_buffer.buffer && in v3dv_CmdBindIndexBuffer()
2808 offset == cmd_buffer->state.index_buffer.offset && in v3dv_CmdBindIndexBuffer()
2809 index_size == cmd_buffer->state.index_buffer.index_size) { in v3dv_CmdBindIndexBuffer()
2813 cmd_buffer->state.index_buffer.buffer = buffer; in v3dv_CmdBindIndexBuffer()
2814 cmd_buffer->state.index_buffer.offset = offset; in v3dv_CmdBindIndexBuffer()
2815 cmd_buffer->state.index_buffer.index_size = index_size; in v3dv_CmdBindIndexBuffer()
2816 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_INDEX_BUFFER; in v3dv_CmdBindIndexBuffer()
2824 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetStencilCompareMask()
2827 cmd_buffer->state.dynamic.stencil_compare_mask.front = compareMask & 0xff; in v3dv_CmdSetStencilCompareMask()
2829 cmd_buffer->state.dynamic.stencil_compare_mask.back = compareMask & 0xff; in v3dv_CmdSetStencilCompareMask()
2831 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_STENCIL_COMPARE_MASK; in v3dv_CmdSetStencilCompareMask()
2839 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetStencilWriteMask()
2842 cmd_buffer->state.dynamic.stencil_write_mask.front = writeMask & 0xff; in v3dv_CmdSetStencilWriteMask()
2844 cmd_buffer->state.dynamic.stencil_write_mask.back = writeMask & 0xff; in v3dv_CmdSetStencilWriteMask()
2846 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_STENCIL_WRITE_MASK; in v3dv_CmdSetStencilWriteMask()
2854 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetStencilReference()
2857 cmd_buffer->state.dynamic.stencil_reference.front = reference & 0xff; in v3dv_CmdSetStencilReference()
2859 cmd_buffer->state.dynamic.stencil_reference.back = reference & 0xff; in v3dv_CmdSetStencilReference()
2861 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_STENCIL_REFERENCE; in v3dv_CmdSetStencilReference()
2870 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetDepthBias()
2872 cmd_buffer->state.dynamic.depth_bias.constant_factor = depthBiasConstantFactor; in v3dv_CmdSetDepthBias()
2873 cmd_buffer->state.dynamic.depth_bias.depth_bias_clamp = depthBiasClamp; in v3dv_CmdSetDepthBias()
2874 cmd_buffer->state.dynamic.depth_bias.slope_factor = depthBiasSlopeFactor; in v3dv_CmdSetDepthBias()
2875 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_DEPTH_BIAS; in v3dv_CmdSetDepthBias()
2892 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetLineWidth()
2894 cmd_buffer->state.dynamic.line_width = lineWidth; in v3dv_CmdSetLineWidth()
2895 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_LINE_WIDTH; in v3dv_CmdSetLineWidth()
2908 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdBindDescriptorSets()
2917 &cmd_buffer->state.compute.descriptor_state : in v3dv_CmdBindDescriptorSets()
2918 &cmd_buffer->state.gfx.descriptor_state; in v3dv_CmdBindDescriptorSets()
2946 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_DESCRIPTOR_SETS; in v3dv_CmdBindDescriptorSets()
2947 cmd_buffer->state.dirty_descriptor_stages |= dirty_stages & VK_SHADER_STAGE_ALL_GRAPHICS; in v3dv_CmdBindDescriptorSets()
2949 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_COMPUTE_DESCRIPTOR_SETS; in v3dv_CmdBindDescriptorSets()
2950 cmd_buffer->state.dirty_descriptor_stages |= VK_SHADER_STAGE_COMPUTE_BIT; in v3dv_CmdBindDescriptorSets()
2963 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdPushConstants()
2965 if (!memcmp((uint8_t *) cmd_buffer->push_constants_data + offset, pValues, size)) in v3dv_CmdPushConstants()
2968 memcpy((uint8_t *) cmd_buffer->push_constants_data + offset, pValues, size); in v3dv_CmdPushConstants()
2970 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_PUSH_CONSTANTS; in v3dv_CmdPushConstants()
2971 cmd_buffer->state.dirty_push_constants_stages |= stageFlags; in v3dv_CmdPushConstants()
2978 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetBlendConstants()
2979 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdSetBlendConstants()
2989 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_BLEND_CONSTANTS; in v3dv_CmdSetBlendConstants()
2997 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetColorWriteEnableEXT()
2998 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_CmdSetColorWriteEnableEXT()
3013 v3dv_cmd_buffer_reset_queries(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_reset_queries() argument
3021 assert(cmd_buffer->state.pass == NULL); in v3dv_cmd_buffer_reset_queries()
3022 assert(cmd_buffer->state.job == NULL); in v3dv_cmd_buffer_reset_queries()
3028 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_cmd_buffer_reset_queries()
3030 cmd_buffer, -1); in v3dv_cmd_buffer_reset_queries()
3031 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_reset_queries()
3037 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_cmd_buffer_reset_queries()
3041 v3dv_cmd_buffer_ensure_array_state(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_ensure_array_state() argument
3053 *ptr = vk_alloc(&cmd_buffer->device->vk.alloc, bytes, 8, in v3dv_cmd_buffer_ensure_array_state()
3057 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_ensure_array_state()
3068 v3dv_cmd_buffer_begin_query(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_begin_query() argument
3074 assert(cmd_buffer->state.query.active_query.bo == NULL); in v3dv_cmd_buffer_begin_query()
3077 cmd_buffer->state.query.active_query.bo = pool->queries[query].bo; in v3dv_cmd_buffer_begin_query()
3078 cmd_buffer->state.query.active_query.offset = pool->queries[query].offset; in v3dv_cmd_buffer_begin_query()
3079 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_OCCLUSION_QUERY; in v3dv_cmd_buffer_begin_query()
3083 v3dv_cmd_buffer_end_query(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_end_query() argument
3088 assert(cmd_buffer->state.query.active_query.bo != NULL); in v3dv_cmd_buffer_end_query()
3090 if (cmd_buffer->state.pass) { in v3dv_cmd_buffer_end_query()
3095 struct v3dv_cmd_buffer_state *state = &cmd_buffer->state; in v3dv_cmd_buffer_end_query()
3096 v3dv_cmd_buffer_ensure_array_state(cmd_buffer, in v3dv_cmd_buffer_end_query()
3101 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_end_query()
3122 struct v3dv_render_pass *pass = cmd_buffer->state.pass; in v3dv_cmd_buffer_end_query()
3132 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_cmd_buffer_end_query()
3134 cmd_buffer, -1); in v3dv_cmd_buffer_end_query()
3135 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_end_query()
3143 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_cmd_buffer_end_query()
3146 cmd_buffer->state.query.active_query.bo = NULL; in v3dv_cmd_buffer_end_query()
3147 cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_OCCLUSION_QUERY; in v3dv_cmd_buffer_end_query()
3151 v3dv_cmd_buffer_copy_query_results(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_copy_query_results() argument
3163 assert(cmd_buffer->state.pass == NULL); in v3dv_cmd_buffer_copy_query_results()
3164 assert(cmd_buffer->state.job == NULL); in v3dv_cmd_buffer_copy_query_results()
3170 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_cmd_buffer_copy_query_results()
3172 cmd_buffer, -1); in v3dv_cmd_buffer_copy_query_results()
3173 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_copy_query_results()
3183 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_cmd_buffer_copy_query_results()
3187 v3dv_cmd_buffer_add_tfu_job(struct v3dv_cmd_buffer *cmd_buffer, in v3dv_cmd_buffer_add_tfu_job() argument
3190 struct v3dv_device *device = cmd_buffer->device; in v3dv_cmd_buffer_add_tfu_job()
3195 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_cmd_buffer_add_tfu_job()
3199 v3dv_job_init(job, V3DV_JOB_TYPE_GPU_TFU, device, cmd_buffer, -1); in v3dv_cmd_buffer_add_tfu_job()
3201 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_cmd_buffer_add_tfu_job()
3209 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdSetEvent()
3215 assert(cmd_buffer->state.pass == NULL); in v3dv_CmdSetEvent()
3216 assert(cmd_buffer->state.job == NULL); in v3dv_CmdSetEvent()
3219 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_CmdSetEvent()
3221 cmd_buffer, -1); in v3dv_CmdSetEvent()
3222 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_CmdSetEvent()
3227 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_CmdSetEvent()
3235 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdResetEvent()
3241 assert(cmd_buffer->state.pass == NULL); in v3dv_CmdResetEvent()
3242 assert(cmd_buffer->state.job == NULL); in v3dv_CmdResetEvent()
3245 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_CmdResetEvent()
3247 cmd_buffer, -1); in v3dv_CmdResetEvent()
3248 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_CmdResetEvent()
3253 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_CmdResetEvent()
3269 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdWaitEvents()
3274 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_CmdWaitEvents()
3276 cmd_buffer, -1); in v3dv_CmdWaitEvents()
3277 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_CmdWaitEvents()
3282 vk_alloc(&cmd_buffer->device->vk.alloc, event_list_size, 8, in v3dv_CmdWaitEvents()
3285 v3dv_flag_oom(cmd_buffer, NULL); in v3dv_CmdWaitEvents()
3305 assert(cmd_buffer->state.pass || !cmd_buffer->state.job); in v3dv_CmdWaitEvents()
3306 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_CmdWaitEvents()
3315 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdWriteTimestamp()
3321 struct v3dv_render_pass *pass = cmd_buffer->state.pass; in v3dv_CmdWriteTimestamp()
3323 v3dv_cmd_buffer_finish_job(cmd_buffer); in v3dv_CmdWriteTimestamp()
3326 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in v3dv_CmdWriteTimestamp()
3328 cmd_buffer, -1); in v3dv_CmdWriteTimestamp()
3329 v3dv_return_if_oom(cmd_buffer, NULL); in v3dv_CmdWriteTimestamp()
3338 &pass->subpasses[cmd_buffer->state.subpass_idx]; in v3dv_CmdWriteTimestamp()
3342 list_addtail(&job->list_link, &cmd_buffer->jobs); in v3dv_CmdWriteTimestamp()
3343 cmd_buffer->state.job = NULL; in v3dv_CmdWriteTimestamp()
3346 if (cmd_buffer->state.pass) in v3dv_CmdWriteTimestamp()
3347 v3dv_cmd_buffer_subpass_resume(cmd_buffer, cmd_buffer->state.subpass_idx); in v3dv_CmdWriteTimestamp()
3351 cmd_buffer_emit_pre_dispatch(struct v3dv_cmd_buffer *cmd_buffer) in cmd_buffer_emit_pre_dispatch() argument
3353 assert(cmd_buffer->state.compute.pipeline); in cmd_buffer_emit_pre_dispatch()
3354 assert(cmd_buffer->state.compute.pipeline->active_stages == in cmd_buffer_emit_pre_dispatch()
3357 cmd_buffer->state.dirty &= ~(V3DV_CMD_DIRTY_COMPUTE_PIPELINE | in cmd_buffer_emit_pre_dispatch()
3359 cmd_buffer->state.dirty_descriptor_stages &= ~VK_SHADER_STAGE_COMPUTE_BIT; in cmd_buffer_emit_pre_dispatch()
3360 cmd_buffer->state.dirty_push_constants_stages &= ~VK_SHADER_STAGE_COMPUTE_BIT; in cmd_buffer_emit_pre_dispatch()
3424 cmd_buffer_create_csd_job(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_create_csd_job() argument
3434 struct v3dv_pipeline *pipeline = cmd_buffer->state.compute.pipeline; in cmd_buffer_create_csd_job()
3439 struct v3dv_job *job = vk_zalloc(&cmd_buffer->device->vk.alloc, in cmd_buffer_create_csd_job()
3443 v3dv_flag_oom(cmd_buffer, NULL); in cmd_buffer_create_csd_job()
3447 v3dv_job_init(job, V3DV_JOB_TYPE_GPU_CSD, cmd_buffer->device, cmd_buffer, -1); in cmd_buffer_create_csd_job()
3448 cmd_buffer->state.job = job; in cmd_buffer_create_csd_job()
3474 &cmd_buffer->device->devinfo, in cmd_buffer_create_csd_job()
3507 v3dv_bo_alloc(cmd_buffer->device, in cmd_buffer_create_csd_job()
3511 v3dv_flag_oom(cmd_buffer, NULL); in cmd_buffer_create_csd_job()
3518 v3dv_write_uniforms_wg_offsets(cmd_buffer, pipeline, in cmd_buffer_create_csd_job()
3529 cmd_buffer_dispatch(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_dispatch() argument
3541 cmd_buffer_create_csd_job(cmd_buffer, in cmd_buffer_dispatch()
3550 list_addtail(&job->list_link, &cmd_buffer->jobs); in cmd_buffer_dispatch()
3551 cmd_buffer->state.job = NULL; in cmd_buffer_dispatch()
3560 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDispatch()
3562 cmd_buffer_emit_pre_dispatch(cmd_buffer); in v3dv_CmdDispatch()
3563 cmd_buffer_dispatch(cmd_buffer, 0, 0, 0, in v3dv_CmdDispatch()
3576 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDispatchBase()
3578 cmd_buffer_emit_pre_dispatch(cmd_buffer); in v3dv_CmdDispatchBase()
3579 cmd_buffer_dispatch(cmd_buffer, in v3dv_CmdDispatchBase()
3586 cmd_buffer_dispatch_indirect(struct v3dv_cmd_buffer *cmd_buffer, in cmd_buffer_dispatch_indirect() argument
3595 v3dv_cmd_buffer_create_cpu_job(cmd_buffer->device, in cmd_buffer_dispatch_indirect()
3597 cmd_buffer, -1); in cmd_buffer_dispatch_indirect()
3598 v3dv_return_if_oom(cmd_buffer, NULL); in cmd_buffer_dispatch_indirect()
3608 cmd_buffer_create_csd_job(cmd_buffer, in cmd_buffer_dispatch_indirect()
3613 v3dv_return_if_oom(cmd_buffer, NULL); in cmd_buffer_dispatch_indirect()
3628 list_addtail(&job->list_link, &cmd_buffer->jobs); in cmd_buffer_dispatch_indirect()
3629 cmd_buffer->state.job = NULL; in cmd_buffer_dispatch_indirect()
3637 V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); in v3dv_CmdDispatchIndirect()
3642 cmd_buffer_emit_pre_dispatch(cmd_buffer); in v3dv_CmdDispatchIndirect()
3643 cmd_buffer_dispatch_indirect(cmd_buffer, buffer, offset); in v3dv_CmdDispatchIndirect()