vkd3d: Remove vkd3d_optional_device_extensions_info
Roll this into vkd3d_device_create_info, no need for this to be a pNext thing. Additionally, fix some memory leaks on device creation failure. Signed-off-by: Joshua Ashton <joshua@froggi.es>
This commit is contained in:
parent
59148c1932
commit
bd988f2b74
|
@ -76,9 +76,6 @@ enum vkd3d_structure_type
|
|||
VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
|
||||
VKD3D_STRUCTURE_TYPE_IMAGE_RESOURCE_CREATE_INFO,
|
||||
|
||||
/* 1.2 */
|
||||
VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO,
|
||||
|
||||
VKD3D_FORCE_32_BIT_ENUM(VKD3D_STRUCTURE_TYPE),
|
||||
};
|
||||
|
||||
|
@ -125,20 +122,13 @@ struct vkd3d_device_create_info
|
|||
const char * const *device_extensions;
|
||||
uint32_t device_extension_count;
|
||||
|
||||
const char * const *optional_device_extensions;
|
||||
uint32_t optional_device_extension_count;
|
||||
|
||||
IUnknown *parent;
|
||||
LUID adapter_luid;
|
||||
};
|
||||
|
||||
/* Extends vkd3d_device_create_info. Available since 1.2. */
|
||||
struct vkd3d_optional_device_extensions_info
|
||||
{
|
||||
enum vkd3d_structure_type type;
|
||||
const void *next;
|
||||
|
||||
const char * const *extensions;
|
||||
uint32_t extension_count;
|
||||
};
|
||||
|
||||
struct vkd3d_image_resource_create_info
|
||||
{
|
||||
enum vkd3d_structure_type type;
|
||||
|
|
|
@ -1543,10 +1543,9 @@ static void vkd3d_trace_physical_device_features(const struct vkd3d_physical_dev
|
|||
|
||||
static HRESULT vkd3d_init_device_extensions(struct d3d12_device *device,
|
||||
const struct vkd3d_device_create_info *create_info,
|
||||
uint32_t *device_extension_count, bool **user_extension_supported)
|
||||
uint32_t *device_extension_count, bool *user_extension_supported)
|
||||
{
|
||||
const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance->vk_procs;
|
||||
const struct vkd3d_optional_device_extensions_info *optional_extensions;
|
||||
VkPhysicalDevice physical_device = device->vk_physical_device;
|
||||
struct vkd3d_vulkan_info *vulkan_info = &device->vk_info;
|
||||
VkExtensionProperties *vk_extensions;
|
||||
|
@ -1574,26 +1573,13 @@ static HRESULT vkd3d_init_device_extensions(struct d3d12_device *device,
|
|||
return hresult_from_vk_result(vr);
|
||||
}
|
||||
|
||||
optional_extensions = vkd3d_find_struct(create_info->next, OPTIONAL_DEVICE_EXTENSIONS_INFO);
|
||||
if (optional_extensions && optional_extensions->extension_count)
|
||||
{
|
||||
if (!(*user_extension_supported = vkd3d_calloc(optional_extensions->extension_count, sizeof(bool))))
|
||||
{
|
||||
vkd3d_free(vk_extensions);
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*user_extension_supported = NULL;
|
||||
}
|
||||
|
||||
*device_extension_count = vkd3d_check_extensions(vk_extensions, count, NULL, 0,
|
||||
optional_device_extensions, ARRAY_SIZE(optional_device_extensions),
|
||||
create_info->device_extensions, create_info->device_extension_count,
|
||||
optional_extensions ? optional_extensions->extensions : NULL,
|
||||
optional_extensions ? optional_extensions->extension_count : 0,
|
||||
*user_extension_supported, vulkan_info, "device");
|
||||
create_info->device_extensions,
|
||||
create_info->device_extension_count,
|
||||
create_info->optional_device_extensions,
|
||||
create_info->optional_device_extension_count,
|
||||
user_extension_supported, vulkan_info, "device");
|
||||
|
||||
if (get_spec_version(vk_extensions, count, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME) < 3)
|
||||
vulkan_info->EXT_vertex_attribute_divisor = false;
|
||||
|
@ -1999,7 +1985,6 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
|
|||
const struct vkd3d_device_create_info *create_info)
|
||||
{
|
||||
const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance->vk_procs;
|
||||
const struct vkd3d_optional_device_extensions_info *optional_extensions;
|
||||
struct vkd3d_device_queue_info device_queue_info;
|
||||
VkPhysicalDeviceProperties device_properties;
|
||||
bool *user_extension_supported = NULL;
|
||||
|
@ -2039,14 +2024,26 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
|
|||
|
||||
VK_CALL(vkGetPhysicalDeviceMemoryProperties(physical_device, &device->memory_properties));
|
||||
|
||||
if (create_info->optional_device_extension_count)
|
||||
{
|
||||
if (!(user_extension_supported = vkd3d_calloc(create_info->optional_device_extension_count, sizeof(bool))))
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
if (FAILED(hr = vkd3d_init_device_extensions(device, create_info,
|
||||
&extension_count, &user_extension_supported)))
|
||||
&extension_count, user_extension_supported)))
|
||||
{
|
||||
vkd3d_free(user_extension_supported);
|
||||
return hr;
|
||||
}
|
||||
|
||||
vkd3d_physical_device_info_init(&device->device_info, device);
|
||||
|
||||
if (FAILED(hr = vkd3d_init_device_caps(device, create_info, &device->device_info)))
|
||||
{
|
||||
vkd3d_free(user_extension_supported);
|
||||
return hr;
|
||||
}
|
||||
|
||||
if (!(extensions = vkd3d_calloc(extension_count, sizeof(*extensions))))
|
||||
{
|
||||
|
@ -2054,8 +2051,6 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
|
|||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
optional_extensions = vkd3d_find_struct(create_info->next, OPTIONAL_DEVICE_EXTENSIONS_INFO);
|
||||
|
||||
/* Create device */
|
||||
device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
device_info.pNext = device->device_info.features2.pNext;
|
||||
|
@ -2066,9 +2061,10 @@ static HRESULT vkd3d_create_vk_device(struct d3d12_device *device,
|
|||
device_info.ppEnabledLayerNames = NULL;
|
||||
device_info.enabledExtensionCount = vkd3d_enable_extensions(extensions, NULL, 0,
|
||||
optional_device_extensions, ARRAY_SIZE(optional_device_extensions),
|
||||
create_info->device_extensions, create_info->device_extension_count,
|
||||
optional_extensions ? optional_extensions->extensions : NULL,
|
||||
optional_extensions ? optional_extensions->extension_count : 0,
|
||||
create_info->device_extensions,
|
||||
create_info->device_extension_count,
|
||||
create_info->optional_device_extensions,
|
||||
create_info->optional_device_extension_count,
|
||||
user_extension_supported, &device->vk_info);
|
||||
device_info.ppEnabledExtensionNames = extensions;
|
||||
device_info.pEnabledFeatures = &device->device_info.features2.features;
|
||||
|
|
|
@ -539,12 +539,6 @@ static HRESULT create_vkd3d_device(struct vkd3d_instance *instance,
|
|||
{
|
||||
VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME,
|
||||
};
|
||||
static const struct vkd3d_optional_device_extensions_info optional_extensions =
|
||||
{
|
||||
.type = VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO,
|
||||
.extensions = device_extensions,
|
||||
.extension_count = ARRAY_SIZE(device_extensions),
|
||||
};
|
||||
|
||||
struct vkd3d_device_create_info device_create_info;
|
||||
VkPhysicalDevice vk_physical_device;
|
||||
|
@ -554,10 +548,12 @@ static HRESULT create_vkd3d_device(struct vkd3d_instance *instance,
|
|||
|
||||
memset(&device_create_info, 0, sizeof(device_create_info));
|
||||
device_create_info.type = VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
device_create_info.next = &optional_extensions;
|
||||
device_create_info.next = NULL;
|
||||
device_create_info.minimum_feature_level = minimum_feature_level;
|
||||
device_create_info.instance = instance;
|
||||
device_create_info.vk_physical_device = vk_physical_device;
|
||||
device_create_info.optional_device_extensions = device_extensions;
|
||||
device_create_info.optional_device_extension_count = ARRAY_SIZE(device_extensions);
|
||||
|
||||
return vkd3d_create_device(&device_create_info, iid, device);
|
||||
}
|
||||
|
|
|
@ -463,7 +463,6 @@ static void test_optional_device_extensions(void)
|
|||
VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
|
||||
};
|
||||
|
||||
struct vkd3d_optional_device_extensions_info optional_extensions;
|
||||
struct vkd3d_instance_create_info instance_create_info;
|
||||
struct vkd3d_device_create_info device_create_info;
|
||||
struct vkd3d_instance *instance;
|
||||
|
@ -483,14 +482,10 @@ static void test_optional_device_extensions(void)
|
|||
hr = vkd3d_create_device(&device_create_info, &IID_ID3D12Device, (void **)&device);
|
||||
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
optional_extensions.type = VKD3D_STRUCTURE_TYPE_OPTIONAL_DEVICE_EXTENSIONS_INFO;
|
||||
optional_extensions.next = NULL;
|
||||
optional_extensions.extensions = extensions;
|
||||
optional_extensions.extension_count = ARRAY_SIZE(extensions);
|
||||
|
||||
device_create_info.next = &optional_extensions;
|
||||
device_create_info.device_extensions = NULL;
|
||||
device_create_info.device_extension_count = 0;
|
||||
device_create_info.optional_device_extensions = extensions;
|
||||
device_create_info.optional_device_extensions = ARRAY_SIZE(extensions);
|
||||
hr = vkd3d_create_device(&device_create_info, &IID_ID3D12Device, (void **)&device);
|
||||
ok(hr == S_OK, "Failed to create device, hr %#x.\n", hr);
|
||||
|
||||
|
|
Loading…
Reference in New Issue