mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 09:00:44 +00:00
Check that capture's enabled physical devices are available on replay
* This will fail more gracefully than the logical device failing to create.
This commit is contained in:
@@ -1166,6 +1166,70 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
VkPhysicalDeviceFeatures availFeatures = {0};
|
||||
ObjDisp(physicalDevice)->GetPhysicalDeviceFeatures(Unwrap(physicalDevice), &availFeatures);
|
||||
|
||||
#define CHECK_PHYS_FEATURE(feature) \
|
||||
if(enabledFeatures.feature && !availFeatures.feature) \
|
||||
{ \
|
||||
m_FailedReplayStatus = ReplayStatus::APIHardwareUnsupported; \
|
||||
RDCERR("Capture requires physical device feature '" #feature "' which is not supported"); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
CHECK_PHYS_FEATURE(robustBufferAccess);
|
||||
CHECK_PHYS_FEATURE(fullDrawIndexUint32);
|
||||
CHECK_PHYS_FEATURE(imageCubeArray);
|
||||
CHECK_PHYS_FEATURE(independentBlend);
|
||||
CHECK_PHYS_FEATURE(geometryShader);
|
||||
CHECK_PHYS_FEATURE(tessellationShader);
|
||||
CHECK_PHYS_FEATURE(sampleRateShading);
|
||||
CHECK_PHYS_FEATURE(dualSrcBlend);
|
||||
CHECK_PHYS_FEATURE(logicOp);
|
||||
CHECK_PHYS_FEATURE(multiDrawIndirect);
|
||||
CHECK_PHYS_FEATURE(drawIndirectFirstInstance);
|
||||
CHECK_PHYS_FEATURE(depthClamp);
|
||||
CHECK_PHYS_FEATURE(depthBiasClamp);
|
||||
CHECK_PHYS_FEATURE(fillModeNonSolid);
|
||||
CHECK_PHYS_FEATURE(depthBounds);
|
||||
CHECK_PHYS_FEATURE(wideLines);
|
||||
CHECK_PHYS_FEATURE(largePoints);
|
||||
CHECK_PHYS_FEATURE(alphaToOne);
|
||||
CHECK_PHYS_FEATURE(multiViewport);
|
||||
CHECK_PHYS_FEATURE(samplerAnisotropy);
|
||||
CHECK_PHYS_FEATURE(textureCompressionETC2);
|
||||
CHECK_PHYS_FEATURE(textureCompressionASTC_LDR);
|
||||
CHECK_PHYS_FEATURE(textureCompressionBC);
|
||||
CHECK_PHYS_FEATURE(occlusionQueryPrecise);
|
||||
CHECK_PHYS_FEATURE(pipelineStatisticsQuery);
|
||||
CHECK_PHYS_FEATURE(vertexPipelineStoresAndAtomics);
|
||||
CHECK_PHYS_FEATURE(fragmentStoresAndAtomics);
|
||||
CHECK_PHYS_FEATURE(shaderTessellationAndGeometryPointSize);
|
||||
CHECK_PHYS_FEATURE(shaderImageGatherExtended);
|
||||
CHECK_PHYS_FEATURE(shaderStorageImageExtendedFormats);
|
||||
CHECK_PHYS_FEATURE(shaderStorageImageMultisample);
|
||||
CHECK_PHYS_FEATURE(shaderStorageImageReadWithoutFormat);
|
||||
CHECK_PHYS_FEATURE(shaderStorageImageWriteWithoutFormat);
|
||||
CHECK_PHYS_FEATURE(shaderUniformBufferArrayDynamicIndexing);
|
||||
CHECK_PHYS_FEATURE(shaderSampledImageArrayDynamicIndexing);
|
||||
CHECK_PHYS_FEATURE(shaderStorageBufferArrayDynamicIndexing);
|
||||
CHECK_PHYS_FEATURE(shaderStorageImageArrayDynamicIndexing);
|
||||
CHECK_PHYS_FEATURE(shaderClipDistance);
|
||||
CHECK_PHYS_FEATURE(shaderCullDistance);
|
||||
CHECK_PHYS_FEATURE(shaderFloat64);
|
||||
CHECK_PHYS_FEATURE(shaderInt64);
|
||||
CHECK_PHYS_FEATURE(shaderInt16);
|
||||
CHECK_PHYS_FEATURE(shaderResourceResidency);
|
||||
CHECK_PHYS_FEATURE(shaderResourceMinLod);
|
||||
CHECK_PHYS_FEATURE(sparseBinding);
|
||||
CHECK_PHYS_FEATURE(sparseResidencyBuffer);
|
||||
CHECK_PHYS_FEATURE(sparseResidencyImage2D);
|
||||
CHECK_PHYS_FEATURE(sparseResidencyImage3D);
|
||||
CHECK_PHYS_FEATURE(sparseResidency2Samples);
|
||||
CHECK_PHYS_FEATURE(sparseResidency4Samples);
|
||||
CHECK_PHYS_FEATURE(sparseResidency8Samples);
|
||||
CHECK_PHYS_FEATURE(sparseResidency16Samples);
|
||||
CHECK_PHYS_FEATURE(sparseResidencyAliased);
|
||||
CHECK_PHYS_FEATURE(variableMultisampleRate);
|
||||
CHECK_PHYS_FEATURE(inheritedQueries);
|
||||
|
||||
if(availFeatures.depthClamp)
|
||||
enabledFeatures.depthClamp = true;
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user