diff --git a/src/glyph_cache/glyph_cache.c b/src/glyph_cache/glyph_cache.c index b593498e..e21ae72e 100644 --- a/src/glyph_cache/glyph_cache.c +++ b/src/glyph_cache/glyph_cache.c @@ -24,7 +24,7 @@ GC_FontKey GC_FontKeyFromResource(ResourceKey resource) GC_Run *GC_RunFromString(Arena *arena, GC_FontKey key, String str) { /* TODO */ - GC_Run *result = 0; + GC_Run *result = PushStruct(arena, GC_Run); GC_RunRect *rr = PushStruct(arena, GC_RunRect); rr->advance = 1; diff --git a/src/gpu/gpu.lay b/src/gpu/gpu.lay index e303ea03..a769ae19 100644 --- a/src/gpu/gpu.lay +++ b/src/gpu/gpu.lay @@ -20,7 +20,7 @@ @IncludeG gpu_shader_core.cgh @Bootstrap G_Bootstrap -@Bootstrap G_BootstrapExtra +@Bootstrap G_BootstrapCommon ////////////////////////////// //- Impl diff --git a/src/gpu/gpu_common.c b/src/gpu/gpu_common.c index 49dd2695..e25395d9 100644 --- a/src/gpu/gpu_common.c +++ b/src/gpu/gpu_common.c @@ -4,7 +4,7 @@ ThreadLocal G_ArenaHandle G_t_perm_arena = ZI; //////////////////////////////////////////////////////////// //~ Bootstrap -void G_BootstrapExtra(void) +void G_BootstrapCommon(void) { G_SharedUtilState *g = &G_shared_util_state; @@ -27,7 +27,7 @@ void G_BootstrapExtra(void) /* Init point sampler */ { - G_ResourceHandle pt_sampler = G_PushSamplerResource(gpu_perm, (G_SamplerResourceDesc) { .filter = G_Filter_MinMagMipPoint }); + G_ResourceHandle pt_sampler = G_PushSampler(gpu_perm, (G_SamplerResourceDesc) { .filter = G_Filter_MinMagMipPoint }); G_PushSamplerStateRef(gpu_perm, pt_sampler, .forced = G_BasicPointSampler.v); } @@ -76,9 +76,9 @@ G_ArenaHandle G_PermArena(void) //- Cpu -> Gpu copy -G_ResourceHandle G_PushBufferFromCpu(G_ArenaHandle gpu_arena, G_CommandListHandle cl, String src) +G_ResourceHandle G_PushBufferFromString_(G_ArenaHandle gpu_arena, G_CommandListHandle cl, String src, G_BufferResourceDesc desc) { - G_ResourceHandle buffer = G_PushBufferResource(gpu_arena, (G_BufferResourceDesc) { .size = src.len }); + G_ResourceHandle buffer = G_PushBufferEx(gpu_arena, desc); G_CopyCpuToBuffer(cl, buffer, 0, src.text, RNGU64(0, src.len)); G_MemorySync( cl, buffer, diff --git a/src/gpu/gpu_common.h b/src/gpu/gpu_common.h index ef82ad65..d0c6eef0 100644 --- a/src/gpu/gpu_common.h +++ b/src/gpu/gpu_common.h @@ -12,7 +12,7 @@ extern ThreadLocal G_ArenaHandle G_t_perm_arena; //////////////////////////////////////////////////////////// //~ Bootstrap -void G_BootstrapExtra(void); +void G_BootstrapCommon(void); //////////////////////////////////////////////////////////// //~ Helpers @@ -23,7 +23,9 @@ G_ArenaHandle G_PermArena(void); //- Cpu -> Gpu copy -G_ResourceHandle G_PushBufferFromCpu(G_ArenaHandle gpu_arena, G_CommandListHandle cl, String src); +G_ResourceHandle G_PushBufferFromString_(G_ArenaHandle gpu_arena, G_CommandListHandle cl, String src, G_BufferResourceDesc desc); +#define G_PushBufferFromString(_arena, _cl, _src, ...) \ + G_PushBufferFromString_((_arena), (_cl), (_src), (G_BufferResourceDesc) { .size = (_src).len, __VA_ARGS__ }) //- Viewport / scissor diff --git a/src/gpu/gpu_core.h b/src/gpu/gpu_core.h index 986fb9bf..734f6a20 100644 --- a/src/gpu/gpu_core.h +++ b/src/gpu/gpu_core.h @@ -426,7 +426,7 @@ Struct(G_SamplerResourceDesc) }; //////////////////////////////////////////////////////////// -//~ GPU pointer types +//~ Ref types Struct(G_RefDesc) { @@ -434,10 +434,11 @@ Struct(G_RefDesc) u64 element_size; u64 element_offset; - /* If set, then the shader-visible pointer will attempt to allocate the - * pointer in the specified slot. This position can only be allocated to + /* If set, then the layer will attempt to allocate the shader-visible + * ref in the specified slot. This slot can only be allocated to * once globally. Any subsequent static allocations to the same slot will - * cause a panic. 0 will result in a regular dynamic shader-visible pointer. + * cause a panic unless it is freed. 0 will result in a regular + * dynamically-chosen slot for the reference. */ u32 forced; }; @@ -517,45 +518,45 @@ void G_ReleaseArena(G_ArenaHandle arena); //- Resource creation -G_ResourceHandle G_PushBufferResource(G_ArenaHandle arena, G_BufferResourceDesc desc); -G_ResourceHandle G_PushTextureResource(G_ArenaHandle arena, G_TextureResourceDesc desc); -G_ResourceHandle G_PushSamplerResource(G_ArenaHandle arena, G_SamplerResourceDesc desc); +G_ResourceHandle G_PushBufferEx(G_ArenaHandle arena, G_BufferResourceDesc desc); +G_ResourceHandle G_PushTextureEx(G_ArenaHandle arena, G_TextureResourceDesc desc); +G_ResourceHandle G_PushSampler(G_ArenaHandle arena, G_SamplerResourceDesc desc); -#define G_PushBuffer(arena, type, count, ...) G_PushBufferResource((arena), \ - (G_BufferResourceDesc) { \ - .size = sizeof(type) * (count), \ - __VA_ARGS__ \ - } \ +#define G_PushBuffer(arena, type, count, ...) G_PushBufferEx((arena), \ + (G_BufferResourceDesc) { \ + .size = sizeof(type) * (count), \ + __VA_ARGS__ \ + } \ ) -#define G_PushTexture1D(arena, _format, _size, _initial_layout, ...) G_PushTextureResource((arena), \ - (G_TextureResourceDesc) { \ - .kind = G_TextureKind_1D, \ - .format = (_format), \ - .dims = VEC3I32((_size), 1, 1), \ - .initial_layout = (_initial_layout), \ - __VA_ARGS__ \ - } \ +#define G_PushTexture1D(arena, _format, _size, _initial_layout, ...) G_PushTextureEx((arena), \ + (G_TextureResourceDesc) { \ + .kind = G_TextureKind_1D, \ + .format = (_format), \ + .dims = VEC3I32((_size), 1, 1), \ + .initial_layout = (_initial_layout), \ + __VA_ARGS__ \ + } \ ) -#define G_PushTexture2D(arena, _format, _size, _initial_layout, ...) G_PushTextureResource((arena), \ - (G_TextureResourceDesc) { \ - .kind = G_TextureKind_2D, \ - .format = (_format), \ - .dims = VEC3I32((_size).x, (_size).y, 1), \ - .initial_layout = (_initial_layout), \ - __VA_ARGS__ \ - } \ +#define G_PushTexture2D(arena, _format, _size, _initial_layout, ...) G_PushTextureEx((arena), \ + (G_TextureResourceDesc) { \ + .kind = G_TextureKind_2D, \ + .format = (_format), \ + .dims = VEC3I32((_size).x, (_size).y, 1), \ + .initial_layout = (_initial_layout), \ + __VA_ARGS__ \ + } \ ) -#define G_PushTexture3D(arena, _format, _size, _initial_layout, ...) G_PushTextureResource((arena), \ - (G_TextureResourceDesc) { \ - .kind = G_TextureKind_3D, \ - .format = (_format), \ - .dims = (_size), \ - .initial_layout = (_initial_layout), \ - __VA_ARGS__ \ - } \ +#define G_PushTexture3D(arena, _format, _size, _initial_layout, ...) G_PushTextureEx((arena), \ + (G_TextureResourceDesc) { \ + .kind = G_TextureKind_3D, \ + .format = (_format), \ + .dims = (_size), \ + .initial_layout = (_initial_layout), \ + __VA_ARGS__ \ + } \ ) //- Index buffer helpers @@ -576,7 +577,7 @@ i32 G_CountDepth(G_ResourceHandle texture); #define G_CountBuffer(buffer, type) G_CountBufferBytes(buffer) / sizeof(type) //////////////////////////////////////////////////////////// -//~ @hookdecl Shader resource references +//~ @hookdecl Shader resource reference u32 G_PushRef(G_ArenaHandle arena, G_ResourceHandle resource, G_RefDesc desc); diff --git a/src/gpu/gpu_dx12/gpu_dx12.lay b/src/gpu/gpu_dx12/gpu_dx12.lay index a7006d0a..46821b69 100644 --- a/src/gpu/gpu_dx12/gpu_dx12.lay +++ b/src/gpu/gpu_dx12/gpu_dx12.lay @@ -4,9 +4,6 @@ //- Api @IncludeC gpu_dx12_core.h -@IncludeC gpu_dx12_shader_core.cgh - -@IncludeG gpu_dx12_shader_core.cgh ////////////////////////////// //- Impl diff --git a/src/gpu/gpu_dx12/gpu_dx12_core.c b/src/gpu/gpu_dx12/gpu_dx12_core.c index 6e3a9f92..c55f2ba7 100644 --- a/src/gpu/gpu_dx12/gpu_dx12_core.c +++ b/src/gpu/gpu_dx12/gpu_dx12_core.c @@ -247,8 +247,8 @@ void G_Bootstrap(void) ID3D10Blob *blob = 0; if (SUCCEEDED(hr)) { - D3D12_ROOT_PARAMETER params[G_D12_NumConstants] = ZI; - for (i32 slot = 0; slot < G_D12_NumConstants; ++slot) + D3D12_ROOT_PARAMETER params[G_NumConstants] = ZI; + for (i32 slot = 0; slot < G_NumConstants; ++slot) { D3D12_ROOT_PARAMETER *param = ¶ms[slot]; param->ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; @@ -287,7 +287,28 @@ void G_Bootstrap(void) } ////////////////////////////// - //- Initialize workers + //- Create global resources + + { + /* Create debug print buffers */ + if (GPU_DEBUG) + { + u64 print_buffer_size = Mebi(64); + for (G_QueueKind kind = 0; kind < G_NumQueues; ++kind) + { + G_D12_Queue *queue = G_D12_QueueFromKind(kind); + if (kind != G_QueueKind_AsyncCopy) + { + G_ArenaHandle gpu_perm = G_PermArena(); + queue->debug_print_buffer = G_PushBuffer(gpu_perm, u8, print_buffer_size, .flags = G_ResourceFlag_AllowShaderReadWrite); + queue->debug_print_buffer_ref = G_PushRWByteAddressBufferRef(gpu_perm, queue->debug_print_buffer); + } + } + } + } + + ////////////////////////////// + //- Start workers for (G_QueueKind kind = 0; kind < G_NumQueues; ++kind) { @@ -856,7 +877,7 @@ G_D12_Descriptor *G_D12_PushDescriptor(G_D12_Arena *gpu_arena, G_D12_DescriptorH //- Resource creation -G_ResourceHandle G_PushBufferResource(G_ArenaHandle arena_handle, G_BufferResourceDesc desc) +G_ResourceHandle G_PushBufferEx(G_ArenaHandle arena_handle, G_BufferResourceDesc desc) { G_D12_SharedState *g = &G_D12_shared_state; G_D12_Arena *gpu_arena = G_D12_ArenaFromHandle(arena_handle); @@ -866,7 +887,7 @@ G_ResourceHandle G_PushBufferResource(G_ArenaHandle arena_handle, G_BufferResour { /* FIXME: Dynamic size */ D3D12_HEAP_DESC d3d_desc = ZI; - d3d_desc.SizeInBytes = Mebi(64); + d3d_desc.SizeInBytes = Mebi(512); d3d_desc.Flags |= D3D12_HEAP_FLAG_CREATE_NOT_ZEROED; d3d_desc.Flags |= D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES; /* TODO: Remove this and support tier 1 resource heaps */ d3d_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; @@ -941,7 +962,7 @@ G_ResourceHandle G_PushBufferResource(G_ArenaHandle arena_handle, G_BufferResour return G_D12_MakeHandle(G_ResourceHandle, resource); } -G_ResourceHandle G_PushTextureResource(G_ArenaHandle arena_handle, G_TextureResourceDesc desc) +G_ResourceHandle G_PushTextureEx(G_ArenaHandle arena_handle, G_TextureResourceDesc desc) { G_D12_SharedState *g = &G_D12_shared_state; G_D12_Arena *gpu_arena = G_D12_ArenaFromHandle(arena_handle); @@ -952,7 +973,7 @@ G_ResourceHandle G_PushTextureResource(G_ArenaHandle arena_handle, G_TextureReso { /* FIXME: Dynamic size */ D3D12_HEAP_DESC d3d_desc = ZI; - d3d_desc.SizeInBytes = Mebi(64); + d3d_desc.SizeInBytes = Mebi(512); d3d_desc.Flags |= D3D12_HEAP_FLAG_CREATE_NOT_ZEROED; d3d_desc.Flags |= D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES; /* TODO: Remove this and support tier 1 resource heaps */ d3d_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; @@ -1039,7 +1060,7 @@ G_ResourceHandle G_PushTextureResource(G_ArenaHandle arena_handle, G_TextureReso return G_D12_MakeHandle(G_ResourceHandle, resource); } -G_ResourceHandle G_PushSamplerResource(G_ArenaHandle arena_handle, G_SamplerResourceDesc desc) +G_ResourceHandle G_PushSampler(G_ArenaHandle arena_handle, G_SamplerResourceDesc desc) { G_D12_SharedState *g = &G_D12_shared_state; G_D12_Arena *gpu_arena = G_D12_ArenaFromHandle(arena_handle); @@ -1052,7 +1073,7 @@ G_ResourceHandle G_PushSamplerResource(G_ArenaHandle arena_handle, G_SamplerReso } //////////////////////////////////////////////////////////// -//~ @hookimpl Shader resource references +//~ @hookimpl Shader resource reference u32 G_PushRef(G_ArenaHandle arena_handle, G_ResourceHandle resource_handle, G_RefDesc ref_desc) { @@ -1081,15 +1102,29 @@ u32 G_PushRef(G_ArenaHandle arena_handle, G_ResourceHandle resource_handle, G_Re kind == G_RefKind_RWTexture2D || kind == G_RefKind_RWTexture3D; - + if (is_uav) + { + /* RW refs must be allowed on this resource */ + Assert(resource->flags & G_ResourceFlag_AllowShaderReadWrite); + } G_D12_Descriptor *descriptor = 0; if (is_buffer) { descriptor = G_D12_PushDescriptor(gpu_arena, G_D12_DescriptorHeapKind_CbvSrvUav, ref_desc.forced); - u64 buffer_size_aligned = resource->buffer_size_aligned; - u64 num_elements_in_buffer = buffer_size_aligned / ref_desc.element_size; - u64 num_elements_after_offset = num_elements_in_buffer > ref_desc.element_offset ? num_elements_in_buffer - ref_desc.element_offset : 0; + u64 num_elements_in_buffer = 0; + u64 num_elements_after_offset = 0; + if (is_raw) + { + num_elements_in_buffer = 0; + num_elements_after_offset = 0; + } + else + { + u64 buffer_size_aligned = resource->buffer_size_aligned; + num_elements_in_buffer = buffer_size_aligned / ref_desc.element_size; + num_elements_after_offset = num_elements_in_buffer > ref_desc.element_offset ? num_elements_in_buffer - ref_desc.element_offset : 0; + } if (num_elements_after_offset > 0) { if (is_uav) @@ -1526,13 +1561,18 @@ void G_CommitCommandListEx(G_CommandListHandle cl_handle, u64 fence_ops_count, G G_D12_Pipeline *bound_pipeline = 0; /* Constants state */ - u64 slotted_constants[G_D12_NumConstants]; - u64 bound_compute_constants[G_D12_NumConstants]; - u64 bound_graphics_constants[G_D12_NumConstants]; + u64 slotted_constants[G_NumConstants]; + u64 bound_compute_constants[G_NumConstants]; + u64 bound_graphics_constants[G_NumConstants]; for (i32 i = 0; i < countof(slotted_constants); ++i) { slotted_constants[i] = 0; } /* Zero initialze all constant slots */ for (i32 i = 0; i < countof(bound_compute_constants); ++i) { bound_compute_constants[i] = U64Max; } for (i32 i = 0; i < countof(bound_graphics_constants); ++i) { bound_graphics_constants[i] = U64Max; } + if (GPU_DEBUG) + { + slotted_constants[G_DebugPrintBufferConstantSlot] = queue->debug_print_buffer_ref.v; + } + /* Rasterizer state */ D3D12_VIEWPORT bound_viewport = ZI; D3D12_RECT bound_scissor = ZI; @@ -2704,7 +2744,7 @@ void G_CommitBackbuffer(G_ResourceHandle backbuffer_handle, i32 vsync) if (vsync != 0 && !(present_flags & DXGI_PRESENT_ALLOW_TEARING)) { - /* FIXME: Don't flush in fullscreen mode? */ + /* FIXME: Flush in windowed mode? */ // DwmFlush(); } @@ -2723,8 +2763,7 @@ void G_D12_WorkerEntry(WaveLaneCtx *lane) G_QueueKind queue_kind = (G_QueueKind)lane->wave->udata; G_D12_Queue *queue = G_D12_QueueFromKind(queue_kind); - // for (;;) - // { - - // } + for (;;) + { + } } diff --git a/src/gpu/gpu_dx12/gpu_dx12_core.h b/src/gpu/gpu_dx12/gpu_dx12_core.h index 036b477e..fd5e49dc 100644 --- a/src/gpu/gpu_dx12/gpu_dx12_core.h +++ b/src/gpu/gpu_dx12/gpu_dx12_core.h @@ -194,6 +194,10 @@ Struct(G_D12_Queue) ID3D12Fence *commit_fence; u64 commit_fence_target; + /* Global resources */ + G_ResourceHandle debug_print_buffer; + G_RWByteAddressBufferRef debug_print_buffer_ref; + /* Raw command lists */ struct G_D12_RawCommandList *first_committed_cl; struct G_D12_RawCommandList *last_committed_cl; diff --git a/src/gpu/gpu_dx12/gpu_dx12_shader_core.cgh b/src/gpu/gpu_dx12/gpu_dx12_shader_core.cgh deleted file mode 100644 index c7baad40..00000000 --- a/src/gpu/gpu_dx12/gpu_dx12_shader_core.cgh +++ /dev/null @@ -1,39 +0,0 @@ -//////////////////////////////////////////////////////////// -//~ Debug types - -//////////////////////////////////////////////////////////// -//~ Global constants - -/* Slots below assume they won't overlap user defined constants */ -StaticAssert(G_NumGeneralPurposeConstants == 8); - -G_ForceDeclConstant(G_RWByteAddressBufferRef, G_D12_DebugPrintBuff, 8); -#define G_D12_NumConstants (9) - -//////////////////////////////////////////////////////////// -//~ @hookimpl Shader printf - -#if IsLanguageG - - /* This technique comes from MJP's article: https://therealmjp.github.io/posts/hlsl-printf/ */ - #if G__DEBUG - #define G_DebugPrintImpl_(fmt_cstr) do { \ - u32 __strlen = 0; \ - for (;;) { if (U32FromChar(fmt_cstr[__strlen]) == 0) { break; } ++__strlen; } \ - RWByteAddressBuffer __print_buff; \ - __print_buff = RWByteAddressBufferFromRef(G__D12_DebugPrintBuff); \ - u32 __pos; \ - __print_buff.InterlockedAdd(0, __strlen, __pos); \ - if (__pos < countof(__print_buff)) \ - { \ - for (u32 char_idx = 0; char_idx < __strlen; ++char_idx) \ - { \ - __print_buff.Store(__pos + char_idx, U32FromChar(fmt_cstr[char_idx])); \ - } \ - } \ - } while (0) - #else - #define G_DebugPrintImpl_(fmt_cstr) - #endif - -#endif diff --git a/src/gpu/gpu_shader_core.cgh b/src/gpu/gpu_shader_core.cgh index bd4a0c0a..e6653d9a 100644 --- a/src/gpu/gpu_shader_core.cgh +++ b/src/gpu/gpu_shader_core.cgh @@ -35,10 +35,11 @@ Struct(G_SamplerStateRef) { u32 v; }; /* * NOTE: D3d12 exposes 64 root constants, and vulkan 32 push constants. - * Other constants past the max can be used by the graphics - * implementation backend layer. */ -#define G_NumGeneralPurposeConstants (8) +#define G_NumGeneralPurposeConstants (8) /* Constants available for any usage */ +#define G_NumReservedConstants (1) /* Constants reserved for usage by the GPU layer */ +#define G_NumBackendReservedConstants (1) /* Constants reserved for usage by the implementation backend layer */ +#define G_NumConstants (G_NumGeneralPurposeConstants + G_NumReservedConstants + G_NumBackendReservedConstants) #if IsLanguageC #define G_ForceDeclConstant(type, name, slot) \ @@ -106,11 +107,39 @@ Struct(G_SamplerStateRef) { u32 v; }; #define G_BasicNoiseTexture G_StaticRef(G_Texture3DRef, 2) //////////////////////////////////////////////////////////// -//~ @hookdecl Debug printf +//~ Reserved constants + +/* The constants declared below assume this configuration is accurate for slot usage */ +StaticAssert(G_NumGeneralPurposeConstants == 8); +StaticAssert(G_NumReservedConstants == 1); + +#define G_DebugPrintBufferConstantSlot 8 +G_ForceDeclConstant(G_RWByteAddressBufferRef, G_DebugPrintBuffer, 8); + +//////////////////////////////////////////////////////////// +//~ Debug printf #if IsLanguageG - /* Implemented per graphics platform layer */ - #define G_DebugPrint(msg) G_DebugPrintImpl_(msg) + /* This technique comes from MJP's article: https://therealmjp.github.io/posts/hlsl-printf/ */ + #if G__DEBUG + #define G_DebugPrint(fmt_cstr) do { \ + u32 __strlen = 0; \ + for (;;) { if (U32FromChar(fmt_cstr[__strlen]) == 0) { break; } ++__strlen; } \ + RWByteAddressBuffer __print_buff; \ + __print_buff = RWByteAddressBufferFromRef(G_DebugPrintBuffer); \ + u32 __pos; \ + __print_buff.InterlockedAdd(0, __strlen, __pos); \ + if (__pos < countof(__print_buff)) \ + { \ + for (u32 char_idx = 0; char_idx < __strlen; ++char_idx) \ + { \ + __print_buff.Store(__pos + char_idx, U32FromChar(fmt_cstr[char_idx])); \ + } \ + } \ + } while (0) + #else + #define G_DebugPrint(fmt_cstr) + #endif #endif diff --git a/src/playback/playback.h b/src/playback/playback.h index 7be90f5a..1fdeee7c 100644 --- a/src/playback/playback.h +++ b/src/playback/playback.h @@ -1,3 +1,6 @@ #define PB_SampleRate 48000 +//////////////////////////////////////////////////////////// +//~ @hookdecl Bootstrap + void PB_Bootstrap(void); diff --git a/src/playback/playback_wasapi/playback_wasapi.c b/src/playback/playback_wasapi/playback_wasapi.c index ecd9a639..595c6c71 100644 --- a/src/playback/playback_wasapi/playback_wasapi.c +++ b/src/playback/playback_wasapi/playback_wasapi.c @@ -7,9 +7,9 @@ PB_WSP_SharedState PB_WSP_shared_state = ZI; //////////////////////////////////////////////////////////// -//~ Bootstrap +//~ @hookimpl Bootstrap -void PB_Bootstrap(void) +void PB_Bootstrap(void) { PB_WSP_SharedState *g = &PB_WSP_shared_state; PB_WSP_InitializeWasapi(); @@ -19,6 +19,9 @@ void PB_Bootstrap(void) OnExit(&PB_WSP_Shutdown); } +//////////////////////////////////////////////////////////// +//~ Initialize wasapi + ExitFuncDef(PB_WSP_Shutdown) { PB_WSP_SharedState *g = &PB_WSP_shared_state; diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 9d7f9765..f54bd1a4 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -572,8 +572,8 @@ void V_TickForever(WaveLaneCtx *lane) G_RWTexture2DRef draw_target_rw = G_PushRWTexture2DRef(frame->gpu_arena, draw_target); /* Verts */ - G_ResourceHandle dverts_buff = G_PushBufferFromCpu(frame->gpu_arena, frame->cl, StringFromArena(frame->dverts_arena)); - G_ResourceHandle dvert_idxs_buff = G_PushBufferFromCpu(frame->gpu_arena, frame->cl, StringFromArena(frame->dvert_idxs_arena)); + G_ResourceHandle dverts_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromArena(frame->dverts_arena)); + G_ResourceHandle dvert_idxs_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromArena(frame->dvert_idxs_arena)); G_StructuredBufferRef dverts_ro = G_PushStructuredBufferRef(frame->gpu_arena, dverts_buff, V_DVert); G_IndexBufferDesc dvert_idxs_ib = G_IdxBuff32(dvert_idxs_buff); @@ -586,7 +586,7 @@ void V_TickForever(WaveLaneCtx *lane) params.shape_verts = dverts_ro; params.world_to_draw_xf = world_to_draw_xf; } - G_ResourceHandle params_buff = G_PushBufferFromCpu(frame->gpu_arena, frame->cl, StringFromStruct(¶ms)); + G_ResourceHandle params_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromStruct(¶ms)); G_StructuredBufferRef params_ro = G_PushStructuredBufferRef(frame->gpu_arena, params_buff, V_DParams); /* Constants */ diff --git a/src/ui/ui_core.c b/src/ui/ui_core.c index 3a5bc72c..235ca133 100644 --- a/src/ui/ui_core.c +++ b/src/ui/ui_core.c @@ -1381,7 +1381,7 @@ void UI_EndFrame(UI_Frame *frame) G_Texture2DRef draw_target_ro = G_PushTexture2DRef(frame->gpu_arena, draw_target); /* Rects */ - G_ResourceHandle rects_buff = G_PushBufferFromCpu(frame->gpu_arena, frame->cl, StringFromArena(frame->rects_arena)); + G_ResourceHandle rects_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromArena(frame->rects_arena)); G_StructuredBufferRef rects_ro = G_PushStructuredBufferRef(frame->gpu_arena, rects_buff, UI_DRect); /* Params */ @@ -1391,7 +1391,7 @@ void UI_EndFrame(UI_Frame *frame) params.target_ro = draw_target_ro; params.rects = rects_ro; } - G_ResourceHandle params_buff = G_PushBufferFromCpu(frame->gpu_arena, frame->cl, StringFromStruct(¶ms)); + G_ResourceHandle params_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromStruct(¶ms)); G_StructuredBufferRef params_ro = G_PushStructuredBufferRef(frame->gpu_arena, params_buff, UI_DParams); /* Constants */