mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-29 00:55:51 +00:00
Handle extension promotion to core when detecting enabled extensions
This commit is contained in:
@@ -39,7 +39,7 @@ void InitReplayTables(void *vulkanModule);
|
||||
struct InstanceDeviceInfo
|
||||
{
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) ext_##name = false;
|
||||
#define CheckExt(name, ver) ext_##name = false;
|
||||
InstanceDeviceInfo()
|
||||
{
|
||||
CheckDeviceExts();
|
||||
@@ -47,7 +47,9 @@ struct InstanceDeviceInfo
|
||||
}
|
||||
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) bool ext_##name;
|
||||
#define CheckExt(name, ver) bool ext_##name;
|
||||
|
||||
int vulkanVersion = VK_API_VERSION_1_0;
|
||||
|
||||
CheckDeviceExts();
|
||||
CheckInstanceExts();
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
|
||||
#include "official/vk_layer.h"
|
||||
|
||||
// extensions made core in 1.1
|
||||
#define VK11 VK_MAKE_VERSION(1, 1, 0)
|
||||
|
||||
// extensions that are not core in any version
|
||||
#define VKXX VK_MAKE_VERSION(999, 999, 0)
|
||||
|
||||
#if defined(VK_USE_PLATFORM_WIN32_KHR)
|
||||
|
||||
#define HookInitInstance_PlatformSpecific() \
|
||||
@@ -268,40 +274,40 @@
|
||||
|
||||
// for simplicity and since the check itself is platform agnostic,
|
||||
// these aren't protected in platform defines
|
||||
#define CheckInstanceExts() \
|
||||
CheckExt(VK_KHR_xlib_surface); \
|
||||
CheckExt(VK_KHR_xcb_surface); \
|
||||
CheckExt(VK_KHR_win32_surface); \
|
||||
CheckExt(VK_KHR_android_surface); \
|
||||
CheckExt(VK_KHR_surface); \
|
||||
CheckExt(VK_EXT_debug_report); \
|
||||
CheckExt(VK_KHR_display); \
|
||||
CheckExt(VK_NV_external_memory_capabilities); \
|
||||
CheckExt(VK_KHR_get_physical_device_properties2); \
|
||||
CheckExt(VK_EXT_display_surface_counter); \
|
||||
CheckExt(VK_EXT_direct_mode_display); \
|
||||
CheckExt(VK_EXT_acquire_xlib_display); \
|
||||
CheckExt(VK_KHR_external_memory_capabilities); \
|
||||
CheckExt(VK_KHR_external_semaphore_capabilities);
|
||||
#define CheckInstanceExts() \
|
||||
CheckExt(VK_KHR_xlib_surface, VKXX); \
|
||||
CheckExt(VK_KHR_xcb_surface, VKXX); \
|
||||
CheckExt(VK_KHR_win32_surface, VKXX); \
|
||||
CheckExt(VK_KHR_android_surface, VKXX); \
|
||||
CheckExt(VK_KHR_surface, VKXX); \
|
||||
CheckExt(VK_EXT_debug_report, VKXX); \
|
||||
CheckExt(VK_KHR_display, VKXX); \
|
||||
CheckExt(VK_NV_external_memory_capabilities, VKXX); \
|
||||
CheckExt(VK_KHR_get_physical_device_properties2, VK11); \
|
||||
CheckExt(VK_EXT_display_surface_counter, VKXX); \
|
||||
CheckExt(VK_EXT_direct_mode_display, VKXX); \
|
||||
CheckExt(VK_EXT_acquire_xlib_display, VKXX); \
|
||||
CheckExt(VK_KHR_external_memory_capabilities, VK11); \
|
||||
CheckExt(VK_KHR_external_semaphore_capabilities, VK11);
|
||||
|
||||
#define CheckDeviceExts() \
|
||||
CheckExt(VK_EXT_debug_marker); \
|
||||
CheckExt(VK_KHR_swapchain); \
|
||||
CheckExt(VK_KHR_display_swapchain); \
|
||||
CheckExt(VK_NV_external_memory); \
|
||||
CheckExt(VK_NV_external_memory_win32); \
|
||||
CheckExt(VK_NV_win32_keyed_mutex); \
|
||||
CheckExt(VK_KHR_maintenance1); \
|
||||
CheckExt(VK_EXT_display_control); \
|
||||
CheckExt(VK_KHR_external_memory); \
|
||||
CheckExt(VK_KHR_external_memory_win32); \
|
||||
CheckExt(VK_KHR_external_memory_fd); \
|
||||
CheckExt(VK_KHR_external_semaphore); \
|
||||
CheckExt(VK_KHR_external_semaphore_win32); \
|
||||
CheckExt(VK_KHR_external_semaphore_fd); \
|
||||
CheckExt(VK_KHR_get_memory_requirements2); \
|
||||
CheckExt(VK_AMD_shader_info); \
|
||||
CheckExt(VK_KHR_push_descriptor);
|
||||
#define CheckDeviceExts() \
|
||||
CheckExt(VK_EXT_debug_marker, VKXX); \
|
||||
CheckExt(VK_KHR_swapchain, VKXX); \
|
||||
CheckExt(VK_KHR_display_swapchain, VKXX); \
|
||||
CheckExt(VK_NV_external_memory, VKXX); \
|
||||
CheckExt(VK_NV_external_memory_win32, VKXX); \
|
||||
CheckExt(VK_NV_win32_keyed_mutex, VKXX); \
|
||||
CheckExt(VK_KHR_maintenance1, VK11); \
|
||||
CheckExt(VK_EXT_display_control, VKXX); \
|
||||
CheckExt(VK_KHR_external_memory, VK11); \
|
||||
CheckExt(VK_KHR_external_memory_win32, VKXX); \
|
||||
CheckExt(VK_KHR_external_memory_fd, VKXX); \
|
||||
CheckExt(VK_KHR_external_semaphore, VK11); \
|
||||
CheckExt(VK_KHR_external_semaphore_win32, VKXX); \
|
||||
CheckExt(VK_KHR_external_semaphore_fd, VKXX); \
|
||||
CheckExt(VK_KHR_get_memory_requirements2, VK11); \
|
||||
CheckExt(VK_AMD_shader_info, VKXX); \
|
||||
CheckExt(VK_KHR_push_descriptor, VKXX);
|
||||
|
||||
#define HookInitVulkanInstanceExts() \
|
||||
HookInitExtension(VK_KHR_surface, DestroySurfaceKHR); \
|
||||
|
||||
@@ -234,6 +234,9 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer
|
||||
extscstr,
|
||||
};
|
||||
|
||||
if(params.APIVersion >= VK_API_VERSION_1_0)
|
||||
renderdocAppInfo.apiVersion = params.APIVersion;
|
||||
|
||||
m_Instance = VK_NULL_HANDLE;
|
||||
|
||||
VkResult ret = GetInstanceDispatchTable(NULL)->CreateInstance(&instinfo, NULL, &m_Instance);
|
||||
@@ -241,10 +244,10 @@ ReplayStatus WrappedVulkan::Initialise(VkInitParams ¶ms, uint64_t sectionVer
|
||||
InstanceDeviceInfo extInfo;
|
||||
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) \
|
||||
if(!strcmp(instinfo.ppEnabledExtensionNames[i], #name)) \
|
||||
{ \
|
||||
extInfo.ext_##name = true; \
|
||||
#define CheckExt(name, ver) \
|
||||
if(!strcmp(instinfo.ppEnabledExtensionNames[i], #name) || (int)renderdocAppInfo.apiVersion >= ver) \
|
||||
{ \
|
||||
extInfo.ext_##name = true; \
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < instinfo.enabledExtensionCount; i++)
|
||||
@@ -409,9 +412,15 @@ VkResult WrappedVulkan::vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo
|
||||
|
||||
modifiedCreateInfo.ppEnabledExtensionNames = addedExts;
|
||||
|
||||
// override applicationInfo with RenderDoc's, but preserve apiVersion
|
||||
if(modifiedCreateInfo.pApplicationInfo)
|
||||
{
|
||||
modifiedCreateInfo.pApplicationInfo = &renderdocAppInfo;
|
||||
|
||||
if(modifiedCreateInfo.pApplicationInfo->apiVersion >= VK_API_VERSION_1_0)
|
||||
renderdocAppInfo.apiVersion = modifiedCreateInfo.pApplicationInfo->apiVersion;
|
||||
}
|
||||
|
||||
VkResult ret = createFunc(&modifiedCreateInfo, pAllocator, pInstance);
|
||||
|
||||
m_Instance = *pInstance;
|
||||
@@ -430,11 +439,17 @@ VkResult WrappedVulkan::vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo
|
||||
|
||||
record->instDevInfo = new InstanceDeviceInfo();
|
||||
|
||||
record->instDevInfo->vulkanVersion = VK_API_VERSION_1_0;
|
||||
|
||||
if(renderdocAppInfo.apiVersion > VK_API_VERSION_1_0)
|
||||
record->instDevInfo->vulkanVersion = renderdocAppInfo.apiVersion;
|
||||
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) \
|
||||
if(!strcmp(modifiedCreateInfo.ppEnabledExtensionNames[i], #name)) \
|
||||
{ \
|
||||
record->instDevInfo->ext_##name = true; \
|
||||
#define CheckExt(name, ver) \
|
||||
if(!strcmp(modifiedCreateInfo.ppEnabledExtensionNames[i], #name) || \
|
||||
record->instDevInfo->vulkanVersion >= ver) \
|
||||
{ \
|
||||
record->instDevInfo->ext_##name = true; \
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < modifiedCreateInfo.enabledExtensionCount; i++)
|
||||
@@ -1207,10 +1222,11 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
InstanceDeviceInfo extInfo;
|
||||
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) \
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], #name)) \
|
||||
{ \
|
||||
extInfo.ext_##name = true; \
|
||||
#define CheckExt(name, ver) \
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], #name) || \
|
||||
(int)renderdocAppInfo.apiVersion >= ver) \
|
||||
{ \
|
||||
extInfo.ext_##name = true; \
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < createInfo.enabledExtensionCount; i++)
|
||||
@@ -1507,7 +1523,7 @@ VkResult WrappedVulkan::vkCreateDevice(VkPhysicalDevice physicalDevice,
|
||||
record->instDevInfo = new InstanceDeviceInfo();
|
||||
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) \
|
||||
#define CheckExt(name, ver) \
|
||||
record->instDevInfo->ext_##name = GetRecord(m_Instance)->instDevInfo->ext_##name;
|
||||
|
||||
// inherit extension enablement from instance, that way GetDeviceProcAddress can check
|
||||
@@ -1515,10 +1531,11 @@ VkResult WrappedVulkan::vkCreateDevice(VkPhysicalDevice physicalDevice,
|
||||
CheckInstanceExts();
|
||||
|
||||
#undef CheckExt
|
||||
#define CheckExt(name) \
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], #name)) \
|
||||
{ \
|
||||
record->instDevInfo->ext_##name = true; \
|
||||
#define CheckExt(name, ver) \
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], #name) || \
|
||||
GetRecord(m_Instance)->instDevInfo->vulkanVersion >= ver) \
|
||||
{ \
|
||||
record->instDevInfo->ext_##name = true; \
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < createInfo.enabledExtensionCount; i++)
|
||||
|
||||
Reference in New Issue
Block a user