diff options
author | Jesse Natalie <jenatali@microsoft.com> | 2021-09-22 12:06:58 -0700 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2021-11-19 22:54:46 +0000 |
commit | 2771fd4a3fbed39e39ed5045c454d1893cbb3659 (patch) | |
tree | 8135d2ca0cdcbcb02eefa09c8a9e833bc7e7159c | |
parent | 5bfbf4bec990bc03142b7ecb19b616533ddece7b (diff) |
gallium, windows: Use HANDLE instead of FD for external objects
Reviewed-by: Emma Anholt <emma@anholt.net>
Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13054>
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_texture.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/zink/zink_resource.c | 7 | ||||
-rw-r--r-- | src/gallium/include/frontend/winsys_handle.h | 10 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_memoryobjects.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_extensions.c | 2 |
5 files changed, 21 insertions, 2 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index 09907722729..f979a165f52 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -1103,7 +1103,7 @@ llvmpipe_resource_get_param(struct pipe_screen *screen, if (!llvmpipe_resource_get_handle(screen, context, resource, &whandle, handle_usage)) return false; - *value = whandle.handle; + *value = (uint64_t)whandle.handle; return true; default: break; diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 818952268a1..205d32c8fb5 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -668,6 +668,7 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t mai.pNext = &emai; } +#ifdef ZINK_USE_DMABUF VkImportMemoryFdInfoKHR imfi = { VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR, NULL, @@ -685,6 +686,7 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t imfi.pNext = mai.pNext; mai.pNext = &imfi; } +#endif struct wsi_memory_allocate_info memory_wsi_info = { VK_STRUCTURE_TYPE_WSI_MEMORY_ALLOCATE_INFO_MESA, @@ -931,6 +933,7 @@ zink_resource_get_param(struct pipe_screen *pscreen, struct pipe_context *pctx, case PIPE_RESOURCE_PARAM_HANDLE_TYPE_SHARED: case PIPE_RESOURCE_PARAM_HANDLE_TYPE_KMS: case PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD: { +#ifdef ZINK_USE_DMABUF memset(&whandle, 0, sizeof(whandle)); if (param == PIPE_RESOURCE_PARAM_HANDLE_TYPE_SHARED) whandle.type = WINSYS_HANDLE_TYPE_SHARED; @@ -944,6 +947,10 @@ zink_resource_get_param(struct pipe_screen *pscreen, struct pipe_context *pctx, *value = whandle.handle; break; +#else + (void)whandle; + return false; +#endif } } return true; diff --git a/src/gallium/include/frontend/winsys_handle.h b/src/gallium/include/frontend/winsys_handle.h index 508feba472f..5f0be627fcc 100644 --- a/src/gallium/include/frontend/winsys_handle.h +++ b/src/gallium/include/frontend/winsys_handle.h @@ -2,6 +2,10 @@ #ifndef _WINSYS_HANDLE_H_ #define _WINSYS_HANDLE_H_ +#ifdef _WIN32 +#include <windows.h> +#endif + #ifdef __cplusplus extern "C" { #endif @@ -9,6 +13,8 @@ extern "C" { #define WINSYS_HANDLE_TYPE_SHARED 0 #define WINSYS_HANDLE_TYPE_KMS 1 #define WINSYS_HANDLE_TYPE_FD 2 +/* Win32 handles serve the same purpose as FD, just on Windows, so alias the value */ +#define WINSYS_HANDLE_TYPE_WIN32_HANDLE WINSYS_HANDLE_TYPE_FD #define WINSYS_HANDLE_TYPE_SHMID 3 #define WINSYS_HANDLE_TYPE_D3D12_RES 4 @@ -38,7 +44,11 @@ struct winsys_handle * Input to texture_from_handle. * Output for texture_get_handle. */ +#ifdef _WIN32 + HANDLE handle; +#else unsigned handle; +#endif /** * Input to texture_from_handle. * Output for texture_get_handle. diff --git a/src/mesa/state_tracker/st_cb_memoryobjects.c b/src/mesa/state_tracker/st_cb_memoryobjects.c index b3089c030f2..15aa5b1e0c3 100644 --- a/src/mesa/state_tracker/st_cb_memoryobjects.c +++ b/src/mesa/state_tracker/st_cb_memoryobjects.c @@ -70,6 +70,7 @@ st_import_memoryobj_fd(struct gl_context *ctx, GLuint64 size, int fd) { +#if !defined(_WIN32) struct st_memory_object *st_obj = st_memory_object(obj); struct st_context *st = st_context(ctx); struct pipe_screen *screen = st->screen; @@ -85,7 +86,6 @@ st_import_memoryobj_fd(struct gl_context *ctx, &whandle, obj->Dedicated); -#if !defined(_WIN32) /* We own fd, but we no longer need it. So get rid of it */ close(fd); #endif diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 850dd1236e8..d74f905a1ef 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -844,7 +844,9 @@ void st_init_extensions(struct pipe_screen *screen, { o(EXT_disjoint_timer_query), PIPE_CAP_QUERY_TIMESTAMP }, { o(EXT_draw_buffers2), PIPE_CAP_INDEP_BLEND_ENABLE }, { o(EXT_memory_object), PIPE_CAP_MEMOBJ }, +#ifndef _WIN32 { o(EXT_memory_object_fd), PIPE_CAP_MEMOBJ }, +#endif { o(EXT_multisampled_render_to_texture), PIPE_CAP_SURFACE_SAMPLE_COUNT }, { o(EXT_semaphore), PIPE_CAP_FENCE_SIGNAL }, { o(EXT_semaphore_fd), PIPE_CAP_FENCE_SIGNAL }, |