MCPcopy Create free account
hub / github.com/SFML/SFML / glad_vk_get_extensions

Function glad_vk_get_extensions

examples/vulkan/vulkan.h:3157–3237  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3155
3156
3157static int glad_vk_get_extensions( VkPhysicalDevice physical_device, uint32_t *out_extension_count, char ***out_extensions) {
3158 uint32_t i;
3159 uint32_t instance_extension_count = 0;
3160 uint32_t device_extension_count = 0;
3161 uint32_t max_extension_count;
3162 uint32_t total_extension_count;
3163 char **extensions;
3164 VkExtensionProperties *ext_properties;
3165 VkResult result;
3166
3167 if (vkEnumerateInstanceExtensionProperties == NULL || (physical_device != NULL && vkEnumerateDeviceExtensionProperties == NULL)) {
3168 return 0;
3169 }
3170
3171 result = vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, NULL);
3172 if (result != VK_SUCCESS) {
3173 return 0;
3174 }
3175
3176 if (physical_device != NULL) {
3177 result = vkEnumerateDeviceExtensionProperties(physical_device, NULL, &device_extension_count, NULL);
3178 if (result != VK_SUCCESS) {
3179 return 0;
3180 }
3181 }
3182
3183 total_extension_count = instance_extension_count + device_extension_count;
3184 max_extension_count = instance_extension_count > device_extension_count
3185 ? instance_extension_count : device_extension_count;
3186
3187 ext_properties = (VkExtensionProperties*) malloc(max_extension_count * sizeof(VkExtensionProperties));
3188 if (ext_properties == NULL) {
3189 return 0;
3190 }
3191
3192 result = vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, ext_properties);
3193 if (result != VK_SUCCESS) {
3194 free((void*) ext_properties);
3195 return 0;
3196 }
3197
3198 extensions = (char**) calloc(total_extension_count, sizeof(char*));
3199 if (extensions == NULL) {
3200 free((void*) ext_properties);
3201 return 0;
3202 }
3203
3204 for (i = 0; i < instance_extension_count; ++i) {
3205 VkExtensionProperties ext = ext_properties[i];
3206
3207 size_t extension_name_length = strlen(ext.extensionName) + 1;
3208 extensions[i] = (char*) malloc(extension_name_length * sizeof(char));
3209 memcpy(extensions[i], ext.extensionName, extension_name_length * sizeof(char));
3210 }
3211
3212 if (physical_device != NULL) {
3213 result = vkEnumerateDeviceExtensionProperties(physical_device, NULL, &device_extension_count, ext_properties);
3214 if (result != VK_SUCCESS) {

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected