[Mesa-dev] [PATCH v3 06/10] swr: Windows-related changes
George Kyriazis
george.kyriazis at intel.com
Wed Nov 16 02:26:57 UTC 2016
- Handle dynamic library loading for windows
- Implement swap for gdi
- fix prototypes
- update include paths on configure-based build for swr_loader.cpp
---
src/gallium/drivers/swr/Makefile.am | 7 +++++++
src/gallium/drivers/swr/swr_loader.cpp | 28 +++++++++++++++++++++++++---
src/gallium/drivers/swr/swr_public.h | 11 +++++++----
3 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/src/gallium/drivers/swr/Makefile.am b/src/gallium/drivers/swr/Makefile.am
index dd1c2e6..305154f 100644
--- a/src/gallium/drivers/swr/Makefile.am
+++ b/src/gallium/drivers/swr/Makefile.am
@@ -217,6 +217,12 @@ libswrAVX2_la_CXXFLAGS = \
libswrAVX2_la_SOURCES = \
$(COMMON_SOURCES)
+# XXX: $(SWR_AVX_CXXFLAGS) should not be included, but we end up including
+# simdintrin.h, which throws a warning if AVX is not enabled
+libmesaswr_la_CXXFLAGS = \
+ $(COMMON_CXXFLAGS) \
+ $(SWR_AVX_CXXFLAGS)
+
# XXX: Don't ship these generated sources for now, since they are specific
# to the LLVM version they are generated from. Thus a release tarball
# containing the said files, generated against eg. LLVM 3.8 will fail to build
@@ -235,6 +241,7 @@ libswrAVX2_la_LDFLAGS = \
include $(top_srcdir)/install-gallium-links.mk
EXTRA_DIST = \
+ SConscript \
rasterizer/archrast/events.proto \
rasterizer/jitter/scripts/gen_llvm_ir_macros.py \
rasterizer/jitter/scripts/gen_llvm_types.py \
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
}
--
2.10.0.windows.1
More information about the mesa-dev
mailing list