Module: Mesa Branch: master Commit: 29996b88c2bae10a61cc2196e49b2fffd597d929 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=29996b88c2bae10a61cc2196e49b2fffd597d929
Author: Jesse Natalie <[email protected]> Date: Fri Feb 21 13:02:35 2020 -0800 d3d12: Add glon12 target which only includes d3d12 driver This driver has no WGL or GL entrypoints, only the ones required by the driver-loader. Reviewed-by: Charmaine Lee <[email protected]> Reviewed-by: Erik Faye-Lund <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7535> --- src/gallium/meson.build | 3 + src/gallium/targets/libgl-d3d12/libgl_d3d12.c | 139 +++++++++++++++++++++++++ src/gallium/targets/libgl-d3d12/meson.build | 38 +++++++ src/gallium/targets/libgl-d3d12/openglon12.def | 20 ++++ 4 files changed, 200 insertions(+) diff --git a/src/gallium/meson.build b/src/gallium/meson.build index ae0e7fcb3c3..4c887fbcb62 100644 --- a/src/gallium/meson.build +++ b/src/gallium/meson.build @@ -218,6 +218,9 @@ endif if with_platform_windows subdir('frontends/wgl') subdir('targets/libgl-gdi') + if with_gallium_d3d12 + subdir('targets/libgl-d3d12') + endif endif if with_tests subdir('targets/graw-null') diff --git a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c new file mode 100644 index 00000000000..94b6d99d1bf --- /dev/null +++ b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c @@ -0,0 +1,139 @@ +/* + * Copyright © Microsoft Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +#include <windows.h> + +#include "util/u_debug.h" +#include "stw_winsys.h" +#include "stw_device.h" +#include "gdi/gdi_sw_winsys.h" + +#include "softpipe/sp_texture.h" +#include "softpipe/sp_screen.h" +#include "softpipe/sp_public.h" + +#ifndef GALLIUM_D3D12 +#error "This file must be compiled only with the D3D12 driver" +#endif +#include "d3d12/d3d12_public.h" + +static struct pipe_screen * +gdi_screen_create(void) +{ + struct pipe_screen *screen = NULL; + struct sw_winsys *winsys; + + winsys = gdi_create_sw_winsys(); + if(!winsys) + goto no_winsys; + + screen = d3d12_create_screen( winsys ); + + if(!screen) + goto no_screen; + + return screen; + +no_screen: + winsys->destroy(winsys); +no_winsys: + return NULL; +} + + +static void +gdi_present(struct pipe_screen *screen, + struct pipe_resource *res, + HDC hDC) +{ + /* This will fail if any interposing layer (trace, debug, etc) has + * been introduced between the state-trackers and the pipe driver. + * + * Ideally this would get replaced with a call to + * pipe_screen::flush_frontbuffer(). + * + * Failing that, it may be necessary for intervening layers to wrap + * other structs such as this stw_winsys as well... + */ + + struct sw_winsys *winsys = NULL; + struct sw_displaytarget *dt = NULL; + + screen->flush_frontbuffer(screen, res, 0, 0, hDC, NULL); +} + + +static const struct stw_winsys stw_winsys = { + &gdi_screen_create, + &gdi_present, + NULL, /* get_adapter_luid */ + NULL, /* shared_surface_open */ + NULL, /* shared_surface_close */ + NULL /* compose */ +}; + + +EXTERN_C BOOL WINAPI +DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); + + +BOOL WINAPI +DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + stw_init(&stw_winsys); + stw_init_thread(); + break; + + case DLL_THREAD_ATTACH: + stw_init_thread(); + break; + + case DLL_THREAD_DETACH: + stw_cleanup_thread(); + break; + + case DLL_PROCESS_DETACH: + if (lpvReserved == NULL) { + // We're being unloaded from the process. + stw_cleanup_thread(); + stw_cleanup(); + } else { + // Process itself is terminating, and all threads and modules are + // being detached. + // + // The order threads (including llvmpipe rasterizer threads) are + // destroyed can not be relied up, so it's not safe to cleanup. + // + // However global destructors (e.g., LLVM's) will still be called, and + // if Microsoft OPENGL32.DLL's DllMain is called after us, it will + // still try to invoke DrvDeleteContext to destroys all outstanding, + // so set stw_dev to NULL to return immediately if that happens. + stw_dev = NULL; + } + break; + } + return TRUE; +} diff --git a/src/gallium/targets/libgl-d3d12/meson.build b/src/gallium/targets/libgl-d3d12/meson.build new file mode 100644 index 00000000000..2f60a29d7c9 --- /dev/null +++ b/src/gallium/targets/libgl-d3d12/meson.build @@ -0,0 +1,38 @@ +# Copyright © 2018 Intel Corporation + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +libopenglon12 = shared_library( + 'openglon12', + ['libgl_d3d12.c'], + vs_module_defs : 'openglon12.def', + include_directories : [ + inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, + inc_wgl, inc_gallium_winsys_sw, inc_gallium_drivers, + ], + link_whole : [libwgl], + link_with : [ + libgallium, libglsl, libmesa_gallium, libwsgdi, libglapi_static, libglapi + ], + dependencies : [ + dep_ws2_32, idep_nir, idep_mesautil, driver_d3d12 + ], + name_prefix : '', # otherwise mingw will create libopenglon12.dll + install : true, +) diff --git a/src/gallium/targets/libgl-d3d12/openglon12.def b/src/gallium/targets/libgl-d3d12/openglon12.def new file mode 100644 index 00000000000..f21e70c3b33 --- /dev/null +++ b/src/gallium/targets/libgl-d3d12/openglon12.def @@ -0,0 +1,20 @@ +EXPORTS + DrvCopyContext + DrvCreateContext + DrvCreateLayerContext + DrvDeleteContext + DrvDescribeLayerPlane + DrvDescribePixelFormat + DrvGetLayerPaletteEntries + DrvGetProcAddress + DrvPresentBuffers + DrvRealizeLayerPalette + DrvReleaseContext + DrvSetCallbackProcs + DrvSetContext + DrvSetLayerPaletteEntries + DrvSetPixelFormat + DrvShareLists + DrvSwapBuffers + DrvSwapLayerBuffers + DrvValidateVersion _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
