Harbor

Changelog a6a65adc3d4f

record indirect draw calls

@sky · 1 month ago · parent 56fbf39b7f98
0 added 2 modified 0 deleted
tests/compiler_executor_test.odin +31 -0 modified
721 unchanged lines hidden
722 722 testing.expect_value(t, rec.calls[3].vertex_count, u32(1))
723 723 testing.expect_value(t, rec.calls[6].vertex_count, u32(6))
724 724 }
725 +
726 + @(test)
727 + test_recording_backend_records_indirect_draw_arguments :: proc(t: ^testing.T) {
728 + rec := recording_backend_init()
729 + defer recording_backend_destroy(&rec)
730 + backend := recording_backend_use(&rec)
731 +
732 + ctx, ok := backend.begin_frame({0, 0, 0, 1})
733 + testing.expect(t, ok)
734 + backend.bind_vertex_buffer(ctx, bk.Buffer_Handle(12))
735 + backend.draw_indirect(ctx, bk.Buffer_Handle(77), 16, 1, u32(size_of(bk.Indirect_Draw_Args)))
736 + backend.bind_index_buffer(ctx, bk.Buffer_Handle(13))
737 + backend.draw_indexed_indirect(ctx, bk.Buffer_Handle(78), 32, 1, u32(size_of(bk.Indirect_Draw_Indexed_Args)))
738 +
739 + expected := [?]Recording_Call_Kind {
740 + .Begin_Frame,
741 + .Bind_Vertex_Buffer,
742 + .Draw_Indirect,
743 + .Bind_Index_Buffer,
744 + .Draw_Indexed_Indirect,
745 + }
746 + recording_expect_kinds(t, &rec, expected[:])
747 + testing.expect_value(t, rec.calls[2].argument_buffer, bk.Buffer_Handle(77))
748 + testing.expect_value(t, rec.calls[2].argument_offset, u64(16))
749 + testing.expect_value(t, rec.calls[2].draw_count, u32(1))
750 + testing.expect_value(t, rec.calls[2].stride, u32(16))
751 + testing.expect_value(t, rec.calls[4].argument_buffer, bk.Buffer_Handle(78))
752 + testing.expect_value(t, rec.calls[4].argument_offset, u64(32))
753 + testing.expect_value(t, rec.calls[4].draw_count, u32(1))
754 + testing.expect_value(t, rec.calls[4].stride, u32(20))
755 + }
tests/recording_backend.odin +48 -0 modified
23 unchanged lines hidden
24 24 Bind_Index_Buffer,
25 25 Draw,
26 26 Draw_Indexed,
27 + Draw_Indirect,
28 + Draw_Indexed_Indirect,
27 29 Create_Compute_Pipeline,
28 30 Destroy_Compute_Pipeline,
29 31 Bind_Compute_Pipeline,
21 unchanged lines hidden
51 53 descriptor: bk.Descriptor_Handle,
52 54 descriptor_index: u32,
53 55 buffer: bk.Buffer_Handle,
56 + argument_buffer: bk.Buffer_Handle,
57 + argument_offset: u64,
58 + draw_count: u32,
59 + stride: u32,
54 60 color_count: u32,
55 61 color_formats: [bk.MAX_COLOR_TARGETS]bk.Format,
56 62 color_views: [bk.MAX_COLOR_TARGETS]bk.Texture_Handle,
122 unchanged lines hidden
179 185 bind_index_buffer = recording_bind_index_buffer,
180 186 draw = recording_draw,
181 187 draw_indexed = recording_draw_indexed,
188 + draw_indirect = recording_draw_indirect,
189 + draw_indexed_indirect = recording_draw_indexed_indirect,
182 190 create_compute_pipeline = recording_create_compute_pipeline,
183 191 destroy_compute_pipeline = recording_destroy_compute_pipeline,
184 192 bind_compute_pipeline = recording_bind_compute_pipeline,
314 unchanged lines hidden
499 507 })
500 508 }
501 509
510 + recording_draw_indirect :: proc(
511 + ctx: bk.Frame_Context,
512 + argument_buffer: bk.Buffer_Handle,
513 + argument_offset: u64,
514 + draw_count: u32,
515 + stride: u32,
516 + ) {
517 + if recording_active != nil {
518 + recording_active.draw_count += int(draw_count)
519 + }
520 + recording_record({
521 + kind = .Draw_Indirect,
522 + frame_index = ctx.frame_index,
523 + argument_buffer = argument_buffer,
524 + argument_offset = argument_offset,
525 + draw_count = draw_count,
526 + stride = stride,
527 + })
528 + }
529 +
530 + recording_draw_indexed_indirect :: proc(
531 + ctx: bk.Frame_Context,
532 + argument_buffer: bk.Buffer_Handle,
533 + argument_offset: u64,
534 + draw_count: u32,
535 + stride: u32,
536 + ) {
537 + if recording_active != nil {
538 + recording_active.draw_count += int(draw_count)
539 + }
540 + recording_record({
541 + kind = .Draw_Indexed_Indirect,
542 + frame_index = ctx.frame_index,
543 + argument_buffer = argument_buffer,
544 + argument_offset = argument_offset,
545 + draw_count = draw_count,
546 + stride = stride,
547 + })
548 + }
549 +
502 550 recording_create_compute_pipeline :: proc(
503 551 shader: bk.Shader_Handle,
504 552 num_buffers: u32,
67 unchanged lines hidden