gpu: implement source inclusion for most Vulkan/D3D12/OpenGL backends

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2021-11-30 14:29:53 -07:00
parent 3f56f3f964
commit e1d17f461e

View file

@ -310,50 +310,53 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti
// TODO(build-system): allow use_angle here. See src/dawn_native/BUILD.gn // TODO(build-system): allow use_angle here. See src/dawn_native/BUILD.gn
// TODO(build-system): could allow use_swiftshader here. See src/dawn_native/BUILD.gn // TODO(build-system): could allow use_swiftshader here. See src/dawn_native/BUILD.gn
// TODO(build-system): windows if (options.d3d12.?) {
// if (dawn_enable_d3d12) { // TODO(build-system): windows
// libs += [ "dxguid.lib" ] // libs += [ "dxguid.lib" ]
// sources += [ for ([_][]const u8{
// "d3d12/AdapterD3D12.cpp", "src/dawn_native/d3d12/AdapterD3D12.cpp",
// "d3d12/BackendD3D12.cpp", "src/dawn_native/d3d12/BackendD3D12.cpp",
// "d3d12/BindGroupD3D12.cpp", "src/dawn_native/d3d12/BindGroupD3D12.cpp",
// "d3d12/BindGroupLayoutD3D12.cpp", "src/dawn_native/d3d12/BindGroupLayoutD3D12.cpp",
// "d3d12/BufferD3D12.cpp", "src/dawn_native/d3d12/BufferD3D12.cpp",
// "d3d12/CPUDescriptorHeapAllocationD3D12.cpp", "src/dawn_native/d3d12/CPUDescriptorHeapAllocationD3D12.cpp",
// "d3d12/CommandAllocatorManager.cpp", "src/dawn_native/d3d12/CommandAllocatorManager.cpp",
// "d3d12/CommandBufferD3D12.cpp", "src/dawn_native/d3d12/CommandBufferD3D12.cpp",
// "d3d12/CommandRecordingContext.cpp", "src/dawn_native/d3d12/CommandRecordingContext.cpp",
// "d3d12/ComputePipelineD3D12.cpp", "src/dawn_native/d3d12/ComputePipelineD3D12.cpp",
// "d3d12/D3D11on12Util.cpp", "src/dawn_native/d3d12/D3D11on12Util.cpp",
// "d3d12/D3D12Error.cpp", "src/dawn_native/d3d12/D3D12Error.cpp",
// "d3d12/D3D12Info.cpp", "src/dawn_native/d3d12/D3D12Info.cpp",
// "d3d12/DeviceD3D12.cpp", "src/dawn_native/d3d12/DeviceD3D12.cpp",
// "d3d12/GPUDescriptorHeapAllocationD3D12.cpp", "src/dawn_native/d3d12/GPUDescriptorHeapAllocationD3D12.cpp",
// "d3d12/HeapAllocatorD3D12.cpp", "src/dawn_native/d3d12/HeapAllocatorD3D12.cpp",
// "d3d12/HeapD3D12.cpp", "src/dawn_native/d3d12/HeapD3D12.cpp",
// "d3d12/NativeSwapChainImplD3D12.cpp", "src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp",
// "d3d12/PageableD3D12.cpp", "src/dawn_native/d3d12/PageableD3D12.cpp",
// "d3d12/PipelineLayoutD3D12.cpp", "src/dawn_native/d3d12/PipelineLayoutD3D12.cpp",
// "d3d12/PlatformFunctions.cpp", "src/dawn_native/d3d12/PlatformFunctions.cpp",
// "d3d12/QuerySetD3D12.cpp", "src/dawn_native/d3d12/QuerySetD3D12.cpp",
// "d3d12/QueueD3D12.cpp", "src/dawn_native/d3d12/QueueD3D12.cpp",
// "d3d12/RenderPassBuilderD3D12.cpp", "src/dawn_native/d3d12/RenderPassBuilderD3D12.cpp",
// "d3d12/RenderPipelineD3D12.cpp", "src/dawn_native/d3d12/RenderPipelineD3D12.cpp",
// "d3d12/ResidencyManagerD3D12.cpp", "src/dawn_native/d3d12/ResidencyManagerD3D12.cpp",
// "d3d12/ResourceAllocatorManagerD3D12.cpp", "src/dawn_native/d3d12/ResourceAllocatorManagerD3D12.cpp",
// "d3d12/ResourceHeapAllocationD3D12.cpp", "src/dawn_native/d3d12/ResourceHeapAllocationD3D12.cpp",
// "d3d12/SamplerD3D12.cpp", "src/dawn_native/d3d12/SamplerD3D12.cpp",
// "d3d12/SamplerHeapCacheD3D12.cpp", "src/dawn_native/d3d12/SamplerHeapCacheD3D12.cpp",
// "d3d12/ShaderModuleD3D12.cpp", "src/dawn_native/d3d12/ShaderModuleD3D12.cpp",
// "d3d12/ShaderVisibleDescriptorAllocatorD3D12.cpp", "src/dawn_native/d3d12/ShaderVisibleDescriptorAllocatorD3D12.cpp",
// "d3d12/StagingBufferD3D12.cpp", "src/dawn_native/d3d12/StagingBufferD3D12.cpp",
// "d3d12/StagingDescriptorAllocatorD3D12.cpp", "src/dawn_native/d3d12/StagingDescriptorAllocatorD3D12.cpp",
// "d3d12/SwapChainD3D12.cpp", "src/dawn_native/d3d12/SwapChainD3D12.cpp",
// "d3d12/TextureCopySplitter.cpp", "src/dawn_native/d3d12/TextureCopySplitter.cpp",
// "d3d12/TextureD3D12.cpp", "src/dawn_native/d3d12/TextureD3D12.cpp",
// "d3d12/UtilsD3D12.cpp", "src/dawn_native/d3d12/UtilsD3D12.cpp",
// ] }) |path| {
// } var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
lib.addCSourceFile(abs_path, flags.items);
}
}
if (options.metal.?) { if (options.metal.?) {
lib.linkFramework("Metal"); lib.linkFramework("Metal");
lib.linkFramework("CoreGraphics"); lib.linkFramework("CoreGraphics");
@ -406,117 +409,129 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti
lib.addCSourceFile(abs_path, flags.items); lib.addCSourceFile(abs_path, flags.items);
} }
// TODO(build-system): opengl, vulkan if (options.desktop_gl.? or options.vulkan.?) {
// if (dawn_enable_opengl || dawn_enable_vulkan) { for ([_][]const u8{
// sources += [ "src/dawn_native/SpirvValidation.cpp",
// "SpirvValidation.cpp", }) |path| {
// ] var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
// } lib.addCSourceFile(abs_path, flags.items);
}
}
// TODO(build-system): opengl if (options.desktop_gl.?) {
// if (dawn_enable_opengl) { // TODO(build-system): opengl
// public_deps += [ // public_deps += [
// ":dawn_native_opengl_loader_gen", // ":dawn_native_opengl_loader_gen",
// "${dawn_root}/third_party/khronos:khronos_platform", // "${dawn_root}/third_party/khronos:khronos_platform",
// ] // ]
// sources += get_target_outputs(":dawn_native_opengl_loader_gen") // sources += get_target_outputs(":dawn_native_opengl_loader_gen")
// sources += [ for ([_][]const u8{
// "opengl/BackendGL.cpp", "src/dawn_native/opengl/BackendGL.cpp",
// "opengl/BindGroupGL.cpp", "src/dawn_native/opengl/BindGroupGL.cpp",
// "opengl/BindGroupLayoutGL.cpp", "src/dawn_native/opengl/BindGroupLayoutGL.cpp",
// "opengl/BufferGL.cpp", "src/dawn_native/opengl/BufferGL.cpp",
// "opengl/CommandBufferGL.cpp", "src/dawn_native/opengl/CommandBufferGL.cpp",
// "opengl/ComputePipelineGL.cpp", "src/dawn_native/opengl/ComputePipelineGL.cpp",
// "opengl/DeviceGL.cpp", "src/dawn_native/opengl/DeviceGL.cpp",
// "opengl/GLFormat.cpp", "src/dawn_native/opengl/GLFormat.cpp",
// "opengl/NativeSwapChainImplGL.cpp", "src/dawn_native/opengl/NativeSwapChainImplGL.cpp",
// "opengl/OpenGLFunctions.cpp", "src/dawn_native/opengl/OpenGLFunctions.cpp",
// "opengl/OpenGLVersion.cpp", "src/dawn_native/opengl/OpenGLVersion.cpp",
// "opengl/PersistentPipelineStateGL.cpp", "src/dawn_native/opengl/PersistentPipelineStateGL.cpp",
// "opengl/PipelineGL.cpp", "src/dawn_native/opengl/PipelineGL.cpp",
// "opengl/PipelineLayoutGL.cpp", "src/dawn_native/opengl/PipelineLayoutGL.cpp",
// "opengl/QuerySetGL.cpp", "src/dawn_native/opengl/QuerySetGL.cpp",
// "opengl/QueueGL.cpp", "src/dawn_native/opengl/QueueGL.cpp",
// "opengl/RenderPipelineGL.cpp", "src/dawn_native/opengl/RenderPipelineGL.cpp",
// "opengl/SamplerGL.cpp", "src/dawn_native/opengl/SamplerGL.cpp",
// "opengl/ShaderModuleGL.cpp", "src/dawn_native/opengl/ShaderModuleGL.cpp",
// "opengl/SpirvUtils.cpp", "src/dawn_native/opengl/SpirvUtils.cpp",
// "opengl/SwapChainGL.cpp", "src/dawn_native/opengl/SwapChainGL.cpp",
// "opengl/TextureGL.cpp", "src/dawn_native/opengl/TextureGL.cpp",
// "opengl/UtilsGL.cpp", "src/dawn_native/opengl/UtilsGL.cpp",
// ] }) |path| {
// } var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
lib.addCSourceFile(abs_path, flags.items);
}
}
// TODO(build-system): vulkan if (options.vulkan.?) {
// if (dawn_enable_vulkan) { // TODO(build-system): vulkan
// public_deps += [ "${dawn_root}/third_party/khronos:vulkan_headers" ] // public_deps += [ "${dawn_root}/third_party/khronos:vulkan_headers" ]
// sources += [ for ([_][]const u8{
// "vulkan/AdapterVk.cpp", "src/dawn_native/vulkan/AdapterVk.cpp",
// "vulkan/BackendVk.cpp", "src/dawn_native/vulkan/BackendVk.cpp",
// "vulkan/BindGroupLayoutVk.cpp", "src/dawn_native/vulkan/BindGroupLayoutVk.cpp",
// "vulkan/BindGroupVk.cpp", "src/dawn_native/vulkan/BindGroupVk.cpp",
// "vulkan/BufferVk.cpp", "src/dawn_native/vulkan/BufferVk.cpp",
// "vulkan/CommandBufferVk.cpp", "src/dawn_native/vulkan/CommandBufferVk.cpp",
// "vulkan/ComputePipelineVk.cpp", "src/dawn_native/vulkan/ComputePipelineVk.cpp",
// "vulkan/DescriptorSetAllocator.cpp", "src/dawn_native/vulkan/DescriptorSetAllocator.cpp",
// "vulkan/DeviceVk.cpp", "src/dawn_native/vulkan/DeviceVk.cpp",
// "vulkan/FencedDeleter.cpp", "src/dawn_native/vulkan/FencedDeleter.cpp",
// "vulkan/NativeSwapChainImplVk.cpp", "src/dawn_native/vulkan/NativeSwapChainImplVk.cpp",
// "vulkan/PipelineLayoutVk.cpp", "src/dawn_native/vulkan/PipelineLayoutVk.cpp",
// "vulkan/QuerySetVk.cpp", "src/dawn_native/vulkan/QuerySetVk.cpp",
// "vulkan/QueueVk.cpp", "src/dawn_native/vulkan/QueueVk.cpp",
// "vulkan/RenderPassCache.cpp", "src/dawn_native/vulkan/RenderPassCache.cpp",
// "vulkan/RenderPipelineVk.cpp", "src/dawn_native/vulkan/RenderPipelineVk.cpp",
// "vulkan/ResourceHeapVk.cpp", "src/dawn_native/vulkan/ResourceHeapVk.cpp",
// "vulkan/ResourceMemoryAllocatorVk.cpp", "src/dawn_native/vulkan/ResourceMemoryAllocatorVk.cpp",
// "vulkan/SamplerVk.cpp", "src/dawn_native/vulkan/SamplerVk.cpp",
// "vulkan/ShaderModuleVk.cpp", "src/dawn_native/vulkan/ShaderModuleVk.cpp",
// "vulkan/StagingBufferVk.cpp", "src/dawn_native/vulkan/StagingBufferVk.cpp",
// "vulkan/SwapChainVk.cpp", "src/dawn_native/vulkan/SwapChainVk.cpp",
// "vulkan/TextureVk.cpp", "src/dawn_native/vulkan/TextureVk.cpp",
// "vulkan/UtilsVulkan.cpp", "src/dawn_native/vulkan/UtilsVulkan.cpp",
// "vulkan/VulkanError.cpp", "src/dawn_native/vulkan/VulkanError.cpp",
// "vulkan/VulkanExtensions.cpp", "src/dawn_native/vulkan/VulkanExtensions.cpp",
// "vulkan/VulkanFunctions.cpp", "src/dawn_native/vulkan/VulkanFunctions.cpp",
// "vulkan/VulkanInfo.cpp", "src/dawn_native/vulkan/VulkanInfo.cpp",
// ] }) |path| {
var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
lib.addCSourceFile(abs_path, flags.items);
}
}
// TODO(build-system): linux, fuschia, other // TODO(build-system): linux, fuschia, other
// if (is_chromeos) { // if (is_chromeos) {
// sources += [ // sources += [
// "vulkan/external_memory/MemoryServiceDmaBuf.cpp", // "src/dawn_native/vulkan/external_memory/MemoryServiceDmaBuf.cpp",
// "vulkan/external_semaphore/SemaphoreServiceFD.cpp", // "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceFD.cpp",
// ] // ]
// defines += [ "DAWN_USE_SYNC_FDS" ] // defines += [ "DAWN_USE_SYNC_FDS" ]
// } else if (is_linux) { // } else if (is_linux) {
// sources += [ // sources += [
// "vulkan/external_memory/MemoryServiceOpaqueFD.cpp", // "src/dawn_native/vulkan/external_memory/MemoryServiceOpaqueFD.cpp",
// "vulkan/external_semaphore/SemaphoreServiceFD.cpp", // "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceFD.cpp",
// ] // ]
// } else if (is_fuchsia) { // } else if (is_fuchsia) {
// sources += [ // sources += [
// "vulkan/external_memory/MemoryServiceZirconHandle.cpp", // "src/dawn_native/vulkan/external_memory/MemoryServiceZirconHandle.cpp",
// "vulkan/external_semaphore/SemaphoreServiceZirconHandle.cpp", // "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceZirconHandle.cpp",
// ] // ]
// } else { // } else {
// sources += [ // sources += [
// "vulkan/external_memory/MemoryServiceNull.cpp", // "src/dawn_native/vulkan/external_memory/MemoryServiceNull.cpp",
// "vulkan/external_semaphore/SemaphoreServiceNull.cpp", // "src/dawn_native/vulkan/external_semaphore/SemaphoreServiceNull.cpp",
// ] // ]
// } // }
// TODO(build-system): fuschia: add is_fuchsia here from upstream source file // TODO(build-system): fuschia: add is_fuchsia here from upstream source file
// TODO(build-system): vulkan if (options.vulkan.?) {
// if (enable_vulkan_validation_layers) { // TODO(build-system): vulkan
// defines += [ // if (enable_vulkan_validation_layers) {
// "DAWN_ENABLE_VULKAN_VALIDATION_LAYERS", // defines += [
// "DAWN_VK_DATA_DIR=\"$vulkan_data_subdir\"", // "DAWN_ENABLE_VULKAN_VALIDATION_LAYERS",
// ] // "DAWN_VK_DATA_DIR=\"$vulkan_data_subdir\"",
// } // ]
// if (enable_vulkan_loader) { // }
// data_deps += [ "${dawn_vulkan_loader_dir}:libvulkan" ] // if (enable_vulkan_loader) {
// } // data_deps += [ "${dawn_vulkan_loader_dir}:libvulkan" ]
// }
}
// TODO(build-system): swiftshader
// if (use_swiftshader) { // if (use_swiftshader) {
// data_deps += [ // data_deps += [
// "${dawn_swiftshader_dir}/src/Vulkan:icd_file", // "${dawn_swiftshader_dir}/src/Vulkan:icd_file",
@ -529,14 +544,16 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti
// } // }
// } // }
// TODO(build-system): opengl if (options.opengl_es.?) {
// if (use_angle) { // TODO(build-system): gles
// data_deps += [ // if (use_angle) {
// "${dawn_angle_dir}:libEGL", // data_deps += [
// "${dawn_angle_dir}:libGLESv2", // "${dawn_angle_dir}:libEGL",
// ] // "${dawn_angle_dir}:libGLESv2",
// } // ]
// } // }
// }
}
for ([_][]const u8{ for ([_][]const u8{
"src/dawn_native/DawnNative.cpp", "src/dawn_native/DawnNative.cpp",
@ -546,27 +563,39 @@ fn buildLibDawnNative(b: *Builder, step: *std.build.LibExeObjStep, options: Opti
lib.addCSourceFile(abs_path, flags.items); lib.addCSourceFile(abs_path, flags.items);
} }
// TODO(build-system): d3d12 if (options.d3d12.?) {
// if (dawn_enable_d3d12) { for ([_][]const u8{
// sources += [ "d3d12/D3D12Backend.cpp" ] "src/dawn_native/d3d12/D3D12Backend.cpp",
// } }) |path| {
// TODO(build-system): opengl var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
// if (dawn_enable_opengl) { lib.addCSourceFile(abs_path, flags.items);
// sources += [ "opengl/OpenGLBackend.cpp" ] }
// } }
// TODO(build-system): vulkan if (options.desktop_gl.?) {
// if (dawn_enable_vulkan) { for ([_][]const u8{
// sources += [ "vulkan/VulkanBackend.cpp" ] "src/dawn_native/opengl/OpenGLBackend.cpp",
// if (enable_vulkan_validation_layers) { }) |path| {
// data_deps = var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
// [ "${dawn_vulkan_validation_layers_dir}:vulkan_validation_layers" ] lib.addCSourceFile(abs_path, flags.items);
// if (!is_android) { }
// data_deps += }
// [ "${dawn_vulkan_validation_layers_dir}:vulkan_gen_json_files" ] if (options.vulkan.?) {
// } for ([_][]const u8{
// } "src/dawn_native/vulkan/VulkanBackend.cpp",
// } }) |path| {
// } var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
lib.addCSourceFile(abs_path, flags.items);
}
// TODO(build-system): vulkan
// if (enable_vulkan_validation_layers) {
// data_deps =
// [ "${dawn_vulkan_validation_layers_dir}:vulkan_validation_layers" ]
// if (!is_android) {
// data_deps +=
// [ "${dawn_vulkan_validation_layers_dir}:vulkan_gen_json_files" ]
// }
// }
}
return lib; return lib;
} }
@ -1335,15 +1364,23 @@ fn buildLibDawnUtils(b: *Builder, step: *std.build.LibExeObjStep, options: Optio
} }
} }
// TODO(build-system): opengl if (options.desktop_gl.?) {
// if (dawn_enable_opengl) { for ([_][]const u8{
// sources += [ "OpenGLBinding.cpp" ] "src/utils/OpenGLBinding.cpp",
// } }) |path| {
var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
lib.addCSourceFile(abs_path, flags.items);
}
}
// TODO(build-system): vulkan if (options.vulkan.?) {
// if (dawn_enable_vulkan) { for ([_][]const u8{
// sources += [ "VulkanBinding.cpp" ] "src/utils/VulkanBinding.cpp",
// } }) |path| {
var abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), "libs/dawn", path }) catch unreachable;
lib.addCSourceFile(abs_path, flags.items);
}
}
return lib; return lib;
} }