- moving some header files around for proper inclusion of windows.h - OS agnostic loading of arch-specific loadable modules - PUBLIC function declaration - better handling on NOMINMAX around windows.h inclusion. --- src/gallium/drivers/swr/rasterizer/common/os.h | 5 ++++- src/gallium/drivers/swr/swr_context.cpp | 16 +++++++-------- src/gallium/drivers/swr/swr_context.h | 2 ++ src/gallium/drivers/swr/swr_loader.cpp | 28 +++++++++++++++++++++++--- src/gallium/drivers/swr/swr_public.h | 11 ++++++---- src/gallium/drivers/swr/swr_screen.cpp | 25 +++++++---------------- 6 files changed, 53 insertions(+), 34 deletions(-)
diff --git a/src/gallium/drivers/swr/rasterizer/common/os.h b/src/gallium/drivers/swr/rasterizer/common/os.h index ac52b60..28e7ff5 100644 --- a/src/gallium/drivers/swr/rasterizer/common/os.h +++ b/src/gallium/drivers/swr/rasterizer/common/os.h @@ -33,8 +33,11 @@ #ifndef NOMINMAX #define NOMINMAX -#endif #include <windows.h> +#undef NOMINMAX +#else +#include <windows.h> +#endif #include <intrin.h> #include <cstdint> diff --git a/src/gallium/drivers/swr/swr_context.cpp b/src/gallium/drivers/swr/swr_context.cpp index cbc60e0..27273e0 100644 --- a/src/gallium/drivers/swr/swr_context.cpp +++ b/src/gallium/drivers/swr/swr_context.cpp @@ -21,6 +21,14 @@ * IN THE SOFTWARE. ***************************************************************************/ +#include "swr_context.h" +#include "swr_memory.h" +#include "swr_screen.h" +#include "swr_resource.h" +#include "swr_scratch.h" +#include "swr_query.h" +#include "swr_fence.h" + #include "util/u_memory.h" #include "util/u_inlines.h" #include "util/u_format.h" @@ -31,14 +39,6 @@ extern "C" { #include "util/u_surface.h" } -#include "swr_context.h" -#include "swr_memory.h" -#include "swr_screen.h" -#include "swr_resource.h" -#include "swr_scratch.h" -#include "swr_query.h" -#include "swr_fence.h" - #include "api.h" #include "backend.h" diff --git a/src/gallium/drivers/swr/swr_context.h b/src/gallium/drivers/swr/swr_context.h index eecfe0d..04e11fe 100644 --- a/src/gallium/drivers/swr/swr_context.h +++ b/src/gallium/drivers/swr/swr_context.h @@ -24,6 +24,8 @@ #ifndef SWR_CONTEXT_H #define SWR_CONTEXT_H +#include "common/os.h" + #include "pipe/p_context.h" #include "pipe/p_state.h" #include "util/u_blitter.h" diff --git a/src/gallium/drivers/swr/swr_loader.cpp b/src/gallium/drivers/swr/swr_loader.cpp index 2113c37..4f3329e 100644 --- a/src/gallium/drivers/swr/swr_loader.cpp +++ b/src/gallium/drivers/swr/swr_loader.cpp @@ -25,14 +25,17 @@ #include "util/u_dl.h" #include "swr_public.h" +#include "swr_screen.h" +#include "swr_resource.h" + #include <stdio.h> -#include <dlfcn.h> typedef pipe_screen *(*screen_create_proc)(struct sw_winsys *winsys); struct pipe_screen * swr_create_screen(struct sw_winsys *winsys) { + char filename[256]; fprintf(stderr, "SWR detected "); util_dl_library *pLibrary = nullptr; @@ -40,14 +43,15 @@ swr_create_screen(struct sw_winsys *winsys) util_cpu_detect(); if (util_cpu_caps.has_avx2) { fprintf(stderr, "AVX2\n"); - pLibrary = util_dl_open("libswrAVX2.so"); + sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrAVX2", UTIL_DL_EXT); } else if (util_cpu_caps.has_avx) { fprintf(stderr, "AVX\n"); - pLibrary = util_dl_open("libswrAVX.so"); + sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrAVX", UTIL_DL_EXT); } else { fprintf(stderr, "no AVX/AVX2 support. Aborting!\n"); exit(-1); } + pLibrary = util_dl_open(filename); if (!pLibrary) { fprintf(stderr, "SWR library load failure: %s\n", util_dl_error()); @@ -65,3 +69,21 @@ swr_create_screen(struct sw_winsys *winsys) return pScreenCreate(winsys); } + + +#ifdef _WIN32 +// swap function called from libl_gdi.c + +void +swr_gdi_swap(struct pipe_screen *screen, + struct pipe_resource *res, + void *hDC) +{ + screen->flush_frontbuffer(screen, + res, + 0, 0, + hDC, + NULL); +} + +#endif /* _WIN32 */ diff --git a/src/gallium/drivers/swr/swr_public.h b/src/gallium/drivers/swr/swr_public.h index 0814c3b..fede820 100644 --- a/src/gallium/drivers/swr/swr_public.h +++ b/src/gallium/drivers/swr/swr_public.h @@ -32,12 +32,15 @@ struct sw_displaytarget; extern "C" { #endif -struct pipe_screen *swr_create_screen(struct sw_winsys *winsys); +PUBLIC struct pipe_screen *swr_create_screen(struct sw_winsys *winsys); -struct sw_winsys *swr_get_winsys(struct pipe_screen *pipe); - -struct sw_displaytarget *swr_get_displaytarget(struct pipe_resource *resource); +#ifdef _WIN32 +void +swr_gdi_swap(struct pipe_screen *screen, + struct pipe_resource *res, + void *hDC); +#endif /* _WIN32 */ #ifdef __cplusplus } diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp index fa16edd..04a1d36 100644 --- a/src/gallium/drivers/swr/swr_screen.cpp +++ b/src/gallium/drivers/swr/swr_screen.cpp @@ -21,6 +21,13 @@ * IN THE SOFTWARE. ***************************************************************************/ +#include "swr_context.h" +#include "swr_public.h" +#include "swr_screen.h" +#include "swr_resource.h" +#include "swr_fence.h" +#include "gen_knobs.h" + #include "pipe/p_screen.h" #include "pipe/p_defines.h" #include "util/u_memory.h" @@ -35,13 +42,6 @@ extern "C" { #include "gallivm/lp_bld_limits.h" } -#include "swr_public.h" -#include "swr_screen.h" -#include "swr_context.h" -#include "swr_resource.h" -#include "swr_fence.h" -#include "gen_knobs.h" - #include "jit_api.h" #include <stdio.h> @@ -1021,14 +1021,3 @@ swr_create_screen(struct sw_winsys *winsys) return &screen->base; } -struct sw_winsys * -swr_get_winsys(struct pipe_screen *pipe) -{ - return ((struct swr_screen *)pipe)->winsys; -} - -struct sw_displaytarget * -swr_get_displaytarget(struct pipe_resource *resource) -{ - return ((struct swr_resource *)resource)->display_target; -} -- 2.10.0.windows.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev