• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  * Copyright (C) 2016 Intel Corporation.   All Rights Reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  ***************************************************************************/
23 
24 #include "util/u_cpu_detect.h"
25 #include "util/u_dl.h"
26 #include "swr_public.h"
27 
28 #include "pipe/p_screen.h"
29 
30 #include <stdio.h>
31 
32 typedef pipe_screen *(*screen_create_proc)(struct sw_winsys *winsys);
33 
34 struct pipe_screen *
swr_create_screen(struct sw_winsys * winsys)35 swr_create_screen(struct sw_winsys *winsys)
36 {
37    char filename[256];
38    fprintf(stderr, "SWR detected ");
39 
40    util_dl_library *pLibrary = nullptr;
41 
42    util_cpu_detect();
43    if (util_cpu_caps.has_avx2) {
44       fprintf(stderr, "AVX2\n");
45       sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrAVX2", UTIL_DL_EXT);
46    } else if (util_cpu_caps.has_avx) {
47       fprintf(stderr, "AVX\n");
48       sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrAVX", UTIL_DL_EXT);
49    } else {
50       fprintf(stderr, "no AVX/AVX2 support.  Aborting!\n");
51       exit(-1);
52    }
53    pLibrary = util_dl_open(filename);
54 
55    if (!pLibrary) {
56       fprintf(stderr, "SWR library load failure: %s\n", util_dl_error());
57       exit(-1);
58    }
59 
60    util_dl_proc pScreenProc = util_dl_get_proc_address(pLibrary, "swr_create_screen_internal");
61 
62    if (!pScreenProc) {
63       fprintf(stderr, "SWR library search failure: %s\n", util_dl_error());
64       exit(-1);
65    }
66 
67    screen_create_proc pScreenCreate = (screen_create_proc)pScreenProc;
68 
69    return pScreenCreate(winsys);
70 }
71 
72 
73 #ifdef _WIN32
74 // swap function called from libl_gdi.c
75 
76 void
swr_gdi_swap(struct pipe_screen * screen,struct pipe_resource * res,void * hDC)77 swr_gdi_swap(struct pipe_screen *screen,
78              struct pipe_resource *res,
79              void *hDC)
80 {
81    screen->flush_frontbuffer(screen,
82                              res,
83                              0, 0,
84                              hDC,
85                              NULL);
86 }
87 
88 #endif /* _WIN32 */
89