From d07b61787ed8e5bc60cb455c5acbe248d6ce6d93 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 10 Dec 2021 06:43:15 -0700 Subject: [PATCH] gpu: reduce compilation units to improve iteration time by ~387ms See hexops/mach#124 Signed-off-by: Stephen Gutekanst --- gpu/build_dawn.zig | 132 ++---------------- gpu/src/dawn/sources/dawn_native.cpp | 72 ++++++++++ gpu/src/dawn/sources/dawn_native_metal.mm | 19 +++ .../dawn/sources/dawn_native_utils_gen.cpp | 6 + 4 files changed, 110 insertions(+), 119 deletions(-) create mode 100644 gpu/src/dawn/sources/dawn_native.cpp create mode 100644 gpu/src/dawn/sources/dawn_native_metal.mm create mode 100644 gpu/src/dawn/sources/dawn_native_utils_gen.cpp diff --git a/gpu/build_dawn.zig b/gpu/build_dawn.zig index cf746518..82026067 100644 --- a/gpu/build_dawn.zig +++ b/gpu/build_dawn.zig @@ -230,6 +230,7 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti step.linkLibrary(lib_spirv_cross); } flags.appendSlice(&.{ + include("libs/dawn"), include("libs/dawn/src"), include("libs/dawn/src/include"), include("libs/dawn/third_party/vulkan-deps/spirv-tools/src/include"), @@ -250,102 +251,13 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti include("libs/dawn/out/Debug/gen/src"), }) catch unreachable; - for ([_][]const u8{ - "out/Debug/gen/src/dawn/dawn_thread_dispatch_proc.cpp", - "out/Debug/gen/src/dawn/dawn_proc.c", - "out/Debug/gen/src/dawn/webgpu_cpp.cpp", - }) |path| { - var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable; - lib.addCSourceFile(abs_path, flags.items); - } - - for ([_][]const u8{ - "src/dawn_native/Adapter.cpp", - "src/dawn_native/AsyncTask.cpp", - "src/dawn_native/AttachmentState.cpp", - "src/dawn_native/BackendConnection.cpp", - "src/dawn_native/BindGroup.cpp", - "src/dawn_native/BindGroupLayout.cpp", - "src/dawn_native/BindingInfo.cpp", - "src/dawn_native/BuddyAllocator.cpp", - "src/dawn_native/BuddyMemoryAllocator.cpp", - "src/dawn_native/Buffer.cpp", - "src/dawn_native/CachedObject.cpp", - "src/dawn_native/CallbackTaskManager.cpp", - "src/dawn_native/CommandAllocator.cpp", - "src/dawn_native/CommandBuffer.cpp", - "src/dawn_native/CommandBufferStateTracker.cpp", - "src/dawn_native/CommandEncoder.cpp", - "src/dawn_native/CommandValidation.cpp", - "src/dawn_native/Commands.cpp", - "src/dawn_native/CompilationMessages.cpp", - "src/dawn_native/ComputePassEncoder.cpp", - "src/dawn_native/ComputePipeline.cpp", - "src/dawn_native/CopyTextureForBrowserHelper.cpp", - "src/dawn_native/CreatePipelineAsyncTask.cpp", - "src/dawn_native/Device.cpp", - "src/dawn_native/DynamicUploader.cpp", - "src/dawn_native/EncodingContext.cpp", - "src/dawn_native/Error.cpp", - "src/dawn_native/ErrorData.cpp", - "src/dawn_native/ErrorInjector.cpp", - "src/dawn_native/ErrorScope.cpp", - "src/dawn_native/ExternalTexture.cpp", - "src/dawn_native/Features.cpp", - "src/dawn_native/Format.cpp", - "src/dawn_native/IndirectDrawMetadata.cpp", - "src/dawn_native/IndirectDrawValidationEncoder.cpp", - "src/dawn_native/Instance.cpp", - "src/dawn_native/InternalPipelineStore.cpp", - "src/dawn_native/Limits.cpp", - "src/dawn_native/ObjectBase.cpp", - "src/dawn_native/ObjectContentHasher.cpp", - "src/dawn_native/PassResourceUsageTracker.cpp", - "src/dawn_native/PerStage.cpp", - "src/dawn_native/PersistentCache.cpp", - "src/dawn_native/Pipeline.cpp", - "src/dawn_native/PipelineLayout.cpp", - "src/dawn_native/PooledResourceMemoryAllocator.cpp", - "src/dawn_native/ProgrammableEncoder.cpp", - "src/dawn_native/QueryHelper.cpp", - "src/dawn_native/QuerySet.cpp", - "src/dawn_native/Queue.cpp", - "src/dawn_native/RenderBundle.cpp", - "src/dawn_native/RenderBundleEncoder.cpp", - "src/dawn_native/RenderEncoderBase.cpp", - "src/dawn_native/RenderPassEncoder.cpp", - "src/dawn_native/RenderPipeline.cpp", - "src/dawn_native/ResourceMemoryAllocation.cpp", - "src/dawn_native/RingBufferAllocator.cpp", - "src/dawn_native/Sampler.cpp", - "src/dawn_native/ScratchBuffer.cpp", - "src/dawn_native/ShaderModule.cpp", - "src/dawn_native/StagingBuffer.cpp", - "src/dawn_native/Subresource.cpp", - "src/dawn_native/Surface.cpp", - "src/dawn_native/SwapChain.cpp", - "src/dawn_native/Texture.cpp", - "src/dawn_native/TintUtils.cpp", - "src/dawn_native/Toggles.cpp", - "src/dawn_native/VertexFormat.cpp", - "src/dawn_native/utils/WGPUHelpers.cpp", - }) |path| { - var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable; - lib.addCSourceFile(abs_path, flags.items); - } + lib.addCSourceFiles(&.{ + thisDir() ++ "/src/dawn/sources/dawn_native.cpp", + thisDir() ++ "/libs/dawn/out/Debug/gen/src/dawn/dawn_proc.c", + }, flags.items); // dawn_native_utils_gen - for ([_][]const u8{ - "out/Debug/gen/src/dawn_native/ChainUtils_autogen.cpp", - "out/Debug/gen/src/dawn_native/ProcTable.cpp", - "out/Debug/gen/src/dawn_native/wgpu_structs_autogen.cpp", - "out/Debug/gen/src/dawn_native/ValidationUtils_autogen.cpp", - "out/Debug/gen/src/dawn_native/webgpu_absl_format_autogen.cpp", - "out/Debug/gen/src/dawn_native/ObjectType_autogen.cpp", - }) |path| { - var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable; - lib.addCSourceFile(abs_path, flags.items); - } + lib.addCSourceFile(thisDir() ++ "/src/dawn/sources/dawn_native_utils_gen.cpp", flags.items); // TODO(build-system): could allow enable_vulkan_validation_layers here. See src/dawn_native/BUILD.gn // TODO(build-system): allow use_angle here. See src/dawn_native/BUILD.gn @@ -354,6 +266,7 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti if (options.d3d12.?) { // TODO(build-system): windows // libs += [ "dxguid.lib" ] + // TODO(build-system): reduce build units for ([_][]const u8{ "src/dawn_native/d3d12/AdapterD3D12.cpp", "src/dawn_native/d3d12/BackendD3D12.cpp", @@ -406,31 +319,10 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti lib.linkFramework("IOSurface"); lib.linkFramework("QuartzCore"); - for ([_][]const u8{ - "src/dawn_native/metal/MetalBackend.mm", - "src/dawn_native/Surface_metal.mm", - "src/dawn_native/metal/BackendMTL.mm", - "src/dawn_native/metal/BindGroupLayoutMTL.mm", - "src/dawn_native/metal/BindGroupMTL.mm", - "src/dawn_native/metal/BufferMTL.mm", - "src/dawn_native/metal/CommandBufferMTL.mm", - "src/dawn_native/metal/CommandRecordingContext.mm", - "src/dawn_native/metal/ComputePipelineMTL.mm", - "src/dawn_native/metal/DeviceMTL.mm", - "src/dawn_native/metal/PipelineLayoutMTL.mm", - "src/dawn_native/metal/QuerySetMTL.mm", - "src/dawn_native/metal/QueueMTL.mm", - "src/dawn_native/metal/RenderPipelineMTL.mm", - "src/dawn_native/metal/SamplerMTL.mm", - "src/dawn_native/metal/ShaderModuleMTL.mm", - "src/dawn_native/metal/StagingBufferMTL.mm", - "src/dawn_native/metal/SwapChainMTL.mm", - "src/dawn_native/metal/TextureMTL.mm", - "src/dawn_native/metal/UtilsMetal.mm", - }) |path| { - var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable; - lib.addCSourceFile(abs_path, flags.items); - } + lib.addCSourceFiles(&.{ + thisDir() ++ "/src/dawn/sources/dawn_native_metal.mm", + thisDir() ++ "/libs/dawn/src/dawn_native/metal/BackendMTL.mm", + }, flags.items); } if (options.linux_window_manager != null and options.linux_window_manager.? == .X11) { @@ -467,6 +359,7 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti lib.addCSourceFile(abs_path, flags.items); } + // TODO(build-system): reduce build units for ([_][]const u8{ "src/dawn_native/opengl/BackendGL.cpp", "src/dawn_native/opengl/BindGroupGL.cpp", @@ -499,6 +392,7 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti const target = (std.zig.system.NativeTargetInfo.detect(b.allocator, step.target) catch unreachable).target; if (options.vulkan.?) { + // TODO(build-system): reduce build units for ([_][]const u8{ "src/dawn_native/vulkan/AdapterVk.cpp", "src/dawn_native/vulkan/BackendVk.cpp", diff --git a/gpu/src/dawn/sources/dawn_native.cpp b/gpu/src/dawn/sources/dawn_native.cpp new file mode 100644 index 00000000..9db43af1 --- /dev/null +++ b/gpu/src/dawn/sources/dawn_native.cpp @@ -0,0 +1,72 @@ +#include "out/Debug/gen/src/dawn/dawn_thread_dispatch_proc.cpp" +#include "out/Debug/gen/src/dawn/webgpu_cpp.cpp" + +#include "src/dawn_native/Adapter.cpp" +#include "src/dawn_native/AsyncTask.cpp" +#include "src/dawn_native/AttachmentState.cpp" +#include "src/dawn_native/BackendConnection.cpp" +#include "src/dawn_native/BindGroup.cpp" +#include "src/dawn_native/BindGroupLayout.cpp" +#include "src/dawn_native/BindingInfo.cpp" +#include "src/dawn_native/BuddyAllocator.cpp" +#include "src/dawn_native/BuddyMemoryAllocator.cpp" +#include "src/dawn_native/Buffer.cpp" +#include "src/dawn_native/CachedObject.cpp" +#include "src/dawn_native/CallbackTaskManager.cpp" +#include "src/dawn_native/CommandAllocator.cpp" +#include "src/dawn_native/CommandBuffer.cpp" +#include "src/dawn_native/CommandBufferStateTracker.cpp" +#include "src/dawn_native/CommandEncoder.cpp" +#include "src/dawn_native/CommandValidation.cpp" +#include "src/dawn_native/Commands.cpp" +#include "src/dawn_native/CompilationMessages.cpp" +#include "src/dawn_native/ComputePassEncoder.cpp" +#include "src/dawn_native/ComputePipeline.cpp" +#include "src/dawn_native/CopyTextureForBrowserHelper.cpp" +#include "src/dawn_native/CreatePipelineAsyncTask.cpp" +#include "src/dawn_native/Device.cpp" +#include "src/dawn_native/DynamicUploader.cpp" +#include "src/dawn_native/EncodingContext.cpp" +#include "src/dawn_native/Error.cpp" +#include "src/dawn_native/ErrorData.cpp" +#include "src/dawn_native/ErrorInjector.cpp" +#include "src/dawn_native/ErrorScope.cpp" +#include "src/dawn_native/ExternalTexture.cpp" +#include "src/dawn_native/Features.cpp" +#include "src/dawn_native/Format.cpp" +#include "src/dawn_native/IndirectDrawMetadata.cpp" +#include "src/dawn_native/IndirectDrawValidationEncoder.cpp" +#include "src/dawn_native/Instance.cpp" +#include "src/dawn_native/InternalPipelineStore.cpp" +#include "src/dawn_native/Limits.cpp" +#include "src/dawn_native/ObjectBase.cpp" +#include "src/dawn_native/ObjectContentHasher.cpp" +#include "src/dawn_native/PassResourceUsageTracker.cpp" +#include "src/dawn_native/PerStage.cpp" +#include "src/dawn_native/PersistentCache.cpp" +#include "src/dawn_native/Pipeline.cpp" +#include "src/dawn_native/PipelineLayout.cpp" +#include "src/dawn_native/PooledResourceMemoryAllocator.cpp" +#include "src/dawn_native/ProgrammableEncoder.cpp" +#include "src/dawn_native/QueryHelper.cpp" +#include "src/dawn_native/QuerySet.cpp" +#include "src/dawn_native/Queue.cpp" +#include "src/dawn_native/RenderBundle.cpp" +#include "src/dawn_native/RenderBundleEncoder.cpp" +#include "src/dawn_native/RenderEncoderBase.cpp" +#include "src/dawn_native/RenderPassEncoder.cpp" +#include "src/dawn_native/RenderPipeline.cpp" +#include "src/dawn_native/ResourceMemoryAllocation.cpp" +#include "src/dawn_native/RingBufferAllocator.cpp" +#include "src/dawn_native/Sampler.cpp" +#include "src/dawn_native/ScratchBuffer.cpp" +#include "src/dawn_native/ShaderModule.cpp" +#include "src/dawn_native/StagingBuffer.cpp" +#include "src/dawn_native/Subresource.cpp" +#include "src/dawn_native/Surface.cpp" +#include "src/dawn_native/SwapChain.cpp" +#include "src/dawn_native/Texture.cpp" +#include "src/dawn_native/TintUtils.cpp" +#include "src/dawn_native/Toggles.cpp" +#include "src/dawn_native/VertexFormat.cpp" +#include "src/dawn_native/utils/WGPUHelpers.cpp" diff --git a/gpu/src/dawn/sources/dawn_native_metal.mm b/gpu/src/dawn/sources/dawn_native_metal.mm new file mode 100644 index 00000000..b2b0044c --- /dev/null +++ b/gpu/src/dawn/sources/dawn_native_metal.mm @@ -0,0 +1,19 @@ +#include "src/dawn_native/metal/MetalBackend.mm" +#include "src/dawn_native/Surface_metal.mm" +#include "src/dawn_native/metal/BindGroupLayoutMTL.mm" +#include "src/dawn_native/metal/BindGroupMTL.mm" +#include "src/dawn_native/metal/BufferMTL.mm" +#include "src/dawn_native/metal/CommandBufferMTL.mm" +#include "src/dawn_native/metal/CommandRecordingContext.mm" +#include "src/dawn_native/metal/ComputePipelineMTL.mm" +#include "src/dawn_native/metal/DeviceMTL.mm" +#include "src/dawn_native/metal/PipelineLayoutMTL.mm" +#include "src/dawn_native/metal/QuerySetMTL.mm" +#include "src/dawn_native/metal/QueueMTL.mm" +#include "src/dawn_native/metal/RenderPipelineMTL.mm" +#include "src/dawn_native/metal/SamplerMTL.mm" +#include "src/dawn_native/metal/ShaderModuleMTL.mm" +#include "src/dawn_native/metal/StagingBufferMTL.mm" +#include "src/dawn_native/metal/SwapChainMTL.mm" +#include "src/dawn_native/metal/TextureMTL.mm" +#include "src/dawn_native/metal/UtilsMetal.mm" diff --git a/gpu/src/dawn/sources/dawn_native_utils_gen.cpp b/gpu/src/dawn/sources/dawn_native_utils_gen.cpp new file mode 100644 index 00000000..88312b2b --- /dev/null +++ b/gpu/src/dawn/sources/dawn_native_utils_gen.cpp @@ -0,0 +1,6 @@ +#include "out/Debug/gen/src/dawn_native/ChainUtils_autogen.cpp" +#include "out/Debug/gen/src/dawn_native/ProcTable.cpp" +#include "out/Debug/gen/src/dawn_native/wgpu_structs_autogen.cpp" +#include "out/Debug/gen/src/dawn_native/ValidationUtils_autogen.cpp" +#include "out/Debug/gen/src/dawn_native/webgpu_absl_format_autogen.cpp" +#include "out/Debug/gen/src/dawn_native/ObjectType_autogen.cpp"