mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
swr: Windows-related changes
- Handle dynamic library loading for windows - Implement swap for gdi - fix prototypes - update include paths on configure-based build for swr_loader.cpp v2: split to multiple patches v3: split and reshuffle some more; renamed title v4: move Makefile.am changes to other commit. Modify header files Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
87bd28210f
commit
bc26e8d4a7
2 changed files with 29 additions and 7 deletions
|
|
@ -25,14 +25,16 @@
|
|||
#include "util/u_dl.h"
|
||||
#include "swr_public.h"
|
||||
|
||||
#include "pipe/p_screen.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 +42,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 +68,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 */
|
||||
|
|
|
|||
|
|
@ -38,10 +38,11 @@ struct pipe_screen *swr_create_screen(struct sw_winsys *winsys);
|
|||
// arch-specific dll entry point
|
||||
PUBLIC struct pipe_screen *swr_create_screen_internal(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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue