vo_gpu: vulkan: try enabling required features

Instead of enabling every feature under the sun, make an effort to just
whitelist the ones we actually might use. Turns out the extended storage
format support is needed for some of the storage formats we use, in
particular rgba16.
This commit is contained in:
Niklas Haas 2018-02-04 23:08:49 +01:00 committed by Kevin Mitchell
parent 92778873ad
commit f92e45bb8c
2 changed files with 10 additions and 0 deletions

View File

@ -72,4 +72,5 @@ struct mpvk_ctx {
// Cached capabilities
VkPhysicalDeviceLimits limits;
VkPhysicalDeviceFeatures features;
};

View File

@ -316,6 +316,7 @@ bool mpvk_find_phys_device(struct mpvk_ctx *vk, const char *name, bool sw)
(int)VK_VERSION_PATCH(prop.apiVersion));
vk->physd = devices[i];
vk->limits = prop.limits;
vkGetPhysicalDeviceFeatures(vk->physd, &vk->features);
talloc_free(devices);
return true;
}
@ -498,12 +499,20 @@ bool mpvk_device_init(struct mpvk_ctx *vk, struct mpvk_device_opts opts)
if (vk->spirv->required_ext)
MP_TARRAY_APPEND(tmp, exts, num_exts, vk->spirv->required_ext);
// Enable all features we optionally use
#define FEATURE(name) .name = vk->features.name
VkPhysicalDeviceFeatures feats = {
FEATURE(shaderStorageImageExtendedFormats),
};
#undef FEATURE
VkDeviceCreateInfo dinfo = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pQueueCreateInfos = qinfos,
.queueCreateInfoCount = num_qinfos,
.ppEnabledExtensionNames = exts,
.enabledExtensionCount = num_exts,
.pEnabledFeatures = &feats,
};
MP_VERBOSE(vk, "Creating vulkan device with extensions:\n");