On Fri, Apr 12, 2019 at 1:33 PM Lucas Stach <l.st...@pengutronix.de> wrote:
> If the driver provides native support for YUV textures we can skip > adding additional samplers and re-writing the shaders. > > Signed-off-by: Lucas Stach <l.st...@pengutronix.de> > --- > src/mesa/state_tracker/st_atom_sampler.c | 6 ++++++ > src/mesa/state_tracker/st_atom_texture.c | 6 ++++++ > src/mesa/state_tracker/st_program.h | 6 ++++++ > src/mesa/state_tracker/st_sampler_view.c | 21 +++++++++++++-------- > 4 files changed, 31 insertions(+), 8 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom_sampler.c > b/src/mesa/state_tracker/st_atom_sampler.c > index 27e4da315817..9def70c9432a 100644 > --- a/src/mesa/state_tracker/st_atom_sampler.c > +++ b/src/mesa/state_tracker/st_atom_sampler.c > @@ -303,10 +303,16 @@ update_shader_samplers(struct st_context *st, > struct st_texture_object *stObj = > st_get_texture_object(st->ctx, prog, unit); > struct pipe_sampler_state *sampler = samplers + unit; > + struct pipe_screen *pscreen = st->pipe->screen; > > if (!stObj) > continue; > > + if (pscreen->is_format_supported(pscreen, st_get_view_format(stObj), > + PIPE_TEXTURE_2D, 0, 0, > + PIPE_BIND_SAMPLER_VIEW)) > + continue; > Can you call is_format_supported at texture initialization? is_format_supported can be expensive. > + > switch (st_get_view_format(stObj)) { > case PIPE_FORMAT_NV12: > /* we need one additional sampler: */ > diff --git a/src/mesa/state_tracker/st_atom_texture.c > b/src/mesa/state_tracker/st_atom_texture.c > index ce7755f0c588..df84a472e722 100644 > --- a/src/mesa/state_tracker/st_atom_texture.c > +++ b/src/mesa/state_tracker/st_atom_texture.c > @@ -174,11 +174,17 @@ update_textures(struct st_context *st, > GLuint extra = 0; > struct st_texture_object *stObj = > st_get_texture_object(st->ctx, prog, unit); > + struct pipe_screen *pscreen = st->pipe->screen; > struct pipe_sampler_view tmpl; > > if (!stObj) > continue; > > + if (pscreen->is_format_supported(pscreen, st_get_view_format(stObj), > + sampler_views[unit]->target, 0, 0, > + PIPE_BIND_SAMPLER_VIEW)) > Same here. + continue; > + > /* use original view as template: */ > tmpl = *sampler_views[unit]; > > diff --git a/src/mesa/state_tracker/st_program.h > b/src/mesa/state_tracker/st_program.h > index f67ea5eb2087..bc5f3e3d9642 100644 > --- a/src/mesa/state_tracker/st_program.h > +++ b/src/mesa/state_tracker/st_program.h > @@ -67,6 +67,12 @@ st_get_external_sampler_key(struct st_context *st, > struct gl_program *prog) > unsigned unit = u_bit_scan(&mask); > struct st_texture_object *stObj = > st_get_texture_object(st->ctx, prog, unit); > + struct pipe_screen *pscreen = st->pipe->screen; > + > + if (pscreen->is_format_supported(pscreen, st_get_view_format(stObj), > + PIPE_TEXTURE_2D, 0, 0, > + PIPE_BIND_SAMPLER_VIEW)) > Same here. + continue; > > switch (st_get_view_format(stObj)) { > case PIPE_FORMAT_NV12: > diff --git a/src/mesa/state_tracker/st_sampler_view.c > b/src/mesa/state_tracker/st_sampler_view.c > index eb97f2bb6b7d..30dfa20af6b5 100644 > --- a/src/mesa/state_tracker/st_sampler_view.c > +++ b/src/mesa/state_tracker/st_sampler_view.c > @@ -471,6 +471,7 @@ get_sampler_view_format(struct st_context *st, > const struct st_texture_object *stObj, > bool srgb_skip_decode) > { > + struct pipe_screen *pscreen = st->pipe->screen; > enum pipe_format format; > > GLenum baseFormat = _mesa_base_tex_image(&stObj->base)->_BaseFormat; > @@ -489,15 +490,19 @@ get_sampler_view_format(struct st_context *st, > if (srgb_skip_decode) > format = util_format_linear(format); > > - /* Use R8_UNORM for video formats */ > - switch (format) { > - case PIPE_FORMAT_NV12: > - case PIPE_FORMAT_IYUV: > - format = PIPE_FORMAT_R8_UNORM; > - break; > - default: > - break; > + if (!pscreen->is_format_supported(pscreen, format, PIPE_TEXTURE_2D, 0, > 0, > + PIPE_BIND_SAMPLER_VIEW)) { > Same here. Marek + /* Use R8_UNORM for video formats */ > + switch (format) { > + case PIPE_FORMAT_NV12: > + case PIPE_FORMAT_IYUV: > + format = PIPE_FORMAT_R8_UNORM; > + break; > + default: > + break; > + } > } > + > return format; > } > > -- > 2.20.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev