| 288 | }; |
| 289 | |
| 290 | void raster_redraw() |
| 291 | { |
| 292 | // sync & reset |
| 293 | CGPUAcquireNextDescriptor acquire_desc = { |
| 294 | .signal_semaphore = present_semaphore |
| 295 | }; |
| 296 | backbuffer_index = cgpu_acquire_next_image(swapchain, &acquire_desc); |
| 297 | CGPUCommandPoolId pool = pools[backbuffer_index]; |
| 298 | CGPUCommandBufferId cmd = cmds[backbuffer_index]; |
| 299 | const CGPUTextureId back_buffer = swapchain->back_buffers[backbuffer_index]; |
| 300 | cgpu_wait_fences(exec_fences + backbuffer_index, 1); |
| 301 | cgpu_reset_command_pool(pool); |
| 302 | // record |
| 303 | cgpu_cmd_begin(cmd); |
| 304 | CGPUColorAttachment screen_attachment = { |
| 305 | .view = views[backbuffer_index], |
| 306 | .load_action = CGPU_LOAD_ACTION_CLEAR, |
| 307 | .store_action = CGPU_STORE_ACTION_STORE, |
| 308 | .clear_color = fastclear_0000 |
| 309 | }; |
| 310 | CGPURenderPassDescriptor rp_desc = { |
| 311 | .render_target_count = 1, |
| 312 | .sample_count = CGPU_SAMPLE_COUNT_1, |
| 313 | .color_attachments = &screen_attachment, |
| 314 | .depth_stencil = CGPU_NULLPTR |
| 315 | }; |
| 316 | CGPUTextureBarrier draw_barrier = { |
| 317 | .texture = back_buffer, |
| 318 | .src_state = CGPU_RESOURCE_STATE_UNDEFINED, |
| 319 | .dst_state = CGPU_RESOURCE_STATE_RENDER_TARGET |
| 320 | }; |
| 321 | CGPUResourceBarrierDescriptor barrier_desc0 = { .texture_barriers = &draw_barrier, .texture_barriers_count = 1 }; |
| 322 | cgpu_cmd_resource_barrier(cmd, &barrier_desc0); |
| 323 | CGPURenderPassEncoderId rp_encoder = cgpu_cmd_begin_render_pass(cmd, &rp_desc); |
| 324 | { |
| 325 | cgpu_render_encoder_set_viewport(rp_encoder, |
| 326 | 0.0f, 0.0f, |
| 327 | (float)back_buffer->info->width, (float)back_buffer->info->height, |
| 328 | 0.f, 1.f); |
| 329 | cgpu_render_encoder_set_scissor(rp_encoder, 0, 0, back_buffer->info->width, back_buffer->info->height); |
| 330 | cgpu_render_encoder_bind_pipeline(rp_encoder, pipeline); |
| 331 | cgpu_render_encoder_bind_descriptor_set(rp_encoder, desc_set); |
| 332 | cgpu_render_encoder_push_constants(rp_encoder, root_sig, "push_constants", &data); |
| 333 | if (desc_set2) cgpu_render_encoder_bind_descriptor_set(rp_encoder, desc_set2); |
| 334 | cgpu_render_encoder_draw(rp_encoder, 6, 0); |
| 335 | } |
| 336 | cgpu_cmd_end_render_pass(cmd, rp_encoder); |
| 337 | CGPUTextureBarrier present_barrier = { |
| 338 | .texture = back_buffer, |
| 339 | .src_state = CGPU_RESOURCE_STATE_RENDER_TARGET, |
| 340 | .dst_state = CGPU_RESOURCE_STATE_PRESENT |
| 341 | }; |
| 342 | CGPUResourceBarrierDescriptor barrier_desc1 = { .texture_barriers = &present_barrier, .texture_barriers_count = 1 }; |
| 343 | cgpu_cmd_resource_barrier(cmd, &barrier_desc1); |
| 344 | cgpu_cmd_end(cmd); |
| 345 | // submit |
| 346 | CGPUQueueSubmitDescriptor submit_desc = { |
| 347 | .cmds = &cmd, |
no test coverage detected