Skip to content

Commit 6b65213

Browse files
Paul Gofmangofman
authored andcommitted
fixup! winevulkan: Implement VK_KHR_external_memory_win32 for buffers.
1 parent c45a4f2 commit 6b65213

1 file changed

Lines changed: 26 additions & 38 deletions

File tree

dlls/winevulkan/vulkan.c

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,6 @@ static void wine_vk_device_get_queues(struct VkDevice_T *device,
384384
static void wine_vk_device_free_create_info(VkDeviceCreateInfo *create_info)
385385
{
386386
free_VkDeviceCreateInfo_struct_chain(create_info);
387-
388-
if (create_info->enabledExtensionCount)
389-
free((void *)create_info->ppEnabledExtensionNames);
390387
}
391388

392389
static char **parse_xr_extensions(unsigned int *len)
@@ -448,8 +445,7 @@ static char **parse_xr_extensions(unsigned int *len)
448445
static VkResult wine_vk_device_convert_create_info(const VkDeviceCreateInfo *src,
449446
VkDeviceCreateInfo *dst, BOOL *must_free_extensions)
450447
{
451-
unsigned int i, append_xr = 0, wine_extension_count;
452-
const char **enabled_extensions;
448+
unsigned int i, append_xr = 0, replace_win32 = 0, wine_extension_count;
453449
VkResult res;
454450

455451
static const char *wine_xr_extension_name = "VK_WINE_openxr_device_extensions";
@@ -475,23 +471,38 @@ static VkResult wine_vk_device_convert_create_info(const VkDeviceCreateInfo *src
475471
break;
476472
}
477473
}
478-
479-
if (append_xr)
474+
for (i = 0; i < src->enabledExtensionCount; i++)
475+
{
476+
if (!strcmp(src->ppEnabledExtensionNames[i], "VK_KHR_external_memory_win32"))
477+
{
478+
replace_win32 = 1;
479+
break;
480+
}
481+
}
482+
if (append_xr || replace_win32)
480483
{
481-
unsigned int xr_extensions_len, o = 0;
482-
char **xr_extensions_list = parse_xr_extensions(&xr_extensions_len);
484+
unsigned int xr_extensions_len = 0, o = 0;
485+
char **xr_extensions_list = NULL;
486+
char **new_extensions_list;
483487

484-
char **new_extensions_list = malloc(sizeof(char *) * (dst->enabledExtensionCount + xr_extensions_len));
488+
if (append_xr)
489+
xr_extensions_list = parse_xr_extensions(&xr_extensions_len);
485490

486-
if(!xr_extensions_list)
491+
new_extensions_list = malloc(sizeof(char *) * (dst->enabledExtensionCount + xr_extensions_len));
492+
493+
if(append_xr && !xr_extensions_list)
487494
WARN("Requested to use XR extensions, but none are set!\n");
488495

489496
for (i = 0; i < dst->enabledExtensionCount; i++)
490497
{
491-
if (strcmp(dst->ppEnabledExtensionNames[i], wine_xr_extension_name) != 0)
492-
{
493-
new_extensions_list[o++] = strdup(dst->ppEnabledExtensionNames[i]);
494-
}
498+
if (append_xr && !strcmp(dst->ppEnabledExtensionNames[i], wine_xr_extension_name))
499+
continue;
500+
501+
if (replace_win32 && !strcmp(src->ppEnabledExtensionNames[i], "VK_KHR_external_memory_win32"))
502+
new_extensions_list[o] = strdup("VK_KHR_external_memory_fd");
503+
else
504+
new_extensions_list[o] = strdup(dst->ppEnabledExtensionNames[i]);
505+
++o;
495506
}
496507

497508
TRACE("appending XR extensions:\n");
@@ -518,29 +529,6 @@ static VkResult wine_vk_device_convert_create_info(const VkDeviceCreateInfo *src
518529
TRACE("Extension %u: %s.\n", i, debugstr_a(dst->ppEnabledExtensionNames[i]));
519530
}
520531

521-
if (src->enabledExtensionCount > 0)
522-
{
523-
enabled_extensions = calloc(src->enabledExtensionCount, sizeof(*src->ppEnabledExtensionNames));
524-
if (!enabled_extensions)
525-
{
526-
free_VkDeviceCreateInfo_struct_chain(dst);
527-
return VK_ERROR_OUT_OF_HOST_MEMORY;
528-
}
529-
530-
for (i = 0; i < src->enabledExtensionCount; i++)
531-
{
532-
if (!strcmp(src->ppEnabledExtensionNames[i], "VK_KHR_external_memory_win32"))
533-
{
534-
enabled_extensions[i] = "VK_KHR_external_memory_fd";
535-
}
536-
else
537-
{
538-
enabled_extensions[i] = src->ppEnabledExtensionNames[i];
539-
}
540-
}
541-
dst->ppEnabledExtensionNames = enabled_extensions;
542-
}
543-
544532
return VK_SUCCESS;
545533
}
546534

0 commit comments

Comments
 (0)