GPUOpen-Effects / FidelityFX-FSR2

FidelityFX Super Resolution 2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

UE5.3 FSR2 compilation issue for XSX platform

yurabroy opened this issue · comments

After few changes for XSX platform, getting next linking errors:
Can anyone help with this?

Module.FSR2TemporalUpscaling.cpp.obj : error LNK2019: unresolved external symbol ffxFsr2GetScratchMemorySizeDX12 referenced in function "public: virtual struct UE::Renderer::Private::ITemporalUpscaler::FOutputs __cdecl FFSR2TemporalUpscaler::AddPasses(class FRDGBuilder &,class FSceneView const &,struct UE::Renderer::Private::ITemporalUpscaler::FInputs const &)const " (?AddPasses@FFSR2TemporalUpscaler@@UEBA?AUFOutputs@ITemporalUpscaler@Private@Renderer@UE@@AEAVFRDGBuilder@@AEBVFSceneView@@AEBUFInputs@3456@@Z)
Module.FSR2TemporalUpscaling.cpp.obj : error LNK2019: unresolved external symbol ffxFsr2GetInterfaceDX12 referenced in function "public: virtual struct UE::Renderer::Private::ITemporalUpscaler::FOutputs __cdecl FFSR2TemporalUpscaler::AddPasses(class FRDGBuilder &,class FSceneView const &,struct UE::Renderer::Private::ITemporalUpscaler::FInputs const &)const " (?AddPasses@FFSR2TemporalUpscaler@@UEBA?AUFOutputs@ITemporalUpscaler@Private@Renderer@UE@@AEAVFRDGBuilder@@AEBVFSceneView@@AEBUFInputs@3456@@Z)
Module.FSR2TemporalUpscaling.cpp.obj : error LNK2019: unresolved external symbol ffxGetDeviceDX12 referenced in function "public: virtual struct UE::Renderer::Private::ITemporalUpscaler::FOutputs __cdecl FFSR2TemporalUpscaler::AddPasses(class FRDGBuilder &,class FSceneView const &,struct UE::Renderer::Private::ITemporalUpscaler::FInputs const &)const " (?AddPasses@FFSR2TemporalUpscaler@@UEBA?AUFOutputs@ITemporalUpscaler@Private@Renderer@UE@@AEAVFRDGBuilder@@AEBVFSceneView@@AEBUFInputs@3456@@Z)
Module.FSR2TemporalUpscaling.cpp.obj : error LNK2019: unresolved external symbol ffxGetCommandListDX12 referenced in function "public: __cdecl `public: virtual struct UE::Renderer::Private::ITemporalUpscaler::FOutputs __cdecl FFSR2TemporalUpscaler::AddPasses(class FRDGBuilder &,class FSceneView const &,struct Renderer::Private::ITemporalUpscaler::FOutputs::FInputs const &)const '[::K]::<lambda_1>::operator()(class FRHICommandListImmediate &)const " (??R<lambda_1>@?IK@??AddPasses@FFSR2TemporalUpscaler@@UEBA?AUFOutputs@ITemporalUpscaler@Private@Renderer@UE@@AEAVFRDGBuilder@@AEBVFSceneView@@AEBUFInputs@4567@@Z@QEBA@AEAVFRHICommandListImmediate@@@Z)
Module.FSR2TemporalUpscaling.cpp.obj : error LNK2019: unresolved external symbol ffxGetResourceDX12 referenced in function "public: __cdecl `public: virtual struct UE::Renderer::Private::ITemporalUpscaler::FOutputs __cdecl FFSR2TemporalUpscaler::AddPasses(class FRDGBuilder &,class FSceneView const &,struct Renderer::Private::ITemporalUpscaler::FOutputs::FInputs const &)const '[::K]::<lambda_1>::operator()(class FRHICommandListImmediate &)const " (??R<lambda_1>@?IK@??AddPasses@FFSR2TemporalUpscaler@@UEBA?AUFOutputs@ITemporalUpscaler@Private@Renderer@UE@@AEAVFRDGBuilder@@AEBVFSceneView@@AEBUFInputs@4567@@Z@QEBA@AEAVFRHICommandListImmediate@@@Z)

Changes of FSR2TemporalUpscaling.Build.cs:

public class FSR2TemporalUpscaling : ModuleRules
{
	public FSR2TemporalUpscaling(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicIncludePaths.AddRange(
			new string[] {
				// ... add public include paths required here ...
				EngineDirectory + "/Source/Runtime/Renderer/Private",
			}
		);

		PublicDependencyModuleNames.AddRange(
			new string[]
			{
				"Engine",
				// ... add other public dependencies that you statically link with here ...
			}
		);


		PrivateDependencyModuleNames.AddRange(
			new string[]
			{
				"Core",
				"Engine",
				"Projects",
				"RenderCore",
				"Renderer",
				"RHI",
				"Landscape",
				"CoreUObject",
				"EngineSettings",
				"DeveloperSettings",
				"FFXFSR2Api"
				// ... add private dependencies that you statically link with here ...	
			}
        );

		if (Target.Platform.IsInGroup(UnrealPlatformGroup.Microsoft))
		{
			PrivateDefinitions.Add("FSR2_SUPPORT_HALF=1");
		}
		else
		{
			PrivateDefinitions.Add("FSR2_SUPPORT_HALF=0");
		}

		if (Target.Platform.IsInGroup(UnrealPlatformGroup.Microsoft))
		{
			PrivateDependencyModuleNames.AddRange(
				new string[]
				{
					"FSR2TemporalUpscalingD3D12",
					"FFXFSR2D3D12"
				}
			);

			PrivateDefinitions.Add("FSR2_ENABLE_D3D12=1");
		}
		else
		{
			PrivateDefinitions.Add("FSR2_ENABLE_D3D12=0");
		}

		bool bEnableVulkan = false;
		if (Target.Platform.IsInGroup(UnrealPlatformGroup.Windows)
			|| Target.Platform.IsInGroup(UnrealPlatformGroup.Android))
		{
			AddEngineThirdPartyPrivateStaticDependencies(Target, "Vulkan");
			bEnableVulkan = true;
		}
		else if (Target.IsInPlatformGroup(UnrealPlatformGroup.Unix))
		{
			if (Target.IsInPlatformGroup(UnrealPlatformGroup.Linux))
			{
				PrivateDependencyModuleNames.Add("ApplicationCore");
				AddEngineThirdPartyPrivateStaticDependencies(Target, "SDL2");

				string VulkanSDKPath = Environment.GetEnvironmentVariable("VULKAN_SDK");
				bool bSDKInstalled = !String.IsNullOrEmpty(VulkanSDKPath);
				if (BuildHostPlatform.Current.Platform != UnrealTargetPlatform.Linux || !bSDKInstalled)
				{
					AddEngineThirdPartyPrivateStaticDependencies(Target, "Vulkan");
				}
				else
				{
					PrivateIncludePaths.Add(VulkanSDKPath + "/include");
					PrivateIncludePaths.Add(VulkanSDKPath + "/include/vulkan");
					PublicAdditionalLibraries.Add(Path.Combine(VulkanSDKPath, "lib", "libvulkan.so"));
				}
			}
			else
			{
				AddEngineThirdPartyPrivateStaticDependencies(Target, "VkHeadersExternal");
			}
			bEnableVulkan = true;
		}

		if (bEnableVulkan)
		{
			PrivateDependencyModuleNames.AddRange(
				new string[]
				{
					"VulkanRHI",
					"FSR2TemporalUpscalingVulkan",
					"FFXFSR2Vulkan"
				}
			);
			PrivateDefinitions.Add("FSR2_ENABLE_VK=1");
		}
		else
		{
			PrivateDefinitions.Add("FSR2_ENABLE_VK=0");
		}

		PrecompileForTargets = PrecompileTargetsType.Any;
	}
}