libretro: better safety on vkDevice feature checks

This commit is contained in:
Eric Warmenhoven 2026-02-23 16:29:56 -05:00 committed by OpenSauce
parent 8fac24d2a4
commit 27c3e0e5c3

View File

@ -115,11 +115,24 @@ bool CreateVulkanDevice(struct retro_vulkan_context* context, VkInstance instanc
} }
} }
// Request features we need (these will be OR'd with frontend requirements) // Query actual device features so we only request what's supported
// The Instance class will validate these against actual device capabilities PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures =
merged_features.geometryShader = VK_TRUE; // Used for certain rendering effects (PFN_vkGetPhysicalDeviceFeatures)get_instance_proc_addr(instance,
merged_features.logicOp = VK_TRUE; // Used for blending modes "vkGetPhysicalDeviceFeatures");
merged_features.samplerAnisotropy = VK_TRUE; // Used for texture filtering VkPhysicalDeviceFeatures device_features{};
vkGetPhysicalDeviceFeatures(gpu, &device_features);
// Request features we want, gated by actual device support
if (device_features.geometryShader)
merged_features.geometryShader = VK_TRUE;
if (device_features.logicOp)
merged_features.logicOp = VK_TRUE;
if (device_features.samplerAnisotropy)
merged_features.samplerAnisotropy = VK_TRUE;
if (device_features.fragmentStoresAndAtomics)
merged_features.fragmentStoresAndAtomics = VK_TRUE;
if (device_features.shaderClipDistance)
merged_features.shaderClipDistance = VK_TRUE;
// Find queue family with graphics support // Find queue family with graphics support
PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties =