GPUOpen-LibrariesAndSDKs / FidelityFX-SDK

The main repository for the FidelityFX SDK.
Other
835 stars 80 forks source link

ffx::CreateContext() crash #89

Closed HerveRV closed 3 weeks ago

HerveRV commented 3 weeks ago

Hi everyone

(Windows 11 updated, cmakegui 3.30.2, visual studio 2022 updated, C++; Vulkan 1.3.290, RTX3080Ti, core i9-12900K)

I'm unable to use ffx::CreateContext(), no matter what i try : nothing works and it always crash (amd_fidelityfx_vk.dll is the signed version from the in the fidelityFX 1.1 sdk)

BackendVK :

        ffx::CreateBackendVKDesc BackendVKDesc = {};
        BackendVKDesc.vkDevice = gRendererVulkan.Device;
        BackendVKDesc.vkPhysicalDevice = gRendererVulkan.PhysicalDevice;
        BackendVKDesc.vkDeviceProcAddr = vkGetDeviceProcAddr;

        #if DEBUG_MODE == 1
            void *vkGetDeviceProcAddr_TEST = BackendVKDesc.vkDeviceProcAddr(BackendVKDesc.Device, "vkAllocateMemory");
            assert(vkGetDeviceProcAddr_TEST); // -> vkGetDeviceProcAddr_TEST => nvoglv64.dll!0x00007ffd12784a50
        #endif

FSR3.1 :

        ffx::CreateContextDescUpscale CreateContextFSR = {};
        CreateContextFSR.maxUpscaleSize = {1920, 1080};
        CreateContextFSR.maxRenderSize  = {1920, 1080};
        CreateContextFSR.flags = 0;
        CreateContextFSR.flags |= FFX_UPSCALE_ENABLE_AUTO_EXPOSURE;
        CreateContextFSR.flags |= FFX_UPSCALE_ENABLE_HIGH_DYNAMIC_RANGE;

        ffxAllocationCallbacks *AllocCallback = NULL;
        ffx::Context m_UpscalingContext = NULL;
        ffx::ReturnCode retCode = ffx::CreateContext(m_UpscalingContext, AllocCallback, CreateContextFSR, BackendVKDesc);

-> Unhandled exception at 0x0000000000000000 in XXX.exe: 0xC0000005: Access violation executing location 0x0000000000000000.

How can i resolve that ? Using debug mode in vulkan context création only teach me about one useless information : a performance warning... It crash too if i try to create a frame generation context, the same way, i don't show the code here, it's not so tiny Can we found or create a debug version of this dll ? Thanks ! :-)

PS : the demo sample in debug mode work great and do not crash

QDanteQ commented 3 weeks ago

FFX_API is open source. You can build debug version of this lib, use it in your project and debug the exception. Look at ffx-api/BuildFfxApiDll.bat

HerveRV commented 3 weeks ago

Thanks to @StefanPoelloth, i found the solution :

BackendVKDesc.vkDeviceProcAddr = vkGetDeviceProcAddr;
->
BackendVKDesc.vkDeviceProcAddr = Override_vkGetDeviceProcAddr;
VKAPI_ATTR PFN_vkVoidFunction Override_vkGetDeviceProcAddr(VkDevice device, const char *pName)
{
    if(strcmp(pName, "vkSetDebugUtilsObjectNameEXT") == 0)      return (PFN_vkVoidFunction)vkSetDebugUtilsObjectNameEXT;
    if(strcmp(pName, "vkFlushMappedMemoryRanges") == 0)         return (PFN_vkVoidFunction)vkFlushMappedMemoryRanges;
    if(strcmp(pName, "vkCreateDescriptorPool") == 0)            return (PFN_vkVoidFunction)vkCreateDescriptorPool;
    if(strcmp(pName, "vkCreateSampler") == 0)                   return (PFN_vkVoidFunction)vkCreateSampler;
    if(strcmp(pName, "vkCreateDescriptorSetLayout") == 0)       return (PFN_vkVoidFunction)vkCreateDescriptorSetLayout;
    if(strcmp(pName, "vkCreateBuffer") == 0)                    return (PFN_vkVoidFunction)vkCreateBuffer;
    if(strcmp(pName, "vkCreateBufferView") == 0)                return (PFN_vkVoidFunction)vkCreateBufferView;
    if(strcmp(pName, "vkCreateImage") == 0)                     return (PFN_vkVoidFunction)vkCreateImage;
    if(strcmp(pName, "vkCreateImageView") == 0)                 return (PFN_vkVoidFunction)vkCreateImageView;
    if(strcmp(pName, "vkCreateShaderModule") == 0)              return (PFN_vkVoidFunction)vkCreateShaderModule;
    if(strcmp(pName, "vkCreatePipelineLayout") == 0)            return (PFN_vkVoidFunction)vkCreatePipelineLayout;
    if(strcmp(pName, "vkCreateComputePipelines") == 0)          return (PFN_vkVoidFunction)vkCreateComputePipelines;
    if(strcmp(pName, "vkDestroyPipelineLayout") == 0)           return (PFN_vkVoidFunction)vkDestroyPipelineLayout;
    if(strcmp(pName, "vkDestroyPipeline") == 0)                 return (PFN_vkVoidFunction)vkDestroyPipeline;
    if(strcmp(pName, "vkDestroyImage") == 0)                    return (PFN_vkVoidFunction)vkDestroyImage;
    if(strcmp(pName, "vkDestroyImageView") == 0)                return (PFN_vkVoidFunction)vkDestroyImageView;
    if(strcmp(pName, "vkDestroyBuffer") == 0)                   return (PFN_vkVoidFunction)vkDestroyBuffer;
    if(strcmp(pName, "vkDestroyBufferView") == 0)               return (PFN_vkVoidFunction)vkDestroyBufferView;
    if(strcmp(pName, "vkDestroyDescriptorSetLayout") == 0)      return (PFN_vkVoidFunction)vkDestroyDescriptorSetLayout;
    if(strcmp(pName, "vkDestroyDescriptorPool") == 0)           return (PFN_vkVoidFunction)vkDestroyDescriptorPool;
    if(strcmp(pName, "vkDestroySampler") == 0)                  return (PFN_vkVoidFunction)vkDestroySampler;
    if(strcmp(pName, "vkDestroyShaderModule") == 0)             return (PFN_vkVoidFunction)vkDestroyShaderModule;
    if(strcmp(pName, "vkGetBufferMemoryRequirements") == 0)     return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements;
    if(strcmp(pName, "vkGetBufferMemoryRequirements2KHR") == 0) return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements2; // vkGetBufferMemoryRequirements2KHR == NULL !
    if(strcmp(pName, "vkGetImageMemoryRequirements") == 0)      return (PFN_vkVoidFunction)vkGetImageMemoryRequirements;
    if(strcmp(pName, "vkAllocateDescriptorSets") == 0)          return (PFN_vkVoidFunction)vkAllocateDescriptorSets;
    if(strcmp(pName, "vkFreeDescriptorSets") == 0)              return (PFN_vkVoidFunction)vkFreeDescriptorSets;
    if(strcmp(pName, "vkAllocateMemory") == 0)                  return (PFN_vkVoidFunction)vkAllocateMemory;
    if(strcmp(pName, "vkFreeMemory") == 0)                      return (PFN_vkVoidFunction)vkFreeMemory;
    if(strcmp(pName, "vkMapMemory") == 0)                       return (PFN_vkVoidFunction)vkMapMemory;
    if(strcmp(pName, "vkUnmapMemory") == 0)                     return (PFN_vkVoidFunction)vkUnmapMemory;
    if(strcmp(pName, "vkBindBufferMemory") == 0)                return (PFN_vkVoidFunction)vkBindBufferMemory;
    if(strcmp(pName, "vkBindImageMemory") == 0)                 return (PFN_vkVoidFunction)vkBindImageMemory;
    if(strcmp(pName, "vkUpdateDescriptorSets") == 0)            return (PFN_vkVoidFunction)vkUpdateDescriptorSets;
    if(strcmp(pName, "vkCmdPipelineBarrier") == 0)              return (PFN_vkVoidFunction)vkCmdPipelineBarrier;
    if(strcmp(pName, "vkCmdBindPipeline") == 0)                 return (PFN_vkVoidFunction)vkCmdBindPipeline;
    if(strcmp(pName, "vkCmdBindDescriptorSets") == 0)           return (PFN_vkVoidFunction)vkCmdBindDescriptorSets;
    if(strcmp(pName, "vkCmdDispatch") == 0)                     return (PFN_vkVoidFunction)vkCmdDispatch;
    if(strcmp(pName, "vkCmdDispatchIndirect") == 0)             return (PFN_vkVoidFunction)vkCmdDispatchIndirect;
    if(strcmp(pName, "vkCmdCopyBuffer") == 0)                   return (PFN_vkVoidFunction)vkCmdCopyBuffer;
    if(strcmp(pName, "vkCmdCopyImage") == 0)                    return (PFN_vkVoidFunction)vkCmdCopyImage;
    if(strcmp(pName, "vkCmdCopyBufferToImage") == 0)            return (PFN_vkVoidFunction)vkCmdCopyBufferToImage;
    if(strcmp(pName, "vkCmdClearColorImage") == 0)              return (PFN_vkVoidFunction)vkCmdClearColorImage;
    if(strcmp(pName, "vkCmdFillBuffer") == 0)                   return (PFN_vkVoidFunction)vkCmdFillBuffer;
    if(strcmp(pName, "vkCmdWriteBufferMarkerAMD") == 0)         return (PFN_vkVoidFunction)vkCmdWriteBufferMarkerAMD; // NULL sur nVidia
    if(strcmp(pName, "vkCmdWriteBufferMarker2AMD") == 0)        return (PFN_vkVoidFunction)vkCmdWriteBufferMarker2AMD; // NULL sur nVidia
    if(strcmp(pName, "vkCmdBeginDebugUtilsLabelEXT") == 0)      return (PFN_vkVoidFunction)vkCmdBeginDebugUtilsLabelEXT;
    if(strcmp(pName, "vkCmdEndDebugUtilsLabelEXT") == 0)        return (PFN_vkVoidFunction)vkCmdEndDebugUtilsLabelEXT;

    DebugBreak();
    return NULL;
}