mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 17:26:22 +00:00
winevulkan: Use __wine_unix_call for checking Vulkan functions availability.
This commit is contained in:
parent
05d2576b1f
commit
395061e367
|
@ -88,6 +88,18 @@ static void *wine_vk_get_global_proc_addr(const char *name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static BOOL is_available_instance_function(VkInstance instance, const char *name)
|
||||
{
|
||||
struct is_available_instance_function_params params = { .instance = instance, .name = name };
|
||||
return vk_unix_call(unix_is_available_instance_function, ¶ms);
|
||||
}
|
||||
|
||||
static BOOL is_available_device_function(VkDevice device, const char *name)
|
||||
{
|
||||
struct is_available_device_function_params params = { .device = device, .name = name };
|
||||
return vk_unix_call(unix_is_available_device_function, ¶ms);
|
||||
}
|
||||
|
||||
PFN_vkVoidFunction WINAPI vkGetInstanceProcAddr(VkInstance instance, const char *name)
|
||||
{
|
||||
void *func;
|
||||
|
@ -111,7 +123,7 @@ PFN_vkVoidFunction WINAPI vkGetInstanceProcAddr(VkInstance instance, const char
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (!unix_funcs->p_is_available_instance_function(instance, name))
|
||||
if (!is_available_instance_function(instance, name))
|
||||
return NULL;
|
||||
|
||||
func = wine_vk_get_instance_proc_addr(name);
|
||||
|
@ -142,7 +154,7 @@ PFN_vkVoidFunction WINAPI vkGetDeviceProcAddr(VkDevice device, const char *name)
|
|||
* vkCommandBuffer or vkQueue.
|
||||
* Loader takes care of filtering of extensions which are enabled or not.
|
||||
*/
|
||||
if (unix_funcs->p_is_available_device_function(device, name))
|
||||
if (is_available_device_function(device, name))
|
||||
{
|
||||
func = wine_vk_get_device_proc_addr(name);
|
||||
if (func)
|
||||
|
@ -176,7 +188,7 @@ void * WINAPI vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char *n
|
|||
{
|
||||
TRACE("%p, %s\n", instance, debugstr_a(name));
|
||||
|
||||
if (!unix_funcs->p_is_available_instance_function(instance, name))
|
||||
if (!is_available_instance_function(instance, name))
|
||||
return NULL;
|
||||
|
||||
return wine_vk_get_phys_dev_proc_addr(name);
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
enum unix_call
|
||||
{
|
||||
unix_init,
|
||||
unix_is_available_instance_function,
|
||||
unix_is_available_device_function,
|
||||
unix_vkAcquireNextImage2KHR,
|
||||
unix_vkAcquireNextImageKHR,
|
||||
unix_vkAcquirePerformanceConfigurationINTEL,
|
||||
|
|
|
@ -2839,6 +2839,8 @@ class VkGenerator(object):
|
|||
f.write("const unixlib_entry_t __wine_unix_call_funcs[] =\n")
|
||||
f.write("{\n")
|
||||
f.write(" init_vulkan,\n")
|
||||
f.write(" vk_is_available_instance_function,\n")
|
||||
f.write(" vk_is_available_device_function,\n")
|
||||
for vk_func in self.registry.funcs.values():
|
||||
if not vk_func.needs_exposing():
|
||||
continue
|
||||
|
@ -2857,8 +2859,6 @@ class VkGenerator(object):
|
|||
f.write("const struct unix_funcs loader_funcs =\n")
|
||||
f.write("{\n")
|
||||
f.write(" wine_vk_call,\n")
|
||||
f.write(" wine_vk_is_available_instance_function,\n")
|
||||
f.write(" wine_vk_is_available_device_function,\n")
|
||||
f.write("};\n")
|
||||
|
||||
def generate_thunks_h(self, f, prefix):
|
||||
|
@ -3050,6 +3050,8 @@ class VkGenerator(object):
|
|||
f.write("enum unix_call\n")
|
||||
f.write("{\n")
|
||||
f.write(" unix_init,\n")
|
||||
f.write(" unix_is_available_instance_function,\n")
|
||||
f.write(" unix_is_available_device_function,\n")
|
||||
for vk_func in self.registry.funcs.values():
|
||||
if not vk_func.needs_exposing():
|
||||
continue
|
||||
|
|
|
@ -1872,12 +1872,14 @@ NTSTATUS wine_vkCreateRayTracingPipelinesNV(void *args)
|
|||
return res;
|
||||
}
|
||||
|
||||
BOOL WINAPI wine_vk_is_available_instance_function(VkInstance instance, const char *name)
|
||||
NTSTATUS vk_is_available_instance_function(void *arg)
|
||||
{
|
||||
return !!vk_funcs->p_vkGetInstanceProcAddr(instance->instance, name);
|
||||
struct is_available_instance_function_params *params = arg;
|
||||
return !!vk_funcs->p_vkGetInstanceProcAddr(params->instance->instance, params->name);
|
||||
}
|
||||
|
||||
BOOL WINAPI wine_vk_is_available_device_function(VkDevice device, const char *name)
|
||||
NTSTATUS vk_is_available_device_function(void *arg)
|
||||
{
|
||||
return !!vk_funcs->p_vkGetDeviceProcAddr(device->device, name);
|
||||
struct is_available_device_function_params *params = arg;
|
||||
return !!vk_funcs->p_vkGetDeviceProcAddr(params->device->device, params->name);
|
||||
}
|
||||
|
|
|
@ -94,6 +94,18 @@ struct wine_vk_debug_report_params
|
|||
const char *message;
|
||||
};
|
||||
|
||||
struct is_available_instance_function_params
|
||||
{
|
||||
VkInstance instance;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
struct is_available_device_function_params
|
||||
{
|
||||
VkDevice device;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
extern const struct unix_funcs *unix_funcs;
|
||||
extern unixlib_handle_t unix_handle DECLSPEC_HIDDEN;
|
||||
|
||||
|
@ -105,8 +117,6 @@ static inline NTSTATUS vk_unix_call(enum unix_call code, void *params)
|
|||
struct unix_funcs
|
||||
{
|
||||
NTSTATUS (WINAPI *p_vk_call)(enum unix_call, void *);
|
||||
BOOL (WINAPI *p_is_available_instance_function)(VkInstance, const char *);
|
||||
BOOL (WINAPI *p_is_available_device_function)(VkDevice, const char *);
|
||||
};
|
||||
|
||||
#endif /* __WINE_VULKAN_LOADER_H */
|
||||
|
|
|
@ -214,7 +214,7 @@ NTSTATUS init_vulkan(void *args) DECLSPEC_HIDDEN;
|
|||
|
||||
extern const struct unix_funcs loader_funcs;
|
||||
|
||||
BOOL WINAPI wine_vk_is_available_instance_function(VkInstance instance, const char *name) DECLSPEC_HIDDEN;
|
||||
BOOL WINAPI wine_vk_is_available_device_function(VkDevice device, const char *name) DECLSPEC_HIDDEN;
|
||||
NTSTATUS vk_is_available_instance_function(void *arg) DECLSPEC_HIDDEN;
|
||||
NTSTATUS vk_is_available_device_function(void *arg) DECLSPEC_HIDDEN;
|
||||
|
||||
#endif /* __WINE_VULKAN_PRIVATE_H */
|
||||
|
|
|
@ -10289,6 +10289,8 @@ uint64_t wine_vk_unwrap_handle(VkObjectType type, uint64_t handle)
|
|||
const unixlib_entry_t __wine_unix_call_funcs[] =
|
||||
{
|
||||
init_vulkan,
|
||||
vk_is_available_instance_function,
|
||||
vk_is_available_device_function,
|
||||
wine_vkAcquireNextImage2KHR,
|
||||
wine_vkAcquireNextImageKHR,
|
||||
wine_vkAcquirePerformanceConfigurationINTEL,
|
||||
|
@ -10757,6 +10759,4 @@ static NTSTATUS WINAPI wine_vk_call(enum unix_call code, void *params)
|
|||
const struct unix_funcs loader_funcs =
|
||||
{
|
||||
wine_vk_call,
|
||||
wine_vk_is_available_instance_function,
|
||||
wine_vk_is_available_device_function,
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue