@@ -257,7 +257,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
257
257
return availableFeatureSet.find (name)!=availableFeatureSet.end ();
258
258
};
259
259
// ! Required by Nabla Core Profile
260
- if (!isExtensionSupported (VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME))
260
+ if (!rdoc && ! isExtensionSupported (VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME))
261
261
return nullptr ;
262
262
if (!isExtensionSupported (VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME))
263
263
return nullptr ;
@@ -294,7 +294,6 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
294
294
addToPNextChain (&vulkan13Properties);
295
295
// ! Required by Nabla Core Profile
296
296
VkPhysicalDeviceExternalMemoryHostPropertiesEXT externalMemoryHostProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT };
297
- addToPNextChain (&externalMemoryHostProperties);
298
297
VkPhysicalDeviceRobustness2PropertiesEXT robustness2Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT };
299
298
addToPNextChain (&robustness2Properties);
300
299
// ! Extensions (ordered by spec extension number)
@@ -314,6 +313,9 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
314
313
#endif
315
314
VkPhysicalDeviceShaderSMBuiltinsPropertiesNV shaderSMBuiltinsPropertiesNV = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV };
316
315
VkPhysicalDeviceShaderCoreProperties2AMD shaderCoreProperties2AMD = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD };
316
+ // ! Because Renderdoc is special and instead of ignoring extensions it whitelists them
317
+ if (isExtensionSupported (VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME))
318
+ addToPNextChain (&externalMemoryHostProperties);
317
319
// ! This is only written for convenience to avoid getting validation errors otherwise vulkan will just skip any strutctures it doesn't recognize
318
320
if (isExtensionSupported (VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME))
319
321
addToPNextChain (&conservativeRasterizationProperties);
@@ -504,7 +506,8 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
504
506
505
507
506
508
// ! Nabla Core Extensions
507
- properties.limits .minImportedHostPointerAlignment = externalMemoryHostProperties.minImportedHostPointerAlignment ;
509
+ if (isExtensionSupported (VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME)) // renderdoc special
510
+ properties.limits .minImportedHostPointerAlignment = externalMemoryHostProperties.minImportedHostPointerAlignment ;
508
511
509
512
// there's no ShaderAtomicFloatPropertiesEXT
510
513
@@ -1395,7 +1398,7 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
1395
1398
extensionsToEnable.insert (VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME); // All Requirements Exist in Vulkan 1.1 (including instance extensions)
1396
1399
#endif
1397
1400
enableExtensionIfAvailable (VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME);
1398
- extensionsToEnable. insert (VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME);
1401
+ enableExtensionIfAvailable (VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME);
1399
1402
extensionsToEnable.insert (VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME);
1400
1403
1401
1404
// ! required but has overhead so conditional
0 commit comments