On Tue, Dec 18, 2018 at 5:25 PM Zhiyi Zhang zzhang@codeweavers.com wrote:
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com
dlls/vulkan-1/tests/vulkan.c | 4 +- dlls/winevulkan/make_vulkan | 6 ++- dlls/winex11.drv/vulkan.c | 81 ++++++++++++++++++++++++++++++++++++ include/wine/vulkan_driver.h | 8 +++- 4 files changed, 95 insertions(+), 4 deletions(-)
I think that this should be implemented in winevulkan instead. It isn't winex11-specific and I don't see a reason to duplicate it in every Wine graphics driver.
+static BOOL wine_get_adapter_luid(const GUID *uuid, LUID *luid) +{
- HDEVINFO devinfo;
- SP_DEVINFO_DATA devinfo_data = {sizeof(SP_DEVINFO_DATA)};
- DEVPROPTYPE property_type;
- GUID result;
- UINT i;
- devinfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_DISPLAY, NULL, NULL, DIGCF_PRESENT);
- if (devinfo == INVALID_HANDLE_VALUE)
return FALSE;
- for (i = 0; SetupDiEnumDeviceInfo(devinfo, i, &devinfo_data); ++i)
- {
property_type = DEVPROP_TYPE_UINT64;
if (!SetupDiGetDevicePropertyW(devinfo, &devinfo_data, &DEVPROPKEY_DISPLAY_ADAPTER_UUID, &property_type,
(BYTE *)&result, sizeof(result), NULL, 0))
continue;
if (IsEqualGUID(&result, uuid))
{
if (SetupDiGetDevicePropertyW(devinfo, &devinfo_data, &DEVPROPKEY_DISPLAY_ADAPTER_LUID, &property_type,
(BYTE *)luid, sizeof(*luid), NULL, 0))
return TRUE;
}
- }
You should call SetupDiDestroyDeviceInfoList().
+static void wine_fill_physical_device_id_luid(VkPhysicalDeviceProperties2 *properties) +{
- VkPhysicalDeviceIDProperties *id;
- struct wine_vk_structure_header *header;
- if (!properties->pNext)
return;
- for (header = properties->pNext; header; header = header->pNext)
- {
The if statement before the loop is redundant.
+static void X11DRV_vkGetPhysicalDeviceProperties2(VkPhysicalDevice phys_dev, VkPhysicalDeviceProperties2 *properties) +{
- pvkGetPhysicalDeviceProperties2(phys_dev, properties);
- wine_fill_physical_device_id_luid(properties);
+}
+static void X11DRV_vkGetPhysicalDeviceProperties2KHR(VkPhysicalDevice phys_dev, VkPhysicalDeviceProperties2 *properties) +{
- X11DRV_vkGetPhysicalDeviceProperties2(phys_dev, properties);
+}
You cannot assume that vkGetPhysicalDeviceProperties2() is available when vkGetPhysicalDeviceProperties2KHR() is called. We should call vkGetPhysicalDeviceProperties2KHR().