On Tue, Mar 19, 2013 at 5:40 AM, Dave Airlie <airl...@gmail.com> wrote: > From: Dave Airlie <airl...@redhat.com> > > We have cases on virtual GPU hw that renders using a wrapped llvmpipe, > that we can't produce the normal DRI2 semantics having the kernel/hw > enforce synchronisation semantics. It is also suboptimal to flush > all surfaces on the server side in the block handler. So there is > already a dri/st hook to update the texture, so create a screen interface > and call into it for the texture resource. The sw driver can then > call into the displaytarget wrapper which will call into the outer > wrapper driver to actually cause the flush to happen. > > This contains the llvmpipe and wrapper sw changes. > > Signed-off-by: Dave Airlie <airl...@redhat.com>
Errr, what about using flush_frontbuffer, it seems todo the exact same thing. Cheers, Jakob. > --- > src/gallium/drivers/llvmpipe/lp_texture.c | 13 +++++++++++++ > src/gallium/drivers/softpipe/sp_texture.h | 2 +- > src/gallium/include/pipe/p_screen.h | 3 +++ > src/gallium/include/state_tracker/sw_winsys.h | 6 ++++++ > src/gallium/state_trackers/dri/drm/dri2.c | 5 ++++- > src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c | 11 +++++++++++ > 6 files changed, 38 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c > b/src/gallium/drivers/llvmpipe/lp_texture.c > index f923292..48242d5 100644 > --- a/src/gallium/drivers/llvmpipe/lp_texture.c > +++ b/src/gallium/drivers/llvmpipe/lp_texture.c > @@ -1375,6 +1375,18 @@ llvmpipe_print_resources(void) > } > #endif > > +static void > +llvmpipe_texture_update(struct pipe_screen *pscreen, > + struct pipe_resource *pt) > +{ > + struct llvmpipe_screen *screen = llvmpipe_screen(pscreen); > + struct llvmpipe_resource *lpr = llvmpipe_resource(pt); > + struct sw_winsys *winsys = screen->winsys; > + if (!lpr->dt) > + return; > + > + winsys->displaytarget_update(winsys, lpr->dt); > +} > > void > llvmpipe_init_screen_resource_funcs(struct pipe_screen *screen) > @@ -1396,6 +1408,7 @@ llvmpipe_init_screen_resource_funcs(struct pipe_screen > *screen) > screen->resource_from_handle = llvmpipe_resource_from_handle; > screen->resource_get_handle = llvmpipe_resource_get_handle; > screen->can_create_resource = llvmpipe_can_create_resource; > + screen->texture_update = llvmpipe_texture_update; > } > > > diff --git a/src/gallium/drivers/softpipe/sp_texture.h > b/src/gallium/drivers/softpipe/sp_texture.h > index 533d625..04c6eaf 100644 > --- a/src/gallium/drivers/softpipe/sp_texture.h > +++ b/src/gallium/drivers/softpipe/sp_texture.h > @@ -46,7 +46,7 @@ struct softpipe_resource > struct pipe_resource base; > > unsigned long level_offset[SP_MAX_TEXTURE_2D_LEVELS]; > - unsigned stride[SP_MAX_TEXTURE_2D_LEVELS]; > + int stride[SP_MAX_TEXTURE_2D_LEVELS]; Unrelated change... Cheers, Jakob. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev