[Mesa-dev] [PATCH 2/3] st/xa: use pipe-loader to get screen
Rob Clark
robdclark at gmail.com
Mon Feb 10 05:14:13 PST 2014
On Mon, Feb 10, 2014 at 7:37 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> Hi Rob
>
> On 08/02/14 22:41, Rob Clark wrote:
>> From: Rob Clark <robclark at freedesktop.org>
>>
>> This lets multiple gallium drivers use XA.
>>
>> Signed-off-by: Rob Clark <robclark at freedesktop.org>
>> ---
>> configure.ac | 8 ++--
>> src/gallium/state_trackers/xa/Makefile.am | 11 ++++-
>> src/gallium/state_trackers/xa/xa_priv.h | 1 +
>> src/gallium/state_trackers/xa/xa_tracker.c | 6 ++-
>> src/gallium/state_trackers/xa/xatracker.pc.in | 9 ++++
>> src/gallium/targets/Makefile.am | 4 --
>> src/gallium/targets/xa-vmwgfx/Makefile.am | 61 ---------------------------
>> src/gallium/targets/xa-vmwgfx/vmw_target.c | 26 ------------
>> src/gallium/targets/xa-vmwgfx/xatracker.pc.in | 9 ----
>> 9 files changed, 29 insertions(+), 106 deletions(-)
>> create mode 100644 src/gallium/state_trackers/xa/xatracker.pc.in
>> delete mode 100644 src/gallium/targets/xa-vmwgfx/Makefile.am
>> delete mode 100644 src/gallium/targets/xa-vmwgfx/vmw_target.c
>> delete mode 100644 src/gallium/targets/xa-vmwgfx/xatracker.pc.in
>>
>> diff --git a/configure.ac b/configure.ac
>> index 2424dde..6f490fc 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -1270,6 +1270,7 @@ dnl XA configuration
>> dnl
>> if test "x$enable_xa" = xyes; then
>> GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
>> + enable_gallium_loader=yes
>> fi
>> AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
>>
>> @@ -1743,7 +1744,7 @@ if test "x$with_gallium_drivers" != x; then
>> xsvga)
>> HAVE_GALLIUM_SVGA=yes
>> GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
>> - gallium_check_st "svga/drm" "dri-vmwgfx" "xa-vmwgfx"
>> + gallium_check_st "svga/drm" "dri-vmwgfx" ""
>> ;;
>> xi915)
>> HAVE_GALLIUM_I915=yes
>> @@ -1959,7 +1960,7 @@ AC_SUBST([XVMC_MAJOR], 1)
>> AC_SUBST([XVMC_MINOR], 0)
>>
>> AC_SUBST([XA_MAJOR], 2)
>> -AC_SUBST([XA_MINOR], 1)
>> +AC_SUBST([XA_MINOR], 2)
>> AC_SUBST([XA_TINY], 0)
>> AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
>>
>> @@ -2021,6 +2022,7 @@ AC_CONFIG_FILES([Makefile
>> src/gallium/state_trackers/vdpau/Makefile
>> src/gallium/state_trackers/vega/Makefile
>> src/gallium/state_trackers/xa/Makefile
>> + src/gallium/state_trackers/xa/xatracker.pc
>> src/gallium/state_trackers/xvmc/Makefile
>> src/gallium/targets/Makefile
>> src/gallium/targets/dri-freedreno/Makefile
>> @@ -2043,8 +2045,6 @@ AC_CONFIG_FILES([Makefile
>> src/gallium/targets/r600/xvmc/Makefile
>> src/gallium/targets/libgl-xlib/Makefile
>> src/gallium/targets/vdpau-nouveau/Makefile
>> - src/gallium/targets/xa-vmwgfx/Makefile
>> - src/gallium/targets/xa-vmwgfx/xatracker.pc
>> src/gallium/targets/xvmc-nouveau/Makefile
>> src/gallium/tests/trivial/Makefile
>> src/gallium/tests/unit/Makefile
>> diff --git a/src/gallium/state_trackers/xa/Makefile.am b/src/gallium/state_trackers/xa/Makefile.am
>> index 7d0b366..37ec0c4 100644
>> --- a/src/gallium/state_trackers/xa/Makefile.am
>> +++ b/src/gallium/state_trackers/xa/Makefile.am
>> @@ -25,6 +25,8 @@ include $(top_srcdir)/src/gallium/Automake.inc
>>
>> AM_CFLAGS = \
>> -Wall -pedantic \
>> + $(GALLIUM_PIPE_LOADER_DEFINES) \
>> + -DPIPE_SEARCH_DIR=\"$(libdir)/gallium-pipe\" \
>> $(GALLIUM_CFLAGS) \
>> $(VISIBILITY_CFLAGS)
>>
>> @@ -33,12 +35,19 @@ AM_CPPFLAGS = \
>> -I$(top_srcdir)/src/gallium/winsys \
>> -I$(top_srcdir)/src/gallium/drivers
>>
>> +pkgconfigdir = $(libdir)/pkgconfig
>> +pkgconfig_DATA = xatracker.pc
>> +
>> xa_includedir = $(includedir)
>> xa_include_HEADERS = \
>> xa_composite.h \
>> xa_context.h \
>> xa_tracker.h
>>
>> -noinst_LTLIBRARIES = libxatracker.la
>> +lib_LTLIBRARIES = libxatracker.la
>>
>> libxatracker_la_SOURCES = $(C_SOURCES)
>> +libxatracker_la_LIBADD = \
>> + $(GALLIUM_PIPE_LOADER_LIBS) \
>> + $(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader.la \
>> + $(top_builddir)/src/gallium/auxiliary/libgallium.la
> Can you please keep this as is, and add a xatracker target in the
> targets folder. Similar to the way opencl and gbm are handled.
I confess to not completely understanding the separation between
target vs state tracker.. I guess I'll have a closer look at gbm and
opencl.
>> diff --git a/src/gallium/state_trackers/xa/xa_priv.h b/src/gallium/state_trackers/xa/xa_priv.h
>> index ee182e7..b99c214 100644
>> --- a/src/gallium/state_trackers/xa/xa_priv.h
>> +++ b/src/gallium/state_trackers/xa/xa_priv.h
>> @@ -74,6 +74,7 @@ struct xa_tracker {
>> unsigned int format_map[XA_LAST_SURFACE_TYPE][2];
>> int d_depth_bits_last;
>> int ds_depth_bits_last;
>> + struct pipe_loader_device *dev;
>> struct pipe_screen *screen;
>> struct xa_context *default_ctx;
>> };
>> diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
>> index cda6501..840c361 100644
>> --- a/src/gallium/state_trackers/xa/xa_tracker.c
>> +++ b/src/gallium/state_trackers/xa/xa_tracker.c
>> @@ -30,6 +30,7 @@
>> #include "xa_priv.h"
>> #include "pipe/p_state.h"
>> #include "pipe/p_format.h"
>> +#include "pipe-loader/pipe_loader.h"
>> #include "state_tracker/drm_driver.h"
>> #include "util/u_inlines.h"
>>
>> @@ -143,7 +144,8 @@ xa_tracker_create(int drm_fd)
>> if (!xa)
>> return NULL;
>>
>> - xa->screen = driver_descriptor.create_screen(drm_fd);
>> + if (pipe_loader_drm_probe_fd(&xa->dev, drm_fd))
>> + xa->screen = pipe_loader_create_screen(xa->dev, PIPE_SEARCH_DIR);
>> if (!xa->screen)
>> goto out_no_screen;
>>
> Missing pipe_loader_release() in the error path, after
> xa->screen->destroy(xa->screen);
oh, right, I'll fix that
>> @@ -200,6 +202,7 @@ xa_tracker_destroy(struct xa_tracker *xa)
>> free(xa->supported_formats);
>> xa_context_destroy(xa->default_ctx);
>> xa->screen->destroy(xa->screen);
>> + pipe_loader_release(&xa->dev, 1);
>> free(xa);
>> }
>>
>> @@ -363,6 +366,7 @@ xa_surface_from_handle(struct xa_tracker *xa,
>> {
>> struct winsys_handle whandle;
>> memset(&whandle, 0, sizeof(whandle));
>> + whandle.type = DRM_API_HANDLE_TYPE_SHARED;
> Nice find. Worth separating from the rest and CC stable ?
oh, I suppose that should have been a separate patch. But
DRM_API_HANDLE_TYPE_SHARED is zero, so it is more of a
stylistic/preventative fix than an actual functional change. So not
sure how important it is for stable.
BR,
-R
> Many thanks for tackling this.
>
> -Emil
More information about the mesa-dev
mailing list