st/mesa: add st_convert_image_from_unit() helper
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 12 May 2017 09:53:51 +0000 (11:53 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 14 Jun 2017 08:04:36 +0000 (10:04 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom_image.c
src/mesa/state_tracker/st_texture.h

index 381eca191acd2c709de41419f0785e02be022eb8..5b914637a2aa220915bec15046585db9890a9a0f 100644 (file)
@@ -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);
index cd6a73c7703941e7acd96e777b285fb35db46bf3..4bfec0bed275223a6d637cdc5a2f007aa064c02e 100644 (file)
@@ -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,