Harbor

Changelog 3cb661dde5be

extend vertex input contract

@sky · 1 month ago · parent 3eb959f66a74
0 added 3 modified 0 deleted
backend/backend.odin +16 -2 modified
280 unchanged lines hidden
281 281
282 282 Vertex_Attribute :: struct {
283 283 location: u32,
284 + binding: u32,
284 285 offset: u32,
285 286 format: Vertex_Format,
286 287 }
5 unchanged lines hidden
292 293 }
293 294
294 295 Vertex_Binding :: struct {
295 - binding: u32,
296 - stride: u32,
296 + binding: u32,
297 + stride: u32,
298 + input_rate: Vertex_Input_Rate,
297 299 }
298 300
301 + Vertex_Input_Rate :: enum {
302 + Vertex,
303 + Instance,
304 + }
305 +
299 306 // --- Vertex layout descriptor ---
300 307
301 308 Vertex_Attrib :: enum u8 {
214 unchanged lines hidden
516 523 unmap_buffer: proc(handle: Buffer_Handle),
517 524 get_buffer_mapped: proc(handle: Buffer_Handle) -> rawptr,
518 525 bind_vertex_buffer: proc(ctx: Frame_Context, handle: Buffer_Handle),
526 + bind_vertex_buffer_slot: proc(
527 + ctx: Frame_Context,
528 + slot: u32,
529 + handle: Buffer_Handle,
530 + offset: u64,
531 + stride: u32,
532 + ),
519 533 bind_index_buffer: proc(ctx: Frame_Context, handle: Buffer_Handle),
520 534
521 535 // --- Textures ---
189 unchanged lines hidden
tests/recording_backend.odin +25 -2 modified
52 unchanged lines hidden
53 53 descriptor: bk.Descriptor_Handle,
54 54 descriptor_index: u32,
55 55 buffer: bk.Buffer_Handle,
56 + buffer_slot: u32,
57 + buffer_offset: u64,
58 + buffer_stride: u32,
56 59 argument_buffer: bk.Buffer_Handle,
57 60 argument_offset: u64,
58 61 draw_count: u32,
123 unchanged lines hidden
182 185 push_constants = recording_push_constants,
183 186 bind_descriptor_set = recording_bind_descriptor_set,
184 187 bind_vertex_buffer = recording_bind_vertex_buffer,
188 + bind_vertex_buffer_slot = recording_bind_vertex_buffer_slot,
185 189 bind_index_buffer = recording_bind_index_buffer,
186 190 draw = recording_draw,
187 191 draw_indexed = recording_draw_indexed,
262 unchanged lines hidden
450 454 }
451 455
452 456 recording_bind_vertex_buffer :: proc(ctx: bk.Frame_Context, handle: bk.Buffer_Handle) {
457 + recording_bind_vertex_buffer_slot(ctx, 0, handle, 0, 0)
458 + }
459 +
460 + recording_bind_vertex_buffer_slot :: proc(
461 + ctx: bk.Frame_Context,
462 + slot: u32,
463 + handle: bk.Buffer_Handle,
464 + offset: u64,
465 + stride: u32,
466 + ) {
453 467 if recording_active != nil {
454 - recording_active.bound_vertex_buffer = handle
468 + if slot == 0 {
469 + recording_active.bound_vertex_buffer = handle
470 + }
455 471 }
456 - recording_record({kind = .Bind_Vertex_Buffer, frame_index = ctx.frame_index, buffer = handle})
472 + recording_record({
473 + kind = .Bind_Vertex_Buffer,
474 + frame_index = ctx.frame_index,
475 + buffer = handle,
476 + buffer_slot = slot,
477 + buffer_offset = offset,
478 + buffer_stride = stride,
479 + })
457 480 }
458 481
459 482 recording_bind_index_buffer :: proc(ctx: bk.Frame_Context, handle: bk.Buffer_Handle) {
160 unchanged lines hidden
types.odin +1 -0 modified
206 unchanged lines hidden
207 207 Vertex_Binding :: bk.Vertex_Binding
208 208 Vertex_Attribute :: bk.Vertex_Attribute
209 209 Vertex_Format :: bk.Vertex_Format
210 + Vertex_Input_Rate :: bk.Vertex_Input_Rate
210 211 Vertex_Attrib :: bk.Vertex_Attrib
211 212 Vertex_Layout_Entry :: bk.Vertex_Layout_Entry
212 213 Vertex_Layout :: bk.Vertex_Layout
26 unchanged lines hidden