[PATCH 5/5] winevulkan: Add executable name Quirk regkey handling

Liam Middlebrook lmiddlebrook at nvidia.com
Tue Sep 15 06:43:32 CDT 2020



On 9/15/20 12:52 AM, Alexandre Julliard wrote:
> Liam Middlebrook <lmiddlebrook at nvidia.com> writes:
> 
>> +    if (!wine_vk_get_exe_name(exe_name, MAX_PATH))
>> +        exe_name[0] = '\0';
>> +
>>       /* Match regkey settings in the following order, breaking early if settings
>>        * are found:
>>        *     pApplicationInfo->pApplicationName
>>        *         @@ Wine registry key: HKCU\Software\Wine\Vulkan\pApplicationName\<pApplicationName>
>>        *     pApplicationInfo->pEngineName
>>        *         @@ Wine registry key: HKCU\Software\Wine\Vulkan\pEngineName\<pEngineName>
>> +     *     executable name
>> +     *         @@ Wine registry key: HKCU\Software\Wine\Vulkan\exeName\app.exe
>>        *     global defaults
>>        *         @@ Wine registry key: HKCU\Software\Wine\Vulkan
> 
> Do we really need to invent a new mechanism for this?  All other modules
> use HKCU\Software\Wine\AppDefaults\<exename> for that sort of thing.
> 

For the executable name matching. I'm fine with using the existing 
HKCU\Software\Wine\AppDefaults\<exename>\ pattern that other modules are 
using. I had picked the format above to be consistent with this newer 
syntax I came up with for VkApplicationInfo, but I agree that 
consistency with the rest of WINE seems like a better fit overall. I'll 
change that to be consistent with the other AppDefaults regkeys in WINE.

Looking at the other APIs which have AppDefaults keys available, it 
doesn't appear that any of these APIs have a mechanism which serves 
quite the same purpose that Vulkan does with VkApplicationInfo (namely 
the application providing information about itself to the 
implementation). I guess there could be an argument that this is 
generically possible by keying off of values from VS_VERSIONINFO, but I 
don't think it's quite the same as that's a mechanism of Windows rather 
than the APIs themselves. The Vulkan specification notes the following 
about VkInstanceCreateInfo.pApplicationInfo [1]:

> this information helps implementations recognize behavior inherent to classes of applications

I think it makes sense moving forward, as we see more applications 
adopting use of Vulkan, to utilize the mechanisms the API affords 
implementations for identifying a running application.

Additionally, this information is already being used within WineVulkan 
to match the idTech engine [2]. There are also a few different Vulkan 
driver implementations [3], [4], [5], which use this for enabling 
per-application/per-engine settings.

While writing this out I also found an issue with patch 3/5 where I was 
incorrectly assuming that pApplicationInfo would always be a valid 
pointer we could read from. I'll fix that locally for now, but wait to 
send out v2 of the series until we bottom out on the discussion here.


Thanks,

Liam Middlebrook


[1] - 
https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkInstanceCreateInfo
[2] - 
https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/winevulkan/vulkan.c#l728
[3] - 
https://github.com/GPUOpen-Drivers/xgl/blob/dev/icd/api/app_profile.cpp#L100
[4] - 
https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/amd/vulkan/radv_device.c#L557
[5] - 
https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/intel/vulkan/anv_device.c#L766



More information about the wine-devel mailing list