From 6f96bd731819c77d4e899adfc2321eeaace80384 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 12 May 2017 11:53:51 +0200 Subject: st/mesa: add st_convert_image_from_unit() helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Samuel Pitoiset Reviewed-by: Nicolai Hähnle Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_atom_image.c | 33 ++++++++++++++++++++++----------- src/mesa/state_tracker/st_texture.h | 5 +++++ 2 files changed, 27 insertions(+), 11 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/state_tracker/st_atom_image.c b/src/mesa/state_tracker/st_atom_image.c index 381eca191ac..5b914637a2a 100644 --- a/src/mesa/state_tracker/st_atom_image.c +++ b/src/mesa/state_tracker/st_atom_image.c @@ -102,6 +102,27 @@ st_convert_image(const struct st_context *st, const struct gl_image_unit *u, } } +/** + * Get a pipe_image_view object from an image unit. + */ +void +st_convert_image_from_unit(const struct st_context *st, + struct pipe_image_view *img, + GLuint imgUnit) +{ + struct gl_image_unit *u = &st->ctx->ImageUnits[imgUnit]; + struct st_texture_object *stObj = st_texture_object(u->TexObj); + + if (!_mesa_is_image_unit_valid(st->ctx, u) || + !st_finalize_texture(st->ctx, st->pipe, u->TexObj, 0) || + !stObj->pt) { + memset(img, 0, sizeof(*img)); + return; + } + + st_convert_image(st, u, img); +} + static void st_bind_images(struct st_context *st, struct gl_program *prog, enum pipe_shader_type shader_type) @@ -116,19 +137,9 @@ st_bind_images(struct st_context *st, struct gl_program *prog, c = &st->ctx->Const.Program[prog->info.stage]; for (i = 0; i < prog->info.num_images; i++) { - struct gl_image_unit *u = - &st->ctx->ImageUnits[prog->sh.ImageUnits[i]]; - struct st_texture_object *stObj = st_texture_object(u->TexObj); struct pipe_image_view *img = &images[i]; - if (!_mesa_is_image_unit_valid(st->ctx, u) || - !st_finalize_texture(st->ctx, st->pipe, u->TexObj, 0) || - !stObj->pt) { - memset(img, 0, sizeof(*img)); - continue; - } - - st_convert_image(st, u, img); + st_convert_image_from_unit(st, img, prog->sh.ImageUnits[i]); } cso_set_shader_images(st->cso_context, shader_type, 0, prog->info.num_images, images); diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h index cd6a73c7703..4bfec0bed27 100644 --- a/src/mesa/state_tracker/st_texture.h +++ b/src/mesa/state_tracker/st_texture.h @@ -267,6 +267,11 @@ void st_convert_image(const struct st_context *st, const struct gl_image_unit *u, struct pipe_image_view *img); +void +st_convert_image_from_unit(const struct st_context *st, + struct pipe_image_view *img, + GLuint imgUnit); + void st_convert_sampler(const struct st_context *st, const struct gl_texture_object *texobj, -- cgit v1.2.3