mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 11:10:10 +01:00
swr: build driver proper separate from rasterizer
swr used to build and link the rasterizer to the driver, and to support multiple architectures we needed to have multiple versions of the driver/rasterizer combination, which needed to link in much of mesa. Changing to having one instance of the driver and just building architecture specific versions of the rasterizer gives a large reduction in disk space. libGL.so 6464 Kb -> 7000 Kb libswrAVX.so 10068 Kb -> 5432 Kb libswrAVX2.so 9828 Kb -> 5200 Kb Total 26360 Kb -> 17632 Kb Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
50cd222116
commit
f50aa21456
5 changed files with 36 additions and 39 deletions
|
|
@ -26,7 +26,14 @@ AM_CXXFLAGS = $(GALLIUM_DRIVER_CFLAGS) $(SWR_CXX11_CXXFLAGS)
|
|||
|
||||
noinst_LTLIBRARIES = libmesaswr.la
|
||||
|
||||
libmesaswr_la_SOURCES = $(LOADER_SOURCES)
|
||||
# gen_knobs.* included here to provide driver access to swr configuration
|
||||
libmesaswr_la_SOURCES = \
|
||||
$(CXX_SOURCES) \
|
||||
$(COMMON_CXX_SOURCES) \
|
||||
$(JITTER_CXX_SOURCES) \
|
||||
rasterizer/codegen/gen_knobs.cpp \
|
||||
rasterizer/codegen/gen_knobs.h \
|
||||
$(LOADER_SOURCES)
|
||||
|
||||
COMMON_CXXFLAGS = \
|
||||
-fno-strict-aliasing \
|
||||
|
|
@ -43,12 +50,15 @@ COMMON_CXXFLAGS = \
|
|||
-I$(srcdir)/rasterizer/jitter \
|
||||
-I$(srcdir)/rasterizer/archrast
|
||||
|
||||
# SWR_AVX_CXXFLAGS needed for intrinsic usage in swr api headers
|
||||
libmesaswr_la_CXXFLAGS = \
|
||||
$(SWR_AVX_CXXFLAGS) \
|
||||
$(COMMON_CXXFLAGS)
|
||||
|
||||
COMMON_SOURCES = \
|
||||
$(CXX_SOURCES) \
|
||||
$(ARCHRAST_CXX_SOURCES) \
|
||||
$(COMMON_CXX_SOURCES) \
|
||||
$(CORE_CXX_SOURCES) \
|
||||
$(JITTER_CXX_SOURCES) \
|
||||
$(MEMORY_CXX_SOURCES) \
|
||||
$(BUILT_SOURCES)
|
||||
|
||||
|
|
@ -207,19 +217,12 @@ rasterizer.intermediate: rasterizer/codegen/gen_backends.py rasterizer/codegen/t
|
|||
--cpp \
|
||||
--hpp
|
||||
|
||||
COMMON_LIBADD = \
|
||||
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
|
||||
$(top_builddir)/src/mesa/libmesagallium.la \
|
||||
$(LLVM_LIBS)
|
||||
|
||||
COMMON_LDFLAGS = \
|
||||
-shared \
|
||||
-module \
|
||||
-no-undefined \
|
||||
$(GC_SECTIONS) \
|
||||
$(NO_UNDEFINED) \
|
||||
$(LLVM_LDFLAGS)
|
||||
|
||||
$(NO_UNDEFINED)
|
||||
|
||||
lib_LTLIBRARIES = libswrAVX.la libswrAVX2.la
|
||||
|
||||
|
|
@ -231,9 +234,6 @@ libswrAVX_la_CXXFLAGS = \
|
|||
libswrAVX_la_SOURCES = \
|
||||
$(COMMON_SOURCES)
|
||||
|
||||
libswrAVX_la_LIBADD = \
|
||||
$(COMMON_LIBADD)
|
||||
|
||||
libswrAVX_la_LDFLAGS = \
|
||||
$(COMMON_LDFLAGS)
|
||||
|
||||
|
|
@ -245,9 +245,6 @@ libswrAVX2_la_CXXFLAGS = \
|
|||
libswrAVX2_la_SOURCES = \
|
||||
$(COMMON_SOURCES)
|
||||
|
||||
libswrAVX2_la_LIBADD = \
|
||||
$(COMMON_LIBADD)
|
||||
|
||||
libswrAVX2_la_LDFLAGS = \
|
||||
$(COMMON_LDFLAGS)
|
||||
|
||||
|
|
|
|||
|
|
@ -30,12 +30,6 @@ else:
|
|||
llvm_includedir = env.backtick('%s --includedir' % llvm_config).rstrip()
|
||||
print "llvm include dir %s" % llvm_includedir
|
||||
|
||||
# the loader is included in the mesa lib itself
|
||||
# All the remaining files are in loadable modules
|
||||
loadersource = env.ParseSourceList('Makefile.sources', [
|
||||
'LOADER_SOURCES'
|
||||
])
|
||||
|
||||
if not env['msvc'] :
|
||||
env.Append(CCFLAGS = [
|
||||
'-std=c++11',
|
||||
|
|
@ -191,16 +185,12 @@ built_sources += [backendPixelRateFiles, genRasterizerFiles]
|
|||
|
||||
source = built_sources
|
||||
source += env.ParseSourceList(swrroot + 'Makefile.sources', [
|
||||
'CXX_SOURCES',
|
||||
'ARCHRAST_CXX_SOURCES',
|
||||
'COMMON_CXX_SOURCES',
|
||||
'CORE_CXX_SOURCES',
|
||||
'JITTER_CXX_SOURCES',
|
||||
'MEMORY_CXX_SOURCES'
|
||||
])
|
||||
|
||||
env.Prepend(LIBS = [ mesautil, mesa, gallium ])
|
||||
|
||||
env.Prepend(CPPPATH = [
|
||||
'.',
|
||||
'rasterizer',
|
||||
|
|
@ -242,14 +232,24 @@ swrAVX2 = envavx2.SharedLibrary(
|
|||
)
|
||||
env.Alias('swrAVX2', swrAVX2)
|
||||
|
||||
source = env.ParseSourceList(swrroot + 'Makefile.sources', [
|
||||
'CXX_SOURCES',
|
||||
'COMMON_CXX_SOURCES',
|
||||
'JITTER_CXX_SOURCES',
|
||||
'LOADER_SOURCES'
|
||||
])
|
||||
source += [
|
||||
'rasterizer/codegen/gen_knobs.cpp',
|
||||
'rasterizer/archrast/gen_ar_event.cpp',
|
||||
]
|
||||
|
||||
# main SWR lib
|
||||
swr = env.ConvenienceLibrary(
|
||||
envSWR = envavx.Clone() # pick up the arch flag for intrinsic usage
|
||||
swr = envSWR.ConvenienceLibrary(
|
||||
target = 'swr',
|
||||
source = loadersource,
|
||||
source = source,
|
||||
)
|
||||
|
||||
|
||||
# treat arch libs as dependencies, even though they are not linked
|
||||
# into swr, so we don't have to build them separately
|
||||
Depends(swr, ['swrAVX', 'swrAVX2'])
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ swr_create_context(struct pipe_screen *p_screen, void *priv, unsigned flags)
|
|||
AlignedMalloc(sizeof(struct swr_context), KNOB_SIMD_BYTES);
|
||||
memset(ctx, 0, sizeof(struct swr_context));
|
||||
|
||||
SwrGetInterface(ctx->api);
|
||||
swr_screen(p_screen)->pfnSwrGetInterface(ctx->api);
|
||||
ctx->swrDC.pAPI = &ctx->api;
|
||||
|
||||
ctx->blendJIT =
|
||||
|
|
|
|||
|
|
@ -24,13 +24,10 @@
|
|||
#include "util/u_cpu_detect.h"
|
||||
#include "util/u_dl.h"
|
||||
#include "swr_public.h"
|
||||
|
||||
#include "pipe/p_screen.h"
|
||||
#include "swr_screen.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
typedef pipe_screen *(*screen_create_proc)(struct sw_winsys *winsys);
|
||||
|
||||
struct pipe_screen *
|
||||
swr_create_screen(struct sw_winsys *winsys)
|
||||
{
|
||||
|
|
@ -57,16 +54,17 @@ swr_create_screen(struct sw_winsys *winsys)
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
util_dl_proc pScreenProc = util_dl_get_proc_address(pLibrary, "swr_create_screen_internal");
|
||||
util_dl_proc pApiProc = util_dl_get_proc_address(pLibrary, "SwrGetInterface");
|
||||
|
||||
if (!pScreenProc) {
|
||||
if (!pApiProc) {
|
||||
fprintf(stderr, "SWR library search failure: %s\n", util_dl_error());
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
screen_create_proc pScreenCreate = (screen_create_proc)pScreenProc;
|
||||
struct pipe_screen *screen = swr_create_screen_internal(winsys);
|
||||
swr_screen(screen)->pfnSwrGetInterface = (PFNSwrGetInterface)pApiProc;
|
||||
|
||||
return pScreenCreate(winsys);
|
||||
return screen;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ struct swr_screen {
|
|||
uint8_t msaa_max_count;
|
||||
|
||||
HANDLE hJitMgr;
|
||||
|
||||
PFNSwrGetInterface pfnSwrGetInterface;
|
||||
};
|
||||
|
||||
static INLINE struct swr_screen *
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue