mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 04:08:31 +00:00
win32u: Move thread detach from winex11.
This commit is contained in:
parent
dc7dcbeed7
commit
d519cf6ccc
|
@ -185,6 +185,10 @@ static void nulldrv_vulkan_surface_destroy( HWND hwnd, void *private )
|
|||
{
|
||||
}
|
||||
|
||||
static void nulldrv_vulkan_surface_detach( HWND hwnd, void *private )
|
||||
{
|
||||
}
|
||||
|
||||
static void nulldrv_vulkan_surface_presented( HWND hwnd, VkResult result )
|
||||
{
|
||||
}
|
||||
|
@ -203,6 +207,7 @@ static const struct vulkan_driver_funcs nulldrv_funcs =
|
|||
{
|
||||
.p_vulkan_surface_create = nulldrv_vulkan_surface_create,
|
||||
.p_vulkan_surface_destroy = nulldrv_vulkan_surface_destroy,
|
||||
.p_vulkan_surface_detach = nulldrv_vulkan_surface_detach,
|
||||
.p_vulkan_surface_presented = nulldrv_vulkan_surface_presented,
|
||||
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = nulldrv_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||
.p_get_host_surface_extension = nulldrv_get_host_surface_extension,
|
||||
|
@ -257,6 +262,7 @@ void vulkan_detach_surfaces( struct list *surfaces )
|
|||
|
||||
LIST_FOR_EACH_ENTRY( surface, surfaces, struct surface, entry )
|
||||
{
|
||||
driver_funcs->p_vulkan_surface_detach( surface->hwnd, surface->driver_private );
|
||||
list_remove( &surface->entry );
|
||||
list_init( &surface->entry );
|
||||
}
|
||||
|
|
|
@ -178,6 +178,10 @@ static void macdrv_vulkan_surface_destroy(HWND hwnd, void *private)
|
|||
wine_vk_surface_destroy(mac_surface);
|
||||
}
|
||||
|
||||
static void macdrv_vulkan_surface_detach(HWND hwnd, void *private)
|
||||
{
|
||||
}
|
||||
|
||||
static void macdrv_vulkan_surface_presented(HWND hwnd, VkResult result)
|
||||
{
|
||||
}
|
||||
|
@ -199,6 +203,7 @@ static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs =
|
|||
{
|
||||
.p_vulkan_surface_create = macdrv_vulkan_surface_create,
|
||||
.p_vulkan_surface_destroy = macdrv_vulkan_surface_destroy,
|
||||
.p_vulkan_surface_detach = macdrv_vulkan_surface_detach,
|
||||
.p_vulkan_surface_presented = macdrv_vulkan_surface_presented,
|
||||
|
||||
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||
|
|
|
@ -132,6 +132,10 @@ static void wayland_vulkan_surface_destroy(HWND hwnd, void *private)
|
|||
wine_vk_surface_destroy(client);
|
||||
}
|
||||
|
||||
static void wayland_vulkan_surface_detach(HWND hwnd, void *private)
|
||||
{
|
||||
}
|
||||
|
||||
static void wayland_vulkan_surface_presented(HWND hwnd, VkResult result)
|
||||
{
|
||||
struct wayland_surface *wayland_surface;
|
||||
|
@ -171,6 +175,7 @@ static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs =
|
|||
{
|
||||
.p_vulkan_surface_create = wayland_vulkan_surface_create,
|
||||
.p_vulkan_surface_destroy = wayland_vulkan_surface_destroy,
|
||||
.p_vulkan_surface_detach = wayland_vulkan_surface_detach,
|
||||
.p_vulkan_surface_presented = wayland_vulkan_surface_presented,
|
||||
|
||||
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||
|
|
|
@ -107,24 +107,6 @@ void destroy_vk_surface( HWND hwnd )
|
|||
pthread_mutex_unlock( &vulkan_mutex );
|
||||
}
|
||||
|
||||
void vulkan_thread_detach(void)
|
||||
{
|
||||
struct wine_vk_surface *surface, *next;
|
||||
DWORD thread_id = GetCurrentThreadId();
|
||||
|
||||
pthread_mutex_lock(&vulkan_mutex);
|
||||
LIST_FOR_EACH_ENTRY_SAFE(surface, next, &surface_list, struct wine_vk_surface, entry)
|
||||
{
|
||||
if (surface->hwnd_thread_id != thread_id)
|
||||
continue;
|
||||
|
||||
TRACE("Detaching surface %p, hwnd %p.\n", surface, surface->hwnd);
|
||||
XReparentWindow(gdi_display, surface->window, get_dummy_parent(), 0, 0);
|
||||
XSync(gdi_display, False);
|
||||
}
|
||||
pthread_mutex_unlock(&vulkan_mutex);
|
||||
}
|
||||
|
||||
static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, VkSurfaceKHR *surface, void **private )
|
||||
{
|
||||
VkResult res;
|
||||
|
@ -192,6 +174,20 @@ static void X11DRV_vulkan_surface_destroy( HWND hwnd, void *private )
|
|||
wine_vk_surface_release(x11_surface);
|
||||
}
|
||||
|
||||
static void X11DRV_vulkan_surface_detach( HWND hwnd, void *private )
|
||||
{
|
||||
struct wine_vk_surface *x11_surface = private;
|
||||
struct x11drv_win_data *data;
|
||||
|
||||
TRACE( "%p %p\n", hwnd, private );
|
||||
|
||||
if ((data = get_win_data( hwnd )))
|
||||
{
|
||||
detach_client_window( data, x11_surface->window );
|
||||
release_win_data( data );
|
||||
}
|
||||
}
|
||||
|
||||
static void X11DRV_vulkan_surface_presented(HWND hwnd, VkResult result)
|
||||
{
|
||||
}
|
||||
|
@ -214,6 +210,7 @@ static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs =
|
|||
{
|
||||
.p_vulkan_surface_create = X11DRV_vulkan_surface_create,
|
||||
.p_vulkan_surface_destroy = X11DRV_vulkan_surface_destroy,
|
||||
.p_vulkan_surface_detach = X11DRV_vulkan_surface_detach,
|
||||
.p_vulkan_surface_presented = X11DRV_vulkan_surface_presented,
|
||||
|
||||
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||
|
@ -247,12 +244,4 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, const struct vulkan_d
|
|||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
void destroy_vk_surface( HWND hwnd )
|
||||
{
|
||||
}
|
||||
|
||||
void vulkan_thread_detach(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* SONAME_LIBVULKAN */
|
||||
|
|
|
@ -1604,7 +1604,7 @@ static void client_window_events_disable( struct x11drv_win_data *data, Window c
|
|||
/**********************************************************************
|
||||
* detach_client_window
|
||||
*/
|
||||
static void detach_client_window( struct x11drv_win_data *data, Window client_window )
|
||||
void detach_client_window( struct x11drv_win_data *data, Window client_window )
|
||||
{
|
||||
if (data->client_window != client_window || !client_window) return;
|
||||
|
||||
|
@ -1940,7 +1940,6 @@ void X11DRV_DestroyWindow( HWND hwnd )
|
|||
release_win_data( data );
|
||||
free( data );
|
||||
destroy_gl_drawable( hwnd );
|
||||
destroy_vk_surface( hwnd );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -641,7 +641,6 @@ extern void sync_gl_drawable( HWND hwnd, BOOL known_child );
|
|||
extern void set_gl_drawable_parent( HWND hwnd, HWND parent );
|
||||
extern void destroy_gl_drawable( HWND hwnd );
|
||||
extern void destroy_vk_surface( HWND hwnd );
|
||||
extern void vulkan_thread_detach(void);
|
||||
|
||||
extern void wait_for_withdrawn_state( HWND hwnd, BOOL set );
|
||||
extern Window init_clip_window(void);
|
||||
|
@ -650,6 +649,7 @@ extern void read_net_wm_states( Display *display, struct x11drv_win_data *data )
|
|||
extern void update_net_wm_states( struct x11drv_win_data *data );
|
||||
extern void make_window_embedded( struct x11drv_win_data *data );
|
||||
extern Window create_client_window( HWND hwnd, const XVisualInfo *visual, Colormap colormap );
|
||||
extern void detach_client_window( struct x11drv_win_data *data, Window client_window );
|
||||
extern void destroy_client_window( HWND hwnd, Window client_window );
|
||||
extern void set_window_visual( struct x11drv_win_data *data, const XVisualInfo *vis, BOOL use_alpha );
|
||||
extern void change_systray_owner( Display *display, Window systray_window );
|
||||
|
|
|
@ -696,7 +696,6 @@ void X11DRV_ThreadDetach(void)
|
|||
|
||||
if (data)
|
||||
{
|
||||
vulkan_thread_detach();
|
||||
if (data->xim) XCloseIM( data->xim );
|
||||
if (data->font_set) XFreeFontSet( data->display, data->font_set );
|
||||
XSync( gdi_display, False ); /* make sure XReparentWindow requests have completed before closing the thread display */
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#define __WINE_VULKAN_DRIVER_H
|
||||
|
||||
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */
|
||||
#define WINE_VULKAN_DRIVER_VERSION 33
|
||||
#define WINE_VULKAN_DRIVER_VERSION 34
|
||||
|
||||
struct vulkan_funcs
|
||||
{
|
||||
|
@ -46,6 +46,7 @@ struct vulkan_driver_funcs
|
|||
{
|
||||
VkResult (*p_vulkan_surface_create)(HWND, VkInstance, VkSurfaceKHR *, void **);
|
||||
void (*p_vulkan_surface_destroy)(HWND, void *);
|
||||
void (*p_vulkan_surface_detach)(HWND, void *);
|
||||
void (*p_vulkan_surface_presented)(HWND, VkResult);
|
||||
|
||||
VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t);
|
||||
|
|
Loading…
Reference in a new issue