diff --git a/OptiScaler/hooks/VulkanwDx12/VulkanwDx12_Hooks.cpp b/OptiScaler/hooks/VulkanwDx12/VulkanwDx12_Hooks.cpp index ac341313..4173ebe1 100644 --- a/OptiScaler/hooks/VulkanwDx12/VulkanwDx12_Hooks.cpp +++ b/OptiScaler/hooks/VulkanwDx12/VulkanwDx12_Hooks.cpp @@ -6014,55 +6014,6 @@ VkResult Vulkan_wDx12::hk_vkQueueSubmit(VkQueue queue, uint32_t submitCount, VkS LOG_DEBUG("queue: {:X}, submitCount: {}, fence: {:X}", (size_t) queue, submitCount, (size_t) fence); #endif - // for (size_t a = 0; a < submitCount; a++) - //{ - // LOG_DEBUG(" sType: {}", magic_enum::enum_name(pSubmits[a].sType)); - // LOG_DEBUG(" Submit[{}]: cmdBufferCount: {}", a, pSubmits[a].commandBufferCount); - - // for (size_t b = 0; b < pSubmits[a].commandBufferCount; b++) - // { - // LOG_DEBUG(" CmdBuffer[{}]: {:X}", b, (size_t) pSubmits[a].pCommandBuffers[b]); - // } - // LOG_DEBUG(" waitSemaphoreCount: {}", pSubmits[a].waitSemaphoreCount); - // for (size_t c = 0; c < pSubmits[a].waitSemaphoreCount; c++) - // { - // LOG_DEBUG(" WaitSemaphore[{}]: {:X}", c, (size_t) pSubmits[a].pWaitSemaphores[c]); - // } - // LOG_DEBUG(" signalSemaphoreCount: {}", pSubmits[a].signalSemaphoreCount); - // for (size_t d = 0; d < pSubmits[a].signalSemaphoreCount; d++) - // { - // LOG_DEBUG(" SignalSemaphore[{}]: {:X}", d, (size_t) pSubmits[a].pSignalSemaphores[d]); - // } - - // LOG_DEBUG(" pNext chain:"); - // VkDummyProps* next = (VkDummyProps*) &pSubmits[a]; - // while (next->pNext != nullptr) - // { - // next = (VkDummyProps*) next->pNext; - - // if (next->sType == VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO) - // { - // LOG_DEBUG(" sType: VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO"); - // auto tlSemaphoreInfo = (VkTimelineSemaphoreSubmitInfo*) next; - // LOG_DEBUG(" waitSemaphoreValueCount: {}", tlSemaphoreInfo->waitSemaphoreValueCount); - // for (size_t e = 0; e < tlSemaphoreInfo->waitSemaphoreValueCount; e++) - // { - // LOG_DEBUG(" WaitSemaphoreValue[{}]: {}", e, tlSemaphoreInfo->pWaitSemaphoreValues[e]); - // } - // LOG_DEBUG(" signalSemaphoreValueCount: {}", tlSemaphoreInfo->signalSemaphoreValueCount); - // for (size_t f = 0; f < tlSemaphoreInfo->signalSemaphoreValueCount; f++) - // { - // LOG_DEBUG(" SignalSemaphoreValue[{}]: {}", f, - // tlSemaphoreInfo->pSignalSemaphoreValues[f]); - // } - // } - // else - // { - // LOG_DEBUG(" sType: {}", (UINT) next->sType); - // } - // } - //} - std::vector semaphores; std::vector submitInfos; std::vector signalValues; diff --git a/OptiScaler/upscalers/IFeature_Dx11.h b/OptiScaler/upscalers/IFeature_Dx11.h index e385c04a..2740a1d4 100644 --- a/OptiScaler/upscalers/IFeature_Dx11.h +++ b/OptiScaler/upscalers/IFeature_Dx11.h @@ -22,7 +22,7 @@ class IFeature_Dx11 : public virtual IFeature IFeature_Dx11(unsigned int InHandleId, NVSDK_NGX_Parameter* InParameters) : IFeature(InHandleId, InParameters) {} - bool IsWithDx12() { return false; } + bool IsWithDx12() override { return false; } ~IFeature_Dx11(); }; diff --git a/OptiScaler/upscalers/IFeature_Dx11wDx12.h b/OptiScaler/upscalers/IFeature_Dx11wDx12.h index 86a75e19..27cbd493 100644 --- a/OptiScaler/upscalers/IFeature_Dx11wDx12.h +++ b/OptiScaler/upscalers/IFeature_Dx11wDx12.h @@ -87,7 +87,7 @@ class IFeature_Dx11wDx12 : public virtual IFeature_Dx11 IFeature_Dx11wDx12(unsigned int InHandleId, NVSDK_NGX_Parameter* InParameters); - bool IsWithDx12() { return true; } + bool IsWithDx12() final { return true; } ~IFeature_Dx11wDx12(); }; diff --git a/OptiScaler/upscalers/IFeature_Dx12.h b/OptiScaler/upscalers/IFeature_Dx12.h index 9dfae5d2..2c1459bf 100644 --- a/OptiScaler/upscalers/IFeature_Dx12.h +++ b/OptiScaler/upscalers/IFeature_Dx12.h @@ -28,7 +28,7 @@ class IFeature_Dx12 : public virtual IFeature IFeature_Dx12(unsigned int InHandleId, NVSDK_NGX_Parameter* InParameters); - bool IsWithDx12() { return false; } + bool IsWithDx12() final { return false; } ~IFeature_Dx12(); }; diff --git a/OptiScaler/upscalers/IFeature_Vk.h b/OptiScaler/upscalers/IFeature_Vk.h index 336bf026..b26ea8ea 100644 --- a/OptiScaler/upscalers/IFeature_Vk.h +++ b/OptiScaler/upscalers/IFeature_Vk.h @@ -26,7 +26,7 @@ class IFeature_Vk : public virtual IFeature IFeature_Vk(unsigned int InHandleId, NVSDK_NGX_Parameter* InParameters) : IFeature(InHandleId, InParameters) {} - bool IsWithDx12() { return false; } + bool IsWithDx12() override { return false; } virtual ~IFeature_Vk() {} }; diff --git a/OptiScaler/upscalers/IFeature_VkwDx12.cpp b/OptiScaler/upscalers/IFeature_VkwDx12.cpp index 95aa0a63..b251c8eb 100644 --- a/OptiScaler/upscalers/IFeature_VkwDx12.cpp +++ b/OptiScaler/upscalers/IFeature_VkwDx12.cpp @@ -392,8 +392,8 @@ bool IFeature_VkwDx12::CreateVulkanCopyCommandBuffer() return true; } -// bool IFeature_VkwDx12::CopyVulkanImageToShared(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, -// ::VkImage InDestImage, bool IsDepth) +// bool IFeature_VkwDx12::CopyVulkanImageToShared(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, +// VkImage InDestImage, bool IsDepth) //{ // LOG_FUNC(); // @@ -683,7 +683,7 @@ bool IFeature_VkwDx12::CreateSharedTexture(const VkImageCreateInfo& ImageInfo, V return true; } -bool IFeature_VkwDx12::CopyTextureFromVkToDx12(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, +bool IFeature_VkwDx12::CopyTextureFromVkToDx12(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, VK_TEXTURE2D_RESOURCE_C* OutResource, ResourceCopy_Vk* InCopyShader, bool InCopy) { @@ -764,6 +764,41 @@ bool IFeature_VkwDx12::CopyTextureFromVkToDx12(::VkCommandBuffer InCmdBuffer, NV return false; } + if (InCopy) + { + VkImageMemoryBarrier imageBarrier {}; + imageBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imageBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + imageBarrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + imageBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imageBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imageBarrier.image = OutResource->VkSharedImage; + imageBarrier.subresourceRange = InParam->Resource.ImageViewInfo.SubresourceRange; + imageBarrier.srcAccessMask = 0; + imageBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + + // Set initial state of the shared image + vkCmdPipelineBarrier(InCmdBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, + 0, nullptr, 0, nullptr, 1, &imageBarrier); + } + else + { + VkImageMemoryBarrier imageBarrier {}; + imageBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imageBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + imageBarrier.newLayout = VK_IMAGE_LAYOUT_GENERAL; + imageBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imageBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imageBarrier.image = OutResource->VkSharedImage; + imageBarrier.subresourceRange = InParam->Resource.ImageViewInfo.SubresourceRange; + imageBarrier.srcAccessMask = 0; + imageBarrier.dstAccessMask = VK_ACCESS_MEMORY_WRITE_BIT; + + // Set initial state of the shared image + vkCmdPipelineBarrier(InCmdBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, + 0, nullptr, 0, nullptr, 1, &imageBarrier); + } + LOG_DEBUG("Successfully created shared texture"); // Verify the resource descriptor @@ -917,7 +952,7 @@ bool IFeature_VkwDx12::CopyTextureFromVkToDx12(::VkCommandBuffer InCmdBuffer, NV imageBarriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; imageBarriers[0].image = InParam->Resource.ImageViewInfo.Image; imageBarriers[0].subresourceRange = InParam->Resource.ImageViewInfo.SubresourceRange; - imageBarriers[0].srcAccessMask = VK_ACCESS_MEMORY_READ_BIT; + imageBarriers[0].srcAccessMask = VK_ACCESS_SHADER_READ_BIT; imageBarriers[0].dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; imageBarriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; @@ -951,13 +986,15 @@ bool IFeature_VkwDx12::CopyTextureFromVkToDx12(::VkCommandBuffer InCmdBuffer, NV vkCmdCopyImage(InCmdBuffer, imageBarriers[0].image, imageBarriers[0].newLayout, imageBarriers[1].image, imageBarriers[1].newLayout, 1, ©Region); + // Restore source image to read layout imageBarriers[0].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; imageBarriers[0].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; imageBarriers[0].srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; imageBarriers[0].dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + // Pass shared image to general layout for D3D12 access imageBarriers[1].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - imageBarriers[1].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + imageBarriers[1].newLayout = VK_IMAGE_LAYOUT_GENERAL; imageBarriers[1].srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; imageBarriers[1].dstAccessMask = VK_ACCESS_MEMORY_READ_BIT; @@ -972,13 +1009,6 @@ bool IFeature_VkwDx12::CopyTextureFromVkToDx12(::VkCommandBuffer InCmdBuffer, NV LOG_DEBUG("Vulkan texture copy recorded"); } - // else - //{ - // VkClearColorValue debugColor = { { 1.0f, 0.0f, 0.0f, 1.0f } }; - // vkCmdClearColorImage(InCmdBuffer, InParam->Resource.ImageViewInfo.Image, VK_IMAGE_LAYOUT_GENERAL, - // &debugColor, - // 1, &InParam->Resource.ImageViewInfo.SubresourceRange); - // } return true; } @@ -991,7 +1021,7 @@ static bool NvVkResourceNotValid(NVSDK_NGX_Resource_VK* param) param->Resource.ImageViewInfo.Height == 0; } -bool IFeature_VkwDx12::ProcessVulkanTextures(::VkCommandBuffer InCmdList, const NVSDK_NGX_Parameter* InParameters) +bool IFeature_VkwDx12::ProcessVulkanTextures(VkCommandBuffer InCmdList, const NVSDK_NGX_Parameter* InParameters) { LOG_FUNC(); @@ -1002,13 +1032,13 @@ bool IFeature_VkwDx12::ProcessVulkanTextures(::VkCommandBuffer InCmdList, const LOG_DEBUG("Upscaling command buffer: {:X}, frame: {}", (size_t) InCmdList, frame); // Only wait if we're more than 1 frame behind (triple buffering protection) - // uint64_t lastFrameToWaitFor = (_frameCount > 1) ? (_frameCount - 1) : 0; - // if (Dx12Fence->GetCompletedValue() < lastFrameToWaitFor) - //{ - // // Only wait for N-1 frame, not current frame - // Dx12Fence->SetEventOnCompletion(lastFrameToWaitFor, Dx12FenceEvent); - // WaitForSingleObject(Dx12FenceEvent, INFINITE); - //} + uint64_t lastFrameToWaitFor = (_frameCount > 1) ? (_frameCount - 1) : 0; + if (Dx12Fence->GetCompletedValue() < lastFrameToWaitFor) + { + // Only wait for N-1 frame, not current frame + Dx12Fence->SetEventOnCompletion(lastFrameToWaitFor, Dx12FenceEvent); + WaitForSingleObject(Dx12FenceEvent, INFINITE); + } Dx12CommandAllocator[frame]->Reset(); Dx12CommandList[frame]->Reset(Dx12CommandAllocator[frame], nullptr); @@ -1344,13 +1374,6 @@ bool IFeature_VkwDx12::ProcessVulkanTextures(::VkCommandBuffer InCmdList, const vkCmdPipelineBarrier(VulkanBarrierCommandBuffer[frame], VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageBarrier); - - // vkResult = vkEndCommandBuffer(InCmdList); - // if (vkResult != VK_SUCCESS) - //{ - // LOG_ERROR("vkEndCommandBuffer error: {0:x}", (int) vkResult); - // return false; - // } } // D3D12 wait on the shared fence signaled by Vulkan @@ -1458,12 +1481,12 @@ bool IFeature_VkwDx12::CopyBackOutput() } // Signal for next frame - // result = Dx12CommandQueue->Signal(Dx12Fence, _frameCount); - // if (result != S_OK) - //{ - // LOG_ERROR("Dx12CommandQueue->Signal failed: {0:x}", result); - // return false; - //} + result = Dx12CommandQueue->Signal(Dx12Fence, _frameCount); + if (result != S_OK) + { + LOG_ERROR("Dx12CommandQueue->Signal failed: {0:x}", result); + return false; + } // D3D12 side is completed now copy back output to Vulkan image if (vkOut.VkSourceImage != VK_NULL_HANDLE && vkOut.VkSharedImage != VK_NULL_HANDLE) @@ -1488,6 +1511,41 @@ bool IFeature_VkwDx12::CopyBackOutput() return false; } + std::vector imageBarriers; + imageBarriers.reserve(5); + + auto AddVkBarrier = [&](VK_TEXTURE2D_RESOURCE_C* resource) + { + if (resource->VkSourceImage != VK_NULL_HANDLE) + { + VkImageMemoryBarrier imageBarrier {}; + imageBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imageBarrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL; + imageBarrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + imageBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imageBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + imageBarrier.image = resource->VkSharedImage; + imageBarrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + imageBarrier.subresourceRange.baseMipLevel = 0; + imageBarrier.subresourceRange.levelCount = 1; + imageBarrier.subresourceRange.baseArrayLayer = 0; + imageBarrier.subresourceRange.layerCount = 1; + imageBarrier.srcAccessMask = VK_ACCESS_MEMORY_READ_BIT; + imageBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; + imageBarriers.push_back(imageBarrier); + } + }; + + AddVkBarrier(&vkColor); + AddVkBarrier(&vkDepth); + AddVkBarrier(&vkMv); + AddVkBarrier(&vkExp); + AddVkBarrier(&vkReactive); + + vkCmdPipelineBarrier(VulkanCopyCommandBuffer[frame], VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, 0, nullptr, + 0, nullptr, imageBarriers.size(), imageBarriers.data()); + if (false) { @@ -2090,8 +2148,8 @@ HRESULT IFeature_VkwDx12::CreateDx12Device() return S_OK; } -bool IFeature_VkwDx12::BaseInit(::VkInstance InInstance, ::VkPhysicalDevice InPD, ::VkDevice InDevice, - ::VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, +bool IFeature_VkwDx12::BaseInit(VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, + VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, NVSDK_NGX_Parameter* InParameters) { LOG_FUNC(); diff --git a/OptiScaler/upscalers/IFeature_VkwDx12.h b/OptiScaler/upscalers/IFeature_VkwDx12.h index 6ae66af5..189c4f84 100644 --- a/OptiScaler/upscalers/IFeature_VkwDx12.h +++ b/OptiScaler/upscalers/IFeature_VkwDx12.h @@ -38,15 +38,15 @@ class IFeature_VkwDx12 : public virtual IFeature_Vk }; // Vulkan context - renamed to avoid conflicts - ::VkDevice VulkanDevice = VK_NULL_HANDLE; - ::VkPhysicalDevice VulkanPhysicalDevice = VK_NULL_HANDLE; - ::VkInstance VulkanInstance = VK_NULL_HANDLE; - ::VkQueue VulkanGraphicsQueue = VK_NULL_HANDLE; + VkDevice VulkanDevice = VK_NULL_HANDLE; + VkPhysicalDevice VulkanPhysicalDevice = VK_NULL_HANDLE; + VkInstance VulkanInstance = VK_NULL_HANDLE; + VkQueue VulkanGraphicsQueue = VK_NULL_HANDLE; + VkCommandBuffer VulkanCopyCommandBuffer[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; + VkCommandPool VulkanCopyCommandPool[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; + VkCommandBuffer VulkanBarrierCommandBuffer[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; + VkCommandPool VulkanBarrierCommandPool[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; uint32_t VulkanQueueFamilyIndex = 0; - ::VkCommandBuffer VulkanCopyCommandBuffer[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; - ::VkCommandPool VulkanCopyCommandPool[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; - ::VkCommandBuffer VulkanBarrierCommandBuffer[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; - ::VkCommandPool VulkanBarrierCommandPool[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; PFN_vkGetInstanceProcAddr VulkanGIPA = nullptr; PFN_vkGetDeviceProcAddr VulkanGDPA = nullptr; @@ -67,8 +67,8 @@ class IFeature_VkwDx12 : public virtual IFeature_Vk VK_TEXTURE2D_RESOURCE_C vkOut = {}; // Vulkan synchronization for texture copies - using shared fence pattern like Dx11wDx12 - ::VkSemaphore vkSemaphoreTextureCopy[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; - ::VkSemaphore vkSemaphoreCopyBack[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; + VkSemaphore vkSemaphoreTextureCopy[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; + VkSemaphore vkSemaphoreCopyBack[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; ID3D12Fence* dx12FenceTextureCopy[2] = { nullptr, nullptr }; HANDLE vkSHForTextureCopy[2] = { nullptr, nullptr }; ULONG _fenceValue = 0; @@ -89,8 +89,6 @@ class IFeature_VkwDx12 : public virtual IFeature_Vk std::unique_ptr OutCopy2 = nullptr; // Vulkan function pointers for external memory - // PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = nullptr; - // PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = nullptr; PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = nullptr; PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = nullptr; @@ -101,41 +99,35 @@ class IFeature_VkwDx12 : public virtual IFeature_Vk bool CreateSharedTexture(const VkImageCreateInfo& ImageInfo, VkImage& VulkanResource, VkDeviceMemory& VulkanMemory, ID3D12Resource*& D3D12Resource, bool InOutput); - bool CopyTextureFromVkToDx12(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, + bool CopyTextureFromVkToDx12(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, VK_TEXTURE2D_RESOURCE_C* OutResource, ResourceCopy_Vk* InCopyShader, bool InCopy); - bool ProcessVulkanTextures(::VkCommandBuffer InCmdList, const NVSDK_NGX_Parameter* InParameters); + bool ProcessVulkanTextures(VkCommandBuffer InCmdList, const NVSDK_NGX_Parameter* InParameters); bool CopyBackOutput(); - // bool CopyVulkanImageToShared(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Resource_VK* InParam, ::VkImage - // InDestImage, - // bool IsDepth); - void ResourceBarrier(ID3D12GraphicsCommandList* InCommandList, ID3D12Resource* InResource, D3D12_RESOURCE_STATES InBeforeState, D3D12_RESOURCE_STATES InAfterState); - - void ReleaseSharedResources(); - void ReleaseSyncResources(); - void SetVkObjectName(VkDevice device, VkObjectType objectType, uint64_t objectHandle, const char* name); + uint32_t FindVulkanMemoryTypeIndex(uint32_t MemoryTypeBits, VkMemoryPropertyFlags PropertyFlags); bool LoadVulkanExternalMemoryFunctions(); bool CreateVulkanCopyCommandBuffer(); bool CreateSharedFenceSemaphore(); - uint32_t FindVulkanMemoryTypeIndex(uint32_t MemoryTypeBits, VkMemoryPropertyFlags PropertyFlags); + + void ReleaseSharedResources(); + void ReleaseSyncResources(); public: - virtual bool Init(::VkInstance InInstance, ::VkPhysicalDevice InPD, ::VkDevice InDevice, - ::VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, - NVSDK_NGX_Parameter* InParameters) = 0; + bool IsWithDx12() final { return true; } - virtual bool Evaluate(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* InParameters) = 0; - - bool BaseInit(::VkInstance InInstance, ::VkPhysicalDevice InPD, ::VkDevice InDevice, ::VkCommandBuffer InCmdList, + bool BaseInit(VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, NVSDK_NGX_Parameter* InParameters); IFeature_VkwDx12(unsigned int InHandleId, NVSDK_NGX_Parameter* InParameters); - - bool IsWithDx12() { return true; } - ~IFeature_VkwDx12(); + + virtual bool Init(VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, VkCommandBuffer InCmdList, + PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, + NVSDK_NGX_Parameter* InParameters) = 0; + + virtual bool Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* InParameters) = 0; }; diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp index 67ff4ae8..cf4f0fd9 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp @@ -27,8 +27,8 @@ FSR31FeatureVkOn12::FSR31FeatureVkOn12(unsigned int InHandleId, NVSDK_NGX_Parame LOG_ERROR("can't load amd_fidelityfx_dx12.dll methods!"); } -bool FSR31FeatureVkOn12::Init(::VkInstance InInstance, ::VkPhysicalDevice InPD, ::VkDevice InDevice, - ::VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, +bool FSR31FeatureVkOn12::Init(VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, + VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, NVSDK_NGX_Parameter* InParameters) { LOG_FUNC(); @@ -47,7 +47,7 @@ bool FSR31FeatureVkOn12::Init(::VkInstance InInstance, ::VkPhysicalDevice InPD, return _moduleLoaded; } -bool FSR31FeatureVkOn12::Evaluate(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* InParameters) +bool FSR31FeatureVkOn12::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* InParameters) { LOG_FUNC(); diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.h b/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.h index aaed58f2..af873048 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.h +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.h @@ -20,11 +20,11 @@ class FSR31FeatureVkOn12 : public FSR31Feature, public IFeature_VkwDx12 FSR31FeatureVkOn12(unsigned int InHandleId, NVSDK_NGX_Parameter* InParameters); - bool Init(::VkInstance InInstance, ::VkPhysicalDevice InPD, ::VkDevice InDevice, ::VkCommandBuffer InCmdList, + bool Init(VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, VkCommandBuffer InCmdList, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, NVSDK_NGX_Parameter* InParameters) override; - bool Evaluate(::VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* InParameters) override; + bool Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* InParameters) override; ~FSR31FeatureVkOn12() {