# $Id: Makefile.kmk $ ## @file # Sub-Makefile for the dxvk-native library. # # # Copyright (C) 2022-2023 Oracle and/or its affiliates. # # This file is part of VirtualBox base platform packages, as # available from https://www.virtualbox.org. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, in version 3 of the # License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # SPDX-License-Identifier: GPL-3.0-only # SUB_DEPTH = ../../.. include $(KBUILD_PATH)/subheader.kmk # # Targets. # LIBRARIES += VBox-DxVkNativeUtil VBox-DxVkNativeDxVk VBox-DxVkNativeD3D11 DLLS += VBoxDxVk # # Globals. # VBOX_PATH_DXVK := $(PATH_SUB_CURRENT) # The HLSL to Spir-V shader compiler VBOX_GLSLANGVALIDATOR_PATH ?= $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_TRG)/glslang/v11*))) ifeq ($(VBOX_GLSLANGVALIDATOR_PATH),) VBOX_GLSLANGVALIDATOR ?= glslangValidator$(HOSTSUFF_EXE) else VBOX_GLSLANGVALIDATOR ?= $(VBOX_GLSLANGVALIDATOR_PATH)/glslangValidator$(HOSTSUFF_EXE) endif # # Some stuff for compiling shares into header files and making the target depend on these. # ## Internal. ## @param 1 full path to shader source. define def_VBoxDxVkCompileShader $(1)/shaders/$(basename $(notdir $(2))).h: $(2) | $$$$(dir $$$$@) $(VBOX_GLSLANGVALIDATOR) -V --vn "$(basename $(notdir $(2)))" "$$<" -o "$$@" endef ## Process the VBOX_SHADERS for a target. ## @param 1 target name define def_VBoxDxVkCompilerShaders $$(call KB_FN_DO_PASS0_ON_TARGET,$(1)) $(1)_INCS += $$($(1)_0_OUTDIR)/shaders $(1)_BLDDIRS += $$($(1)_0_OUTDIR)/shaders $(1)_INTERMEDIATES := $$(foreach shader,$$($(1)_VBOX_SHADERS) \ ,$$($(1)_0_OUTDIR)/shaders/$$(basename $$(notdir $$(shader))).h) $$(foreach shader,$$($(1)_VBOX_SHADERS),$$(evalcall2 def_VBoxDxVkCompileShader,$$($(1)_0_OUTDIR),$$(shader))) endef # # DXK utilities static library # VBox-DxVkNativeUtil_TEMPLATE = VBoxR3DllNonPedantic VBox-DxVkNativeUtil_DEFS = \ DXVK_NATIVE \ NOMINMAX \ _WIN32_WINNT=0xa00 VBox-DxVkNativeUtil_DEFS += \ DXVK_PLATFORM_LINUX \ DXVK_WSI_HEADLESS VBox-DxVkNativeUtil_CXXFLAGS.linux += \ -std=c++17 -Wno-deprecated-declarations # The latter is for std::iterator in util_bit.h. VBox-DxVkNativeUtil_CXXFLAGS.darwin += \ -std=c++17 VBox-DxVkNativeUtil_INCS = \ $(VBOX_PATH_DXVK) \ $(VBOX_PATH_DXVK)/include/ \ $(VBOX_PATH_DXVK)/src/util/ \ $(VBOX_PATH_DXVK)/include/native/ \ $(VBOX_PATH_DXVK)/include/native/windows \ $(VBOX_PATH_DXVK)/include/native/directx VBox-DxVkNativeUtil_SOURCES = \ src/util/util_env.cpp \ src/util/util_fps_limiter.cpp \ src/util/util_matrix.cpp \ src/util/util_monitor.cpp \ src/util/com/com_guid.cpp \ src/util/com/com_private_data.cpp \ src/util/config/config.cpp \ src/util/log/log.cpp \ src/util/log/log_debug.cpp \ src/util/sha1/sha1.c \ src/util/sha1/sha1_util.cpp \ src/util/sync/sync_recursive.cpp \ src/util/platform/util_luid_linux.cpp \ src/util/platform/util_env_linux.cpp \ src/util/platform/util_string_linux.cpp \ src/util/platform/thread_native.cpp \ src/spirv/spirv_code_buffer.cpp \ src/spirv/spirv_compression.cpp \ src/spirv/spirv_module.cpp \ src/vulkan/vulkan_loader.cpp \ src/vulkan/vulkan_names.cpp \ src/vulkan/vulkan_presenter_headless.cpp \ src/dxgi/dxgi_adapter.cpp \ src/dxgi/dxgi_enums.cpp \ src/dxgi/dxgi_factory.cpp \ src/dxgi/dxgi_format.cpp \ src/dxgi/dxgi_main.cpp \ src/dxgi/dxgi_monitor.cpp \ src/dxgi/dxgi_options.cpp \ src/dxgi/dxgi_output.cpp \ src/dxgi/dxgi_swapchain.cpp \ src/dxbc/dxbc_analysis.cpp \ src/dxbc/dxbc_chunk_isgn.cpp \ src/dxbc/dxbc_chunk_shex.cpp \ src/dxbc/dxbc_common.cpp \ src/dxbc/dxbc_compiler.cpp \ src/dxbc/dxbc_defs.cpp \ src/dxbc/dxbc_decoder.cpp \ src/dxbc/dxbc_header.cpp \ src/dxbc/dxbc_module.cpp \ src/dxbc/dxbc_names.cpp \ src/dxbc/dxbc_options.cpp \ src/dxbc/dxbc_reader.cpp \ src/dxbc/dxbc_util.cpp \ src/dxso/dxso_common.cpp \ src/dxso/dxso_options.cpp \ src/dxso/dxso_module.cpp \ src/dxso/dxso_reader.cpp \ src/dxso/dxso_header.cpp \ src/dxso/dxso_ctab.cpp \ src/dxso/dxso_util.cpp \ src/dxso/dxso_code.cpp \ src/dxso/dxso_tables.cpp \ src/dxso/dxso_decoder.cpp \ src/dxso/dxso_analysis.cpp \ src/dxso/dxso_compiler.cpp \ src/dxso/dxso_enums.cpp \ src/wsi/headless/wsi_mode_headless.cpp \ src/wsi/headless/wsi_monitor_headless.cpp \ src/wsi/headless/wsi_presenter_headless.cpp \ src/wsi/headless/wsi_window_headless.cpp # # Core DXVK library. # VBox-DxVkNativeDxVk_TEMPLATE = VBoxR3DllNonPedantic VBox-DxVkNativeDxVk_DEFS = \ DXVK_NATIVE \ NOMINMAX \ _WIN32_WINNT=0xa00 VBox-DxVkNativeDxVk_DEFS += \ DXVK_PLATFORM_LINUX \ DXVK_WSI_HEADLESS VBox-DxVkNativeDxVk_CXXFLAGS.linux += \ -std=c++17 -Wno-deprecated-declarations # The latter is for std::iterator in util_bit.h. VBox-DxVkNativeDxVk_CXXFLAGS.darwin += \ -std=c++17 VBox-DxVkNativeDxVk_INCS = \ $(VBOX_PATH_DXVK) \ $(VBOX_PATH_DXVK)/include/ \ $(VBOX_PATH_DXVK)/src/util/ \ $(VBOX_PATH_DXVK)/include/native/ \ $(VBOX_PATH_DXVK)/include/native/windows \ $(VBOX_PATH_DXVK)/include/native/directx VBox-DxVkNativeDxVk_SOURCES = \ src/dxvk/dxvk_adapter.cpp \ src/dxvk/dxvk_barrier.cpp \ src/dxvk/dxvk_buffer.cpp \ src/dxvk/dxvk_cmdlist.cpp \ src/dxvk/dxvk_compute.cpp \ src/dxvk/dxvk_context.cpp \ src/dxvk/dxvk_cs.cpp \ src/dxvk/dxvk_data.cpp \ src/dxvk/dxvk_descriptor.cpp \ src/dxvk/dxvk_device.cpp \ src/dxvk/dxvk_device_filter.cpp \ src/dxvk/dxvk_extensions.cpp \ src/dxvk/dxvk_format.cpp \ src/dxvk/dxvk_framebuffer.cpp \ src/dxvk/dxvk_gpu_event.cpp \ src/dxvk/dxvk_gpu_query.cpp \ src/dxvk/dxvk_graphics.cpp \ src/dxvk/dxvk_image.cpp \ src/dxvk/dxvk_instance.cpp \ src/dxvk/dxvk_lifetime.cpp \ src/dxvk/dxvk_main.cpp \ src/dxvk/dxvk_memory.cpp \ src/dxvk/dxvk_meta_blit.cpp \ src/dxvk/dxvk_meta_clear.cpp \ src/dxvk/dxvk_meta_copy.cpp \ src/dxvk/dxvk_meta_mipgen.cpp \ src/dxvk/dxvk_meta_pack.cpp \ src/dxvk/dxvk_meta_resolve.cpp \ src/dxvk/dxvk_options.cpp \ src/dxvk/dxvk_pipecache.cpp \ src/dxvk/dxvk_pipelayout.cpp \ src/dxvk/dxvk_pipemanager.cpp \ src/dxvk/dxvk_queue.cpp \ src/dxvk/dxvk_renderpass.cpp \ src/dxvk/dxvk_resource.cpp \ src/dxvk/dxvk_sampler.cpp \ src/dxvk/dxvk_shader.cpp \ src/dxvk/dxvk_shader_key.cpp \ src/dxvk/dxvk_signal.cpp \ src/dxvk/dxvk_spec_const.cpp \ src/dxvk/dxvk_staging.cpp \ src/dxvk/dxvk_state_cache.cpp \ src/dxvk/dxvk_stats.cpp \ src/dxvk/dxvk_swapchain_blitter.cpp \ src/dxvk/dxvk_unbound.cpp \ src/dxvk/dxvk_util.cpp \ src/dxvk/hud/dxvk_hud.cpp \ src/dxvk/hud/dxvk_hud_font.cpp \ src/dxvk/hud/dxvk_hud_item.cpp \ src/dxvk/hud/dxvk_hud_renderer.cpp \ src/dxvk/platform/dxvk_headless_exts.cpp VBox-DxVkNativeDxVk_VBOX_SHADERS := \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_blit_frag_1d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_blit_frag_2d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_blit_frag_3d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_buffer_f.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_buffer_u.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image1d_f.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image1d_u.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image1darr_f.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image1darr_u.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image2d_f.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image2d_u.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image2darr_f.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image2darr_u.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image3d_f.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_clear_image3d_u.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_buffer_image.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_color_1d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_color_2d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_color_ms.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_depth_1d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_depth_2d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_depth_ms.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_depth_stencil_1d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_depth_stencil_2d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_copy_depth_stencil_ms.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_fullscreen_geom.geom \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_fullscreen_layer_vert.vert \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_fullscreen_vert.vert \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_pack_d24s8.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_pack_d32s8.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_present_frag.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_present_frag_blit.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_present_frag_ms.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_present_frag_ms_amd.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_present_vert.vert \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_resolve_frag_d.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_resolve_frag_ds.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_resolve_frag_f.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_resolve_frag_f_amd.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_resolve_frag_i.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_resolve_frag_u.frag \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_unpack_d24s8.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_unpack_d24s8_as_d32s8.comp \ $(PATH_SUB_CURRENT)/src/dxvk/shaders/dxvk_unpack_d32s8.comp \ $(PATH_SUB_CURRENT)/src/dxvk/hud/shaders/hud_line_frag.frag \ $(PATH_SUB_CURRENT)/src/dxvk/hud/shaders/hud_line_vert.vert \ $(PATH_SUB_CURRENT)/src/dxvk/hud/shaders/hud_text_frag.frag \ $(PATH_SUB_CURRENT)/src/dxvk/hud/shaders/hud_text_vert.vert $(evalcall2 def_VBoxDxVkCompilerShaders,VBox-DxVkNativeDxVk) # # DXVK D3D11 interface library # VBox-DxVkNativeD3D11_TEMPLATE = VBoxR3DllNonPedantic VBox-DxVkNativeD3D11_DEFS = \ DXVK_NATIVE \ NOMINMAX \ _WIN32_WINNT=0xa00 VBox-DxVkNativeD3D11_DEFS += \ DXVK_PLATFORM_LINUX \ DXVK_WSI_HEADLESS VBox-DxVkNativeD3D11_CXXFLAGS.linux += \ -std=c++17 -Wno-deprecated-declarations # The latter is for std::iterator in util_bit.h. VBox-DxVkNativeD3D11_CXXFLAGS.darwin += \ -std=c++17 VBox-DxVkNativeD3D11_INCS = \ $(VBOX_PATH_DXVK) \ $(VBOX_PATH_DXVK)/include/ \ $(VBOX_PATH_DXVK)/src/util/ \ $(VBOX_PATH_DXVK)/include/native/ \ $(VBOX_PATH_DXVK)/include/native/windows \ $(VBOX_PATH_DXVK)/include/native/directx VBox-DxVkNativeD3D11_SOURCES = \ src/dxgi/dxgi_format.cpp \ src/dxgi/dxgi_monitor.cpp \ src/dxgi/dxgi_swapchain.cpp \ src/d3d11/d3d11_annotation.cpp \ src/d3d11/d3d11_blend.cpp \ src/d3d11/d3d11_buffer.cpp \ src/d3d11/d3d11_class_linkage.cpp \ src/d3d11/d3d11_cmdlist.cpp \ src/d3d11/d3d11_context.cpp \ src/d3d11/d3d11_context_def.cpp \ src/d3d11/d3d11_context_ext.cpp \ src/d3d11/d3d11_context_imm.cpp \ src/d3d11/d3d11_cuda.cpp \ src/d3d11/d3d11_depth_stencil.cpp \ src/d3d11/d3d11_device.cpp \ src/d3d11/d3d11_enums.cpp \ src/d3d11/d3d11_initializer.cpp \ src/d3d11/d3d11_input_layout.cpp \ src/d3d11/d3d11_interop.cpp \ src/d3d11/d3d11_main.cpp \ src/d3d11/d3d11_options.cpp \ src/d3d11/d3d11_query.cpp \ src/d3d11/d3d11_rasterizer.cpp \ src/d3d11/d3d11_resource.cpp \ src/d3d11/d3d11_sampler.cpp \ src/d3d11/d3d11_shader.cpp \ src/d3d11/d3d11_state.cpp \ src/d3d11/d3d11_state_object.cpp \ src/d3d11/d3d11_swapchain.cpp \ src/d3d11/d3d11_texture.cpp \ src/d3d11/d3d11_util.cpp \ src/d3d11/d3d11_video.cpp \ src/d3d11/d3d11_view_dsv.cpp \ src/d3d11/d3d11_view_rtv.cpp \ src/d3d11/d3d11_view_srv.cpp \ src/d3d11/d3d11_view_uav.cpp \ src/d3d10/d3d10_blend.cpp \ src/d3d10/d3d10_buffer.cpp \ src/d3d10/d3d10_depth_stencil.cpp \ src/d3d10/d3d10_device.cpp \ src/d3d10/d3d10_input_layout.cpp \ src/d3d10/d3d10_multithread.cpp \ src/d3d10/d3d10_query.cpp \ src/d3d10/d3d10_rasterizer.cpp \ src/d3d10/d3d10_sampler.cpp \ src/d3d10/d3d10_texture.cpp \ src/d3d10/d3d10_util.cpp \ src/d3d10/d3d10_view_dsv.cpp \ src/d3d10/d3d10_view_rtv.cpp \ src/d3d10/d3d10_view_srv.cpp VBox-DxVkNativeD3D11_VBOX_SHADERS := \ $(PATH_SUB_CURRENT)/src/d3d11/shaders/d3d11_video_blit_frag.frag \ $(PATH_SUB_CURRENT)/src/d3d11/shaders/d3d11_video_blit_vert.vert $(evalcall2 def_VBoxDxVkCompilerShaders,VBox-DxVkNativeD3D11) # # VBoxDxVk - Shared Object / DLL version. # VBoxDxVk_TEMPLATE = VBoxR3DllNonPedantic VBoxDxVk_DEFS = \ DXVK_NATIVE \ NOMINMAX \ _WIN32_WINNT=0xa00 VBoxDxVk_INCS = \ $(VBOX_PATH_DXVK) \ $(VBOX_PATH_DXVK)/include/ \ $(VBOX_PATH_DXVK)/src/util/ \ $(VBOX_PATH_DXVK)/include/native/ \ $(VBOX_PATH_DXVK)/include/native/windows \ $(VBOX_PATH_DXVK)/include/native/directx VBoxDxVk_CXXFLAGS.linux += \ -std=c++17 VBoxDxVk_SOURCES = \ VBoxDxVkDeps.cpp VBoxDxVk_LIBS = \ $(PATH_STAGE_LIB)/VBox-DxVkNativeD3D11$(VBOX_SUFF_LIB) \ $(PATH_STAGE_LIB)/VBox-DxVkNativeDxVk$(VBOX_SUFF_LIB) \ $(PATH_STAGE_LIB)/VBox-DxVkNativeUtil$(VBOX_SUFF_LIB) \ $(LIB_RUNTIME) include $(FILE_KBUILD_SUB_FOOTER)