@ -13,6 +13,7 @@
// CHANGELOG
// (minor and older changes stripped away, please see git history for details)
// 2023-04-11: Align buffer sizes.
// 2023-04-11: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX).
// 2023-01-25: Revert automatic pipeline layout generation (see https://github.com/gpuweb/gpuweb/issues/2470)
// 2022-11-24: Fixed validation error with default depth buffer settings.
@ -33,6 +34,7 @@
// Dear ImGui prototypes from imgui_internal.h
extern ImGuiID ImHashData ( const void * data_p , size_t data_size , ImU32 seed = 0 ) ;
# define MEMALIGN(_SIZE,_ALIGN) (((_SIZE) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) // Memory align (copied from IM_ALIGN() macro).
// WebGPU data
struct RenderResources
@ -370,7 +372,7 @@ void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder
nullptr ,
" Dear ImGui Vertex buffer " ,
WGPUBufferUsage_CopyDst | WGPUBufferUsage_Vertex ,
fr - > VertexBufferSize * sizeof ( ImDrawVert ) ,
MEMALIGN ( fr - > VertexBufferSize * sizeof ( ImDrawVert ) , 4 ) ,
false
} ;
fr - > VertexBuffer = wgpuDeviceCreateBuffer ( bd - > wgpuDevice , & vb_desc ) ;
@ -394,7 +396,7 @@ void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder
nullptr ,
" Dear ImGui Index buffer " ,
WGPUBufferUsage_CopyDst | WGPUBufferUsage_Index ,
fr - > IndexBufferSize * sizeof ( ImDrawIdx ) ,
MEMALIGN ( fr - > IndexBufferSize * sizeof ( ImDrawIdx ) , 4 ) ,
false
} ;
fr - > IndexBuffer = wgpuDeviceCreateBuffer ( bd - > wgpuDevice , & ib_desc ) ;
@ -415,8 +417,8 @@ void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder
vtx_dst + = cmd_list - > VtxBuffer . Size ;
idx_dst + = cmd_list - > IdxBuffer . Size ;
}
int64_t vb_write_size = ( ( char * ) vtx_dst - ( char * ) fr - > VertexBufferHost + 3 ) & ~ 3 ;
int64_t ib_write_size = ( ( char * ) idx_dst - ( char * ) fr - > IndexBufferHost + 3 ) & ~ 3 ;
int64_t vb_write_size = MEMALIGN ( ( char * ) vtx_dst - ( char * ) fr - > VertexBufferHost , 4 ) ;
int64_t ib_write_size = MEMALIGN ( ( char * ) idx_dst - ( char * ) fr - > IndexBufferHost , 4 ) ;
wgpuQueueWriteBuffer ( bd - > defaultQueue , fr - > VertexBuffer , 0 , fr - > VertexBufferHost , vb_write_size ) ;
wgpuQueueWriteBuffer ( bd - > defaultQueue , fr - > IndexBuffer , 0 , fr - > IndexBufferHost , ib_write_size ) ;
@ -553,7 +555,7 @@ static void ImGui_ImplWGPU_CreateUniformBuffer()
nullptr ,
" Dear ImGui Uniform buffer " ,
WGPUBufferUsage_CopyDst | WGPUBufferUsage_Uniform ,
sizeof ( Uniforms ) ,
MEMALIGN ( sizeof ( Uniforms ) , 4 ) ,
false
} ;
bd - > renderResources . Uniforms = wgpuDeviceCreateBuffer ( bd - > wgpuDevice , & ub_desc ) ;