# Copyright 2020 The Dawn Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. DawnJSONGenerator( TARGET "dawn_native_utils" PRINT_NAME "Dawn native utilities" RESULT_VARIABLE "DAWN_NATIVE_UTILS_GEN_SOURCES" ) add_library(dawn_native ${DAWN_DUMMY_FILE}) target_compile_definitions(dawn_native PRIVATE "DAWN_NATIVE_IMPLEMENTATION") if(BUILD_SHARED_LIBS) target_compile_definitions(dawn_native PRIVATE "DAWN_NATIVE_SHARED_LIBRARY") endif() if(DAWN_ENABLE_WGSL) target_link_libraries(dawn_native PRIVATE libtint) endif() target_sources(dawn_native PRIVATE "${DAWN_INCLUDE_DIR}/dawn_native/DawnNative.h" "${DAWN_INCLUDE_DIR}/dawn_native/dawn_native_export.h" ${DAWN_NATIVE_UTILS_GEN_SOURCES} "Adapter.cpp" "Adapter.h" "AttachmentState.cpp" "AttachmentState.h" "BackendConnection.cpp" "BackendConnection.h" "BindGroup.cpp" "BindGroup.h" "BindGroupLayout.cpp" "BindGroupLayout.h" "BindGroupTracker.h" "BindingInfo.cpp" "BindingInfo.h" "BuddyAllocator.cpp" "BuddyAllocator.h" "BuddyMemoryAllocator.cpp" "BuddyMemoryAllocator.h" "Buffer.cpp" "Buffer.h" "CachedObject.cpp" "CachedObject.h" "CommandAllocator.cpp" "CommandAllocator.h" "CommandBuffer.cpp" "CommandBuffer.h" "CommandBufferStateTracker.cpp" "CommandBufferStateTracker.h" "CommandEncoder.cpp" "CommandEncoder.h" "CommandValidation.cpp" "CommandValidation.h" "Commands.cpp" "Commands.h" "ComputePassEncoder.cpp" "ComputePassEncoder.h" "ComputePipeline.cpp" "ComputePipeline.h" "CopyTextureForBrowserHelper.cpp" "CopyTextureForBrowserHelper.h" "CreateReadyPipelineTracker.cpp" "CreateReadyPipelineTracker.h" "Device.cpp" "Device.h" "DynamicUploader.cpp" "DynamicUploader.h" "EncodingContext.cpp" "EncodingContext.h" "EnumClassBitmasks.h" "EnumMaskIterator.h" "Error.cpp" "Error.h" "ErrorData.cpp" "ErrorData.h" "ErrorInjector.cpp" "ErrorInjector.h" "ErrorScope.cpp" "ErrorScope.h" "ErrorScopeTracker.cpp" "ErrorScopeTracker.h" "Extensions.cpp" "Extensions.h" "ObjectContentHasher.cpp" "ObjectContentHasher.h" "Fence.cpp" "Fence.h" "Format.cpp" "Format.h" "Forward.h" "Instance.cpp" "Instance.h" "InternalPipelineStore.h" "IntegerTypes.h" "ObjectBase.cpp" "ObjectBase.h" "PassResourceUsage.cpp" "PassResourceUsage.h" "PassResourceUsageTracker.cpp" "PassResourceUsageTracker.h" "PersistentCache.cpp" "PersistentCache.h" "PerStage.cpp" "PerStage.h" "Pipeline.cpp" "Pipeline.h" "PipelineLayout.cpp" "PipelineLayout.h" "PooledResourceMemoryAllocator.cpp" "PooledResourceMemoryAllocator.h" "ProgrammablePassEncoder.cpp" "ProgrammablePassEncoder.h" "QueryHelper.cpp" "QueryHelper.h" "QuerySet.cpp" "QuerySet.h" "Queue.cpp" "Queue.h" "RenderBundle.cpp" "RenderBundle.h" "RenderBundleEncoder.cpp" "RenderBundleEncoder.h" "RenderEncoderBase.cpp" "RenderEncoderBase.h" "RenderPassEncoder.cpp" "RenderPassEncoder.h" "RenderPipeline.cpp" "RenderPipeline.h" "ResourceHeap.h" "ResourceHeapAllocator.h" "ResourceMemoryAllocation.cpp" "ResourceMemoryAllocation.h" "RingBufferAllocator.cpp" "RingBufferAllocator.h" "Sampler.cpp" "Sampler.h" "ShaderModule.cpp" "ShaderModule.h" "SpirvUtils.cpp" "SpirvUtils.h" "StagingBuffer.cpp" "StagingBuffer.h" "Subresource.cpp" "Subresource.h" "SubresourceStorage.h" "Surface.cpp" "Surface.h" "SwapChain.cpp" "SwapChain.h" "Texture.cpp" "Texture.h" "ToBackend.h" "Toggles.cpp" "Toggles.h" "dawn_platform.h" ) target_link_libraries(dawn_native PUBLIC dawncpp_headers PRIVATE dawn_common dawn_platform dawn_internal_config spirv-cross-core spirv-cross-glsl spirv-cross-hlsl spirv-cross-msl SPIRV-Tools-opt ) if (DAWN_USE_X11) find_package(X11 REQUIRED) target_link_libraries(dawn_native PRIVATE ${X11_LIBRARIES}) endif() if (WIN32) target_link_libraries(dawn_native PRIVATE user32.lib) endif() if (DAWN_ENABLE_D3D12) target_sources(dawn_native PRIVATE "${DAWN_INCLUDE_DIR}/dawn_native/D3D12Backend.h" "d3d12/AdapterD3D12.cpp" "d3d12/AdapterD3D12.h" "d3d12/BackendD3D12.cpp" "d3d12/BackendD3D12.h" "d3d12/BindGroupD3D12.cpp" "d3d12/BindGroupD3D12.h" "d3d12/BindGroupLayoutD3D12.cpp" "d3d12/BindGroupLayoutD3D12.h" "d3d12/BufferD3D12.cpp" "d3d12/BufferD3D12.h" "d3d12/CPUDescriptorHeapAllocationD3D12.cpp" "d3d12/CPUDescriptorHeapAllocationD3D12.h" "d3d12/CommandAllocatorManager.cpp" "d3d12/CommandAllocatorManager.h" "d3d12/CommandBufferD3D12.cpp" "d3d12/CommandBufferD3D12.h" "d3d12/CommandRecordingContext.cpp" "d3d12/CommandRecordingContext.h" "d3d12/ComputePipelineD3D12.cpp" "d3d12/ComputePipelineD3D12.h" "d3d12/D3D12Error.cpp" "d3d12/D3D12Error.h" "d3d12/D3D12Info.cpp" "d3d12/D3D12Info.h" "d3d12/DeviceD3D12.cpp" "d3d12/DeviceD3D12.h" "d3d12/Forward.h" "d3d12/GPUDescriptorHeapAllocationD3D12.cpp" "d3d12/GPUDescriptorHeapAllocationD3D12.h" "d3d12/HeapAllocatorD3D12.cpp" "d3d12/HeapAllocatorD3D12.h" "d3d12/HeapD3D12.cpp" "d3d12/HeapD3D12.h" "d3d12/IntegerTypes.h" "d3d12/NativeSwapChainImplD3D12.cpp" "d3d12/NativeSwapChainImplD3D12.h" "d3d12/PageableD3D12.cpp" "d3d12/PageableD3D12.h" "d3d12/PipelineLayoutD3D12.cpp" "d3d12/PipelineLayoutD3D12.h" "d3d12/PlatformFunctions.cpp" "d3d12/PlatformFunctions.h" "d3d12/QuerySetD3D12.cpp" "d3d12/QuerySetD3D12.h" "d3d12/QueueD3D12.cpp" "d3d12/QueueD3D12.h" "d3d12/RenderPassBuilderD3D12.cpp" "d3d12/RenderPassBuilderD3D12.h" "d3d12/RenderPipelineD3D12.cpp" "d3d12/RenderPipelineD3D12.h" "d3d12/ResidencyManagerD3D12.cpp" "d3d12/ResidencyManagerD3D12.h" "d3d12/ResourceAllocatorManagerD3D12.cpp" "d3d12/ResourceAllocatorManagerD3D12.h" "d3d12/ResourceHeapAllocationD3D12.cpp" "d3d12/ResourceHeapAllocationD3D12.h" "d3d12/SamplerD3D12.cpp" "d3d12/SamplerD3D12.h" "d3d12/SamplerHeapCacheD3D12.cpp" "d3d12/SamplerHeapCacheD3D12.h" "d3d12/ShaderModuleD3D12.cpp" "d3d12/ShaderModuleD3D12.h" "d3d12/ShaderVisibleDescriptorAllocatorD3D12.cpp" "d3d12/ShaderVisibleDescriptorAllocatorD3D12.h" "d3d12/StagingBufferD3D12.cpp" "d3d12/StagingBufferD3D12.h" "d3d12/StagingDescriptorAllocatorD3D12.cpp" "d3d12/StagingDescriptorAllocatorD3D12.h" "d3d12/SwapChainD3D12.cpp" "d3d12/SwapChainD3D12.h" "d3d12/TextureCopySplitter.cpp" "d3d12/TextureCopySplitter.h" "d3d12/TextureD3D12.cpp" "d3d12/TextureD3D12.h" "d3d12/UtilsD3D12.cpp" "d3d12/UtilsD3D12.h" "d3d12/d3d12_platform.h" ) target_link_libraries(dawn_native PRIVATE dxguid.lib) endif() if (DAWN_ENABLE_METAL) target_sources(dawn_native PRIVATE "${DAWN_INCLUDE_DIR}/dawn_native/MetalBackend.h" "Surface_metal.mm" "metal/BackendMTL.h" "metal/BackendMTL.mm" "metal/BindGroupLayoutMTL.h" "metal/BindGroupLayoutMTL.mm" "metal/BindGroupMTL.h" "metal/BindGroupMTL.mm" "metal/BufferMTL.h" "metal/BufferMTL.mm" "metal/CommandBufferMTL.h" "metal/CommandBufferMTL.mm" "metal/CommandRecordingContext.h" "metal/CommandRecordingContext.mm" "metal/ComputePipelineMTL.h" "metal/ComputePipelineMTL.mm" "metal/DeviceMTL.h" "metal/DeviceMTL.mm" "metal/Forward.h" "metal/PipelineLayoutMTL.h" "metal/PipelineLayoutMTL.mm" "metal/QueueMTL.h" "metal/QueueMTL.mm" "metal/QuerySetMTL.h" "metal/QuerySetMTL.mm" "metal/RenderPipelineMTL.h" "metal/RenderPipelineMTL.mm" "metal/SamplerMTL.h" "metal/SamplerMTL.mm" "metal/ShaderModuleMTL.h" "metal/ShaderModuleMTL.mm" "metal/StagingBufferMTL.h" "metal/StagingBufferMTL.mm" "metal/SwapChainMTL.h" "metal/SwapChainMTL.mm" "metal/TextureMTL.h" "metal/TextureMTL.mm" "metal/UtilsMetal.h" "metal/UtilsMetal.mm" ) target_link_libraries(dawn_native PRIVATE "-framework Cocoa" "-framework IOKit" "-framework IOSurface" "-framework QuartzCore" "-framework Metal" ) endif() if (DAWN_ENABLE_NULL) target_sources(dawn_native PRIVATE "${DAWN_INCLUDE_DIR}/dawn_native/NullBackend.h" "null/DeviceNull.cpp" "null/DeviceNull.h" ) endif() if (DAWN_ENABLE_OPENGL) DawnGenerator( SCRIPT "${Dawn_SOURCE_DIR}/generator/opengl_loader_generator.py" PRINT_NAME "OpenGL function loader" ARGS "--gl-xml" "${Dawn_SOURCE_DIR}/third_party/khronos/gl.xml" "--supported-extensions" "${Dawn_SOURCE_DIR}/src/dawn_native/opengl/supported_extensions.json" RESULT_VARIABLE "DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES" ) target_sources(dawn_native PRIVATE "${DAWN_INCLUDE_DIR}/dawn_native/OpenGLBackend.h" ${DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES} "opengl/BackendGL.cpp" "opengl/BackendGL.h" "opengl/BindGroupGL.cpp" "opengl/BindGroupGL.h" "opengl/BindGroupLayoutGL.cpp" "opengl/BindGroupLayoutGL.h" "opengl/BufferGL.cpp" "opengl/BufferGL.h" "opengl/CommandBufferGL.cpp" "opengl/CommandBufferGL.h" "opengl/ComputePipelineGL.cpp" "opengl/ComputePipelineGL.h" "opengl/DeviceGL.cpp" "opengl/DeviceGL.h" "opengl/Forward.h" "opengl/GLFormat.cpp" "opengl/GLFormat.h" "opengl/NativeSwapChainImplGL.cpp" "opengl/NativeSwapChainImplGL.h" "opengl/OpenGLFunctions.cpp" "opengl/OpenGLFunctions.h" "opengl/PersistentPipelineStateGL.cpp" "opengl/PersistentPipelineStateGL.h" "opengl/PipelineGL.cpp" "opengl/PipelineGL.h" "opengl/PipelineLayoutGL.cpp" "opengl/PipelineLayoutGL.h" "opengl/QuerySetGL.cpp" "opengl/QuerySetGL.h" "opengl/QueueGL.cpp" "opengl/QueueGL.h" "opengl/RenderPipelineGL.cpp" "opengl/RenderPipelineGL.h" "opengl/SamplerGL.cpp" "opengl/SamplerGL.h" "opengl/ShaderModuleGL.cpp" "opengl/ShaderModuleGL.h" "opengl/SwapChainGL.cpp" "opengl/SwapChainGL.h" "opengl/TextureGL.cpp" "opengl/TextureGL.h" "opengl/UtilsGL.cpp" "opengl/UtilsGL.h" "opengl/opengl_platform.h" ) target_link_libraries(dawn_native PRIVATE dawn_khronos_platform) endif() if (DAWN_ENABLE_VULKAN) target_sources(dawn_native PRIVATE "${DAWN_INCLUDE_DIR}/dawn_native/VulkanBackend.h" "vulkan/AdapterVk.cpp" "vulkan/AdapterVk.h" "vulkan/BackendVk.cpp" "vulkan/BackendVk.h" "vulkan/BindGroupLayoutVk.cpp" "vulkan/BindGroupLayoutVk.h" "vulkan/BindGroupVk.cpp" "vulkan/BindGroupVk.h" "vulkan/BufferVk.cpp" "vulkan/BufferVk.h" "vulkan/CommandBufferVk.cpp" "vulkan/CommandBufferVk.h" "vulkan/CommandRecordingContext.h" "vulkan/ComputePipelineVk.cpp" "vulkan/ComputePipelineVk.h" "vulkan/DescriptorSetAllocation.h" "vulkan/DescriptorSetAllocator.cpp" "vulkan/DescriptorSetAllocator.h" "vulkan/DeviceVk.cpp" "vulkan/DeviceVk.h" "vulkan/ExternalHandle.h" "vulkan/FencedDeleter.cpp" "vulkan/FencedDeleter.h" "vulkan/Forward.h" "vulkan/NativeSwapChainImplVk.cpp" "vulkan/NativeSwapChainImplVk.h" "vulkan/PipelineLayoutVk.cpp" "vulkan/PipelineLayoutVk.h" "vulkan/QuerySetVk.cpp" "vulkan/QuerySetVk.h" "vulkan/QueueVk.cpp" "vulkan/QueueVk.h" "vulkan/RenderPassCache.cpp" "vulkan/RenderPassCache.h" "vulkan/RenderPipelineVk.cpp" "vulkan/RenderPipelineVk.h" "vulkan/ResourceHeapVk.cpp" "vulkan/ResourceHeapVk.h" "vulkan/ResourceMemoryAllocatorVk.cpp" "vulkan/ResourceMemoryAllocatorVk.h" "vulkan/SamplerVk.cpp" "vulkan/SamplerVk.h" "vulkan/ShaderModuleVk.cpp" "vulkan/ShaderModuleVk.h" "vulkan/StagingBufferVk.cpp" "vulkan/StagingBufferVk.h" "vulkan/SwapChainVk.cpp" "vulkan/SwapChainVk.h" "vulkan/TextureVk.cpp" "vulkan/TextureVk.h" "vulkan/UtilsVulkan.cpp" "vulkan/UtilsVulkan.h" "vulkan/VulkanError.cpp" "vulkan/VulkanError.h" "vulkan/VulkanExtensions.cpp" "vulkan/VulkanExtensions.h" "vulkan/VulkanFunctions.cpp" "vulkan/VulkanFunctions.h" "vulkan/VulkanInfo.cpp" "vulkan/VulkanInfo.h" "vulkan/external_memory/MemoryService.h" "vulkan/external_semaphore/SemaphoreService.h" ) target_link_libraries(dawn_native PUBLIC dawn_vulkan_headers) if (UNIX AND NOT APPLE) target_sources(dawn_native PRIVATE "vulkan/external_memory/MemoryServiceOpaqueFD.cpp" "vulkan/external_semaphore/SemaphoreServiceOpaqueFD.cpp" ) else() target_sources(dawn_native PRIVATE "vulkan/external_memory/MemoryServiceNull.cpp" "vulkan/external_semaphore/SemaphoreServiceNull.cpp" ) endif() endif() # TODO how to do the component build in CMake? target_sources(dawn_native PRIVATE "DawnNative.cpp") if (DAWN_ENABLE_D3D12) target_sources(dawn_native PRIVATE "d3d12/D3D12Backend.cpp") endif() if (DAWN_ENABLE_METAL) target_sources(dawn_native PRIVATE "metal/MetalBackend.mm") endif() if (DAWN_ENABLE_NULL) target_sources(dawn_native PRIVATE "null/NullBackend.cpp") endif() if (DAWN_ENABLE_OPENGL) target_sources(dawn_native PRIVATE "opengl/OpenGLBackend.cpp") endif() if (DAWN_ENABLE_VULKAN) target_sources(dawn_native PRIVATE "vulkan/VulkanBackend.cpp") endif()