Am 08.09.2016 um 22:30 schrieb Rob Clark: > Support multi-planar YUV for external EGLImage's (currently just in the > dma-buf import path) by lowering to multiple texture fetch's for each > plane and CSC in shader. > > Signed-off-by: Rob Clark <robdcl...@gmail.com> > --- > src/gallium/auxiliary/util/u_inlines.h | 4 +- > src/gallium/include/pipe/p_state.h | 9 +++ > src/gallium/include/state_tracker/st_api.h | 3 + > src/gallium/state_trackers/dri/dri2.c | 119 > +++++++++++++++++++++++----- > src/gallium/state_trackers/dri/dri_screen.c | 11 +++ > src/mesa/main/mtypes.h | 16 ++++ > src/mesa/program/ir_to_mesa.cpp | 1 + > src/mesa/state_tracker/st_atom_sampler.c | 41 +++++++++- > src/mesa/state_tracker/st_atom_shader.c | 3 + > src/mesa/state_tracker/st_atom_texture.c | 58 ++++++++++++++ > src/mesa/state_tracker/st_cb_eglimage.c | 18 +++++ > src/mesa/state_tracker/st_context.c | 7 +- > src/mesa/state_tracker/st_glsl_to_nir.cpp | 1 + > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 4 + > src/mesa/state_tracker/st_manager.c | 1 + > src/mesa/state_tracker/st_program.c | 35 ++++++++ > src/mesa/state_tracker/st_program.h | 37 +++++++++ > src/mesa/state_tracker/st_texture.h | 21 +++++ > 18 files changed, 362 insertions(+), 27 deletions(-) > > diff --git a/src/gallium/auxiliary/util/u_inlines.h > b/src/gallium/auxiliary/util/u_inlines.h > index c2a0b08..b7b8313 100644 > --- a/src/gallium/auxiliary/util/u_inlines.h > +++ b/src/gallium/auxiliary/util/u_inlines.h > @@ -136,8 +136,10 @@ pipe_resource_reference(struct pipe_resource **ptr, > struct pipe_resource *tex) > struct pipe_resource *old_tex = *ptr; > > if (pipe_reference_described(&(*ptr)->reference, &tex->reference, > - > (debug_reference_descriptor)debug_describe_resource)) > + > (debug_reference_descriptor)debug_describe_resource)) { > + pipe_resource_reference(&old_tex->next, NULL); > old_tex->screen->resource_destroy(old_tex->screen, old_tex); > + } > *ptr = tex; > } > > diff --git a/src/gallium/include/pipe/p_state.h > b/src/gallium/include/pipe/p_state.h > index ebd0337..4a88da6 100644 > --- a/src/gallium/include/pipe/p_state.h > +++ b/src/gallium/include/pipe/p_state.h > @@ -498,6 +498,15 @@ struct pipe_resource > > unsigned bind; /**< bitmask of PIPE_BIND_x */ > unsigned flags; /**< bitmask of PIPE_RESOURCE_FLAG_x */ > + > + /** > + * For planar images, ie. YUV EGLImage external, etc, pointer to the > + * next plane. > + * > + * TODO might be useful for dealing w/ z32s8 too, since at least a > + * couple drivers split these out into separate buffers internally. > + */ > + struct pipe_resource *next; Would it be possible to stuff the multiple resources somewhere else (__DRIImage ?)? Seems a bit of a hack to have resources referencing other resources that way. (Also, it's odd since things are mostly lowered really outside of gallium so it's odd that some of the yuv state still sneaks in there.)
Roland _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev