<div dir="ltr">On Thu, Mar 30, 2017 at 5:37 AM, Samuel Pitoiset <span dir="ltr"><<a href="mailto:samuel.pitoiset@gmail.com" target="_blank">samuel.pitoiset@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Should be used by the state tracker when glGetImageHandleARB()<br>
is called in order to create a pipe_image_view template.<br>
<br>
Signed-off-by: Samuel Pitoiset <<a href="mailto:samuel.pitoiset@gmail.com">samuel.pitoiset@gmail.com</a>><br>
---<br>
 src/mesa/state_tracker/st_<wbr>atom_image.c | 103 ++++++++++++++++++------------<wbr>---<br>
 src/mesa/state_tracker/st_<wbr>texture.h    |   4 ++<br>
 2 files changed, 60 insertions(+), 47 deletions(-)<br>
<br>
diff --git a/src/mesa/state_tracker/st_<wbr>atom_image.c b/src/mesa/state_tracker/st_<wbr>atom_image.c<br>
index 5dd2cd64f9..10e1adf412 100644<br>
--- a/src/mesa/state_tracker/st_<wbr>atom_image.c<br>
+++ b/src/mesa/state_tracker/st_<wbr>atom_image.c<br>
@@ -44,6 +44,61 @@<br>
 #include "st_program.h"<br>
 #include "st_format.h"<br>
<br>
+void<br>
+st_convert_image(struct st_context *st, const struct gl_image_unit *u,<br>
+                 struct pipe_image_view *img)<br></blockquote><div><br></div><div>I'd like to see a comment on this function to explain what it does.  I think that's especially important for function with a generic name like "convert image".<br><br></div><div>Also, can 'st' be const qualified here?<br><br></div><div>-Brian<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+{<br>
+   struct st_texture_object *stObj = st_texture_object(u->TexObj);<br>
+<br>
+   img->resource = stObj->pt;<br>
+   img->format = st_mesa_format_to_pipe_format(<wbr>st, u->_ActualFormat);<br>
+<br>
+   switch (u->Access) {<br>
+   case GL_READ_ONLY:<br>
+      img->access = PIPE_IMAGE_ACCESS_READ;<br>
+      break;<br>
+   case GL_WRITE_ONLY:<br>
+      img->access = PIPE_IMAGE_ACCESS_WRITE;<br>
+      break;<br>
+   case GL_READ_WRITE:<br>
+      img->access = PIPE_IMAGE_ACCESS_READ_WRITE;<br>
+      break;<br>
+   default:<br>
+      unreachable("bad gl_image_unit::Access");<br>
+   }<br>
+<br>
+   if (stObj->pt->target == PIPE_BUFFER) {<br>
+      unsigned base, size;<br>
+<br>
+      base = stObj->base.BufferOffset;<br>
+      assert(base < stObj->pt->width0);<br>
+      size = MIN2(stObj->pt->width0 - base, (unsigned)stObj->base.<wbr>BufferSize);<br>
+<br>
+      img->u.buf.offset = base;<br>
+      img->u.buf.size = size;<br>
+   } else {<br>
+      img->u.tex.level = u->Level + stObj->base.MinLevel;<br>
+      if (stObj->pt->target == PIPE_TEXTURE_3D) {<br>
+         if (u->Layered) {<br>
+            img->u.tex.first_layer = 0;<br>
+            img->u.tex.last_layer = u_minify(stObj->pt->depth0, img->u.tex.level) - 1;<br>
+         } else {<br>
+            img->u.tex.first_layer = u->_Layer;<br>
+            img->u.tex.last_layer = u->_Layer;<br>
+         }<br>
+      } else {<br>
+         img->u.tex.first_layer = u->_Layer + stObj->base.MinLayer;<br>
+         img->u.tex.last_layer = u->_Layer + stObj->base.MinLayer;<br>
+         if (u->Layered && img->resource->array_size > 1) {<br>
+            if (stObj->base.Immutable)<br>
+               img->u.tex.last_layer += stObj->base.NumLayers - 1;<br>
+            else<br>
+               img->u.tex.last_layer += img->resource->array_size - 1;<br>
+         }<br>
+      }<br>
+   }<br>
+}<br>
+<br>
 static void<br>
 st_bind_images(struct st_context *st, struct gl_program *prog,<br>
                enum pipe_shader_type shader_type)<br>
@@ -70,53 +125,7 @@ st_bind_images(struct st_context *st, struct gl_program *prog,<br>
          continue;<br>
       }<br>
<br>
-      img->resource = stObj->pt;<br>
-      img->format = st_mesa_format_to_pipe_format(<wbr>st, u->_ActualFormat);<br>
-<br>
-      switch (u->Access) {<br>
-      case GL_READ_ONLY:<br>
-         img->access = PIPE_IMAGE_ACCESS_READ;<br>
-         break;<br>
-      case GL_WRITE_ONLY:<br>
-         img->access = PIPE_IMAGE_ACCESS_WRITE;<br>
-         break;<br>
-      case GL_READ_WRITE:<br>
-         img->access = PIPE_IMAGE_ACCESS_READ_WRITE;<br>
-         break;<br>
-      default:<br>
-         unreachable("bad gl_image_unit::Access");<br>
-      }<br>
-<br>
-      if (stObj->pt->target == PIPE_BUFFER) {<br>
-         unsigned base, size;<br>
-<br>
-         base = stObj->base.BufferOffset;<br>
-         assert(base < stObj->pt->width0);<br>
-         size = MIN2(stObj->pt->width0 - base, (unsigned)stObj->base.<wbr>BufferSize);<br>
-<br>
-         img->u.buf.offset = base;<br>
-         img->u.buf.size = size;<br>
-      } else {<br>
-         img->u.tex.level = u->Level + stObj->base.MinLevel;<br>
-         if (stObj->pt->target == PIPE_TEXTURE_3D) {<br>
-            if (u->Layered) {<br>
-               img->u.tex.first_layer = 0;<br>
-               img->u.tex.last_layer = u_minify(stObj->pt->depth0, img->u.tex.level) - 1;<br>
-            } else {<br>
-               img->u.tex.first_layer = u->_Layer;<br>
-               img->u.tex.last_layer = u->_Layer;<br>
-            }<br>
-         } else {<br>
-            img->u.tex.first_layer = u->_Layer + stObj->base.MinLayer;<br>
-            img->u.tex.last_layer = u->_Layer + stObj->base.MinLayer;<br>
-            if (u->Layered && img->resource->array_size > 1) {<br>
-               if (stObj->base.Immutable)<br>
-                  img->u.tex.last_layer += stObj->base.NumLayers - 1;<br>
-               else<br>
-                  img->u.tex.last_layer += img->resource->array_size - 1;<br>
-            }<br>
-         }<br>
-      }<br>
+      st_convert_image(st, u, img);<br>
    }<br>
    cso_set_shader_images(st->cso_<wbr>context, shader_type, 0,<br>
                          prog->info.num_images, images);<br>
diff --git a/src/mesa/state_tracker/st_<wbr>texture.h b/src/mesa/state_tracker/st_<wbr>texture.h<br>
index 0ce7989562..1a07833118 100644<br>
--- a/src/mesa/state_tracker/st_<wbr>texture.h<br>
+++ b/src/mesa/state_tracker/st_<wbr>texture.h<br>
@@ -254,4 +254,8 @@ st_create_color_map_texture(<wbr>struct gl_context *ctx);<br>
 bool<br>
 st_etc_fallback(struct st_context *st, struct gl_texture_image *texImage);<br>
<br>
+void<br>
+st_convert_image(struct st_context *st, const struct gl_image_unit *u,<br>
+                 struct pipe_image_view *img);<br>
+<br>
 #endif<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.12.1<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>