Browse Source

targets/gbm: build pipe drivers

Build pipe drivers here instead of using those built by the
soon-to-be-removed targets/egl.

[with an update by Benjamin Franzke to use --{start|end}-group]
tags/mesa-7.11-rc1
Chia-I Wu 14 years ago
parent
commit
f36d210c93

+ 125
- 1
src/gallium/targets/gbm/Makefile View File

@@ -24,9 +24,133 @@ GBM_LIBS = $(LIBUDEV_LIBS) $(LIBDRM_LIB) \


GBM_CFLAGS = \
-D_EGL_GALLIUM_DRIVER_SEARCH_DIR=\"$(EGL_DRIVER_INSTALL_DIR)\" \
-DGBM_BACKEND_SEARCH_DIR=\"$(GBM_BACKEND_INSTALL_DIR)\" \
-DPIPE_PREFIX=\"$(PIPE_PREFIX)\" \
$(LIBUDEV_CFLAGS) \
$(LIBDRM_CFLAGS)


pipe_INCLUDES = \
-I$(TOP)/include \
-I$(TOP)/src/gallium/auxiliary \
-I$(TOP)/src/gallium/drivers \
-I$(TOP)/src/gallium/include \
-I$(TOP)/src/gallium/winsys

pipe_LIBS = $(LIBDRM_LIB) \
$(TOP)/src/gallium/drivers/identity/libidentity.a \
$(TOP)/src/gallium/drivers/trace/libtrace.a \
$(TOP)/src/gallium/drivers/rbug/librbug.a \
$(GALLIUM_AUXILIARIES)

pipe_CLFLAGS = $(LIBDRM_CFLAGS)

pipe_LDFLAGS = -Wl,--no-undefined

# i915 pipe driver
i915_LIBS = -ldrm_intel \
$(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \
$(TOP)/src/gallium/drivers/i915/libi915.a

# i965 pipe driver
i965_LIBS = -ldrm_intel \
$(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
$(TOP)/src/gallium/drivers/i965/libi965.a \
$(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a

# nouveau pipe driver
nouveau_LIBS = -ldrm_nouveau \
$(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \
$(TOP)/src/gallium/drivers/nvfx/libnvfx.a \
$(TOP)/src/gallium/drivers/nv50/libnv50.a \
$(TOP)/src/gallium/drivers/nvc0/libnvc0.a \
$(TOP)/src/gallium/drivers/nouveau/libnouveau.a

# r300 pipe driver
r300_LIBS = -ldrm \
$(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
$(TOP)/src/gallium/drivers/r300/libr300.a

# r600 pipe driver
r600_LIBS = -ldrm -ldrm_radeon \
$(TOP)/src/gallium/winsys/r600/drm/libr600winsys.a \
$(TOP)/src/gallium/drivers/r600/libr600.a

# vmwgfx pipe driver
vmwgfx_LIBS = \
$(TOP)/src/gallium/winsys/svga/drm/libsvgadrm.a \
$(TOP)/src/gallium/drivers/svga/libsvga.a

# LLVM
ifeq ($(MESA_LLVM),1)
pipe_LIBS += $(LLVM_LIBS)
pipe_LDFLAGS += $(LLVM_LDFLAGS)
endif

# determine the targets/sources
pipe_TARGETS =
pipe_SOURCES =

ifneq ($(findstring i915/drm,$(GALLIUM_WINSYS_DIRS)),)
pipe_TARGETS += $(PIPE_PREFIX)i915.so
pipe_SOURCES += pipe_i915.c
endif

ifneq ($(findstring i965/drm,$(GALLIUM_WINSYS_DIRS)),)
pipe_TARGETS += $(PIPE_PREFIX)i965.so
pipe_SOURCES += pipe_i965.c
endif

ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
pipe_TARGETS += $(PIPE_PREFIX)nouveau.so
pipe_SOURCES += pipe_nouveau.c
endif

ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)
pipe_TARGETS += $(PIPE_PREFIX)r300.so
pipe_SOURCES += pipe_r300.c
endif

ifneq ($(findstring r600/drm,$(GALLIUM_WINSYS_DIRS)),)
pipe_TARGETS += $(PIPE_PREFIX)r600.so
pipe_SOURCES += pipe_r600.c
endif

ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),)
pipe_TARGETS += $(PIPE_PREFIX)vmwgfx.so
pipe_SOURCES += pipe_vmwgfx.c
endif

pipe_OBJECTS = $(pipe_SOURCES:.c=.o)


GBM_EXTRA_TARGETS = $(addprefix $(TOP)/$(LIB_DIR)/gbm/, $(pipe_TARGETS))
GBM_EXTRA_INSTALL = install-pipes
GBM_EXTRA_CLEAN = clean-pipes
GBM_EXTRA_SOURCES = $(pipe_SOURCES)

include $(TOP)/src/gbm/backends/Makefile.template


$(GBM_EXTRA_TARGETS): $(TOP)/$(LIB_DIR)/gbm/%: %
@$(INSTALL) -d $(dir $@)
$(INSTALL) $< $(dir $@)

$(pipe_TARGETS): $(PIPE_PREFIX)%.so: pipe_%.o
$(MKLIB) -o $@ -noprefix -linker '$(CC)' \
-ldflags '-L$(TOP)/$(LIB_DIR) $(pipe_LDFLAGS) $(LDFLAGS)' \
$(MKLIB_OPTIONS) $< \
-Wl,--start-group $($*_LIBS) $(pipe_LIBS) -Wl,--end-group

$(pipe_OBJECTS): %.o: %.c
$(CC) -c -o $@ $< $(pipe_INCLUDES) $(pipe_CFLAGS) $(CFLAGS)

install-pipes: $(GBM_EXTRA_TARGETS)
$(INSTALL) -d $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR)
for tgt in $(GBM_EXTRA_TARGETS); do \
$(MINSTALL) "$$tgt" $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR); \
done

clean-pipes:
rm -f $(pipe_TARGETS)
rm -f $(pipe_OBJECTS)

+ 27
- 0
src/gallium/targets/gbm/pipe_i915.c View File

@@ -0,0 +1,27 @@

#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "i915/drm/i915_drm_public.h"
#include "i915/i915_public.h"

static struct pipe_screen *
create_screen(int fd)
{
struct i915_winsys *iws;
struct pipe_screen *screen;

iws = i915_drm_winsys_create(fd);
if (!iws)
return NULL;

screen = i915_screen_create(iws);
if (!screen)
return NULL;

screen = debug_screen_wrap(screen);

return screen;
}

PUBLIC
DRM_DRIVER_DESCRIPTOR("i915", "i915", create_screen)

+ 30
- 0
src/gallium/targets/gbm/pipe_i965.c View File

@@ -0,0 +1,30 @@

#include "target-helpers/inline_debug_helper.h"
#include "target-helpers/inline_wrapper_sw_helper.h"
#include "state_tracker/drm_driver.h"
#include "i965/drm/i965_drm_public.h"
#include "i965/brw_public.h"

static struct pipe_screen *
create_screen(int fd)
{
struct brw_winsys_screen *bws;
struct pipe_screen *screen;

bws = i965_drm_winsys_screen_create(fd);
if (!bws)
return NULL;

screen = brw_screen_create(bws);
if (!screen)
return NULL;

screen = sw_screen_wrap(screen);

screen = debug_screen_wrap(screen);

return screen;
}

PUBLIC
DRM_DRIVER_DESCRIPTOR("i965", "i965", create_screen)

+ 3
- 3
src/gallium/targets/gbm/pipe_loader.c View File

@@ -107,11 +107,11 @@ find_pipe_module(struct pipe_module *pmod, const char *name)
search_paths = NULL;
if (geteuid() == getuid()) {
/* don't allow setuid apps to use EGL_DRIVERS_PATH */
search_paths = getenv("EGL_DRIVERS_PATH");
/* don't allow setuid apps to use GBM_BACKENDS_PATH */
search_paths = getenv("GBM_BACKENDS_PATH");
}
if (search_paths == NULL)
search_paths = _EGL_GALLIUM_DRIVER_SEARCH_DIR;
search_paths = GBM_BACKEND_SEARCH_DIR;

end = search_paths + strlen(search_paths);
for (p = search_paths; p < end && pmod->lib == NULL; p = next + 1) {

+ 21
- 0
src/gallium/targets/gbm/pipe_nouveau.c View File

@@ -0,0 +1,21 @@

#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "nouveau/drm/nouveau_drm_public.h"

static struct pipe_screen *
create_screen(int fd)
{
struct pipe_screen *screen;

screen = nouveau_drm_screen_create(fd);
if (!screen)
return NULL;

screen = debug_screen_wrap(screen);

return screen;
}

PUBLIC
DRM_DRIVER_DESCRIPTOR("nouveau", "nouveau", create_screen)

+ 27
- 0
src/gallium/targets/gbm/pipe_r300.c View File

@@ -0,0 +1,27 @@

#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "radeon/drm/radeon_drm_public.h"
#include "r300/r300_public.h"

static struct pipe_screen *
create_screen(int fd)
{
struct radeon_winsys *sws;
struct pipe_screen *screen;

sws = radeon_drm_winsys_create(fd);
if (!sws)
return NULL;

screen = r300_screen_create(sws);
if (!screen)
return NULL;

screen = debug_screen_wrap(screen);

return screen;
}

PUBLIC
DRM_DRIVER_DESCRIPTOR("r300", "radeon", create_screen)

+ 27
- 0
src/gallium/targets/gbm/pipe_r600.c View File

@@ -0,0 +1,27 @@

#include "state_tracker/drm_driver.h"
#include "target-helpers/inline_debug_helper.h"
#include "r600/drm/r600_drm_public.h"
#include "r600/r600_public.h"

static struct pipe_screen *
create_screen(int fd)
{
struct radeon *rw;
struct pipe_screen *screen;

rw = r600_drm_winsys_create(fd);
if (!rw)
return NULL;

screen = r600_screen_create(rw);
if (!screen)
return NULL;

screen = debug_screen_wrap(screen);

return screen;
}

PUBLIC
DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen)

+ 22
- 0
src/gallium/targets/gbm/pipe_swrast.c View File

@@ -0,0 +1,22 @@

#include "target-helpers/inline_sw_helper.h"
#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"

PUBLIC struct pipe_screen *
swrast_create_screen(struct sw_winsys *ws);

PUBLIC
DRM_DRIVER_DESCRIPTOR("swrast", NULL, NULL)

struct pipe_screen *
swrast_create_screen(struct sw_winsys *ws)
{
struct pipe_screen *screen;

screen = sw_screen_create(ws);
if (screen)
screen = debug_screen_wrap(screen);

return screen;
}

+ 27
- 0
src/gallium/targets/gbm/pipe_vmwgfx.c View File

@@ -0,0 +1,27 @@

#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "svga/drm/svga_drm_public.h"
#include "svga/svga_public.h"

static struct pipe_screen *
create_screen(int fd)
{
struct svga_winsys_screen *sws;
struct pipe_screen *screen;

sws = svga_drm_winsys_screen_create(fd);
if (!sws)
return NULL;

screen = svga_screen_create(sws);
if (!screen)
return NULL;

screen = debug_screen_wrap(screen);

return screen;
}

PUBLIC
DRM_DRIVER_DESCRIPTOR("vmwgfx", "vmwgfx", create_screen)

+ 5
- 5
src/gbm/backends/Makefile.template View File

@@ -24,7 +24,7 @@ GBM_TARGET = $(GBM_BACKEND_PATH)
GBM_INSTALL = install-so
endif

default: depend $(GBM_TARGET)
default: depend $(GBM_TARGET) $(GBM_EXTRA_TARGETS)

$(GBM_BACKEND_PATH): $(GBM_BACKEND).so
@$(INSTALL) -d $(TOP)/$(LIB_DIR)/gbm
@@ -46,20 +46,20 @@ install-so: $(GBM_BACKEND_PATH)
$(INSTALL) -d $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR)
$(MINSTALL) $(GBM_BACKEND_PATH) $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR)

install: $(GBM_INSTALL)
install: $(GBM_INSTALL) $(GBM_EXTRA_INSTALL)

clean:
clean: $(GBM_EXTRA_CLEAN)
rm -f $(GBM_BACKEND).so
rm -f lib$(GBM_BACKEND).a
rm -f $(GBM_OBJECTS)
rm -f depend depend.bak

depend: $(GBM_SOURCES)
depend: $(GBM_SOURCES) $(GBM_EXTRA_SOURCES)
@ echo "running $(MKDEP)"
@ rm -f depend
@ touch depend
$(MKDEP) $(MKDEP_OPTIONS) $(GBM_INCLUDES) $(GBM_SOURCES) \
>/dev/null 2>/dev/null
$(GBM_EXTRA_SOURCES) >/dev/null 2>/dev/null

sinclude depend
# DO NOT DELETE

Loading…
Cancel
Save