GPUOpen-LibrariesAndSDKs / FidelityFX-SDK

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

Documentation how to build FFX SDK from source #84

Open StefanPoelloth opened 1 month ago

StefanPoelloth commented 1 month ago

The repository contains precompiled binaries, eg: amd_fidelityfx_vk.dll. However when crashes inside the dll happen, binaries with debug informations are required. A step by step guide should be added how to build the amdfidelityfx*.dll binaries.

HerveRV commented 3 weeks ago

i'm stuck too in a crash in that dll, i'm waiting for a solution like that, too

StefanPoelloth commented 3 weeks ago

i'm stuck too in a crash in that dll, i'm waiting for a solution like that, too

the library relies on vkGetBufferMemoryRequirements2KHR, vkCmdBeginDebugUtilsLabelEXT and vkCmdEndDebugUtilsLabelEXT. if not available you have to override vkDeviceProcAddr in the ffxCreateBackendVKDesc to return valid funktion pointers

HerveRV commented 3 weeks ago

Thank you so much !

There is my solution :


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;
}