diff options
Diffstat (limited to 'src/gallium/winsys/drm/sw')
-rw-r--r-- | src/gallium/winsys/drm/sw/Makefile | 3 | ||||
l--------- | src/gallium/winsys/drm/sw/soft_screen.c | 1 | ||||
-rw-r--r-- | src/gallium/winsys/drm/sw/sw_drm_api.c | 32 |
3 files changed, 31 insertions, 5 deletions
diff --git a/src/gallium/winsys/drm/sw/Makefile b/src/gallium/winsys/drm/sw/Makefile index 5f3c3ec325..12b20cbd45 100644 --- a/src/gallium/winsys/drm/sw/Makefile +++ b/src/gallium/winsys/drm/sw/Makefile @@ -4,11 +4,12 @@ include $(TOP)/configs/current LIBNAME = swdrm C_SOURCES = \ + soft_screen.c \ wrapper_sw_winsys.c \ sw_drm_api.c LIBRARY_INCLUDES = -LIBRARY_DEFINES = +LIBRARY_DEFINES = -DGALLIUM_SOFTPIPE include ../../../Makefile.template diff --git a/src/gallium/winsys/drm/sw/soft_screen.c b/src/gallium/winsys/drm/sw/soft_screen.c new file mode 120000 index 0000000000..423597ba31 --- /dev/null +++ b/src/gallium/winsys/drm/sw/soft_screen.c @@ -0,0 +1 @@ +../../../auxiliary/target-helpers/soft_screen.c
\ No newline at end of file diff --git a/src/gallium/winsys/drm/sw/sw_drm_api.c b/src/gallium/winsys/drm/sw/sw_drm_api.c index 9c5933c73a..ed3ce146eb 100644 --- a/src/gallium/winsys/drm/sw/sw_drm_api.c +++ b/src/gallium/winsys/drm/sw/sw_drm_api.c @@ -24,8 +24,11 @@ **********************************************************/ +#include "pipe/p_screen.h" #include "util/u_memory.h" -#include "softpipe/sp_public.h" +#include "target-helpers/soft_screen.h" + +#include "state_tracker/sw_winsys.h" #include "state_tracker/drm_api.h" #include "wrapper_sw_winsys.h" #include "sw_drm_api.h" @@ -60,14 +63,35 @@ sw_drm_create_screen(struct drm_api *_api, int drmFD, { struct sw_drm_api *swapi = sw_drm_api(_api); struct drm_api *api = swapi->api; - struct sw_winsys *sww; - struct pipe_screen *screen; + struct sw_winsys *sww = NULL; + struct pipe_screen *screen = NULL; + struct pipe_screen *soft_screen = NULL; screen = api->create_screen(api, drmFD, arg); + if (screen == NULL) + goto fail; sww = wrapper_sw_winsys_warp_pipe_screen(screen); + if (sww == NULL) + goto fail; + + soft_screen = gallium_soft_create_screen(sww); + if (soft_screen == NULL) + goto fail; + + return soft_screen; + +fail: + if (soft_screen) + soft_screen->destroy(soft_screen); + + if (sww) + sww->destroy(sww); + + if (screen) + screen->destroy(screen); - return softpipe_create_screen(sww); + return NULL; } static void |