<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, May 8, 2017 at 3:26 AM, Nicolai Hähnle <span dir="ltr"><<a href="mailto:nhaehnle@gmail.com" target="_blank">nhaehnle@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 08.05.2017 12:11, Nicolai Hähnle wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 06.05.2017 20:09, Jason Ekstrand wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On May 6, 2017 7:56:02 AM Samuel Pitoiset <<a href="mailto:samuel.pitoiset@gmail.com" target="_blank">samuel.pitoiset@gmail.com</a>><br>
wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ARB_bindless_texture allows to declare image types inside<br>
structures,<br>
</blockquote>
<br>
Of course it does... It's not like having samplers and uniforms in<br>
structures is a massive source of pain or anything like that...<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
which means we need to keep track of the format.<br>
</blockquote>
<br>
Right.  Does it make more sense to put this on the structure element or<br>
on the image type itself?  SPIR-V makes the format part of the image<br>
type.  Doing so would also let us potentially get rid of the field in<br>
[n]ir_variable.<br>
</blockquote>
<br>
>From a type-theory point of view, I'd say yes.<br>
<br>
On the other hand, this leads to a massive explosion in the number of<br>
types, which doesn't play well with how GLSL overloads work. I really<br>
don't think we should pre-generate all the possible type combinations<br>
(probably > 1000 types for every texture target) *and* have duplicate<br>
intrinsic signatures for all of them.<br></blockquote></span></blockquote><div><br></div><div>Yes, intrinsic signatures would be a pain.  I think I'm won over by that argument.  We could do some sort of "interface type" thing where we have one type that's used for actually decoding the image and another type that's used for function signature matching.  However, that seems a bit insane. <br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Long-term, moving to having the format (and other qualifiers!) part of<br>
the type is a good idea. But before doing that, we'd have to seriously<br>
restructure how GLSL overloads work.<br>
</blockquote>
<br></span>
Another "on the other hand" is that it's a good idea for the compiler to mirror the spec, and the spec doesn't think of memory and format qualifiers as part of the type. E.g. you can say<br></blockquote><div><br></div><div>Which spec? :-)  The GLSL types system is shared by two different front-ends and SPIR-V definitely makes format part of the type.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  foo = texture(sampler2D(handle), ...);<br>
<br>
but there isn't even grammar to say something like<br>
<br>
  foo = imageLoad(layout(format=r32f) image2D(handle), ...);<br>
<br>
so a round-trip via variables is necessary.<br></blockquote><div><br></div><div>Yeah, that's ugly...<br><br></div><div>As I said above, I think I agree that this is the best we can do for now.  Hopefully, we'll have the opportunity to refactor some things and fix that in the future.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This is arguably a corner where the spec is just horrible, but it is what it is.<br>
<br>
Cheers,<br>
Nicolai<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
In the meantime, these two patches look reasonable to me:<br>
<br>
Reviewed-by: Nicolai Hähnle <<a href="mailto:nicolai.haehnle@amd.com" target="_blank">nicolai.haehnle@amd.com</a>><br>
<br>
Cheers,<br>
Nicolai<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Signed-off-by: Samuel Pitoiset <<a href="mailto:samuel.pitoiset@gmail.com" target="_blank">samuel.pitoiset@gmail.com</a>><br>
---<br>
 src/compiler/glsl/builtin_var<wbr>iables.cpp | 1 +<br>
 src/compiler/glsl_types.cpp             | 3 +++<br>
 src/compiler/glsl_types.h               | 8 +++++++-<br>
 3 files changed, 11 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/compiler/glsl/builtin_va<wbr>riables.cpp<br>
b/src/compiler/glsl/builtin_va<wbr>riables.cpp<br>
index a45c9d62c7..ce4dd43730 100644<br>
--- a/src/compiler/glsl/builtin_va<wbr>riables.cpp<br>
+++ b/src/compiler/glsl/builtin_va<wbr>riables.cpp<br>
@@ -341,6 +341,7 @@ per_vertex_accumulator::add_fi<wbr>eld(int slot, const<br>
glsl_type *type,<br>
    this->fields[this->num_fields]<wbr>.memory_coherent = 0;<br>
    this->fields[this->num_fields]<wbr>.memory_volatile = 0;<br>
    this->fields[this->num_fields]<wbr>.memory_restrict = 0;<br>
+   this->fields[this->num_<wbr>fields].image_format = 0;<br>
    this->fields[this->num_fields]<wbr>.explicit_xfb_buffer = 0;<br>
    this->fields[this->num_fields]<wbr>.xfb_buffer = -1;<br>
    this->fields[this->num_fields]<wbr>.xfb_stride = -1;<br>
diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp<br>
index 00a95d4a8e..a495366919 100644<br>
--- a/src/compiler/glsl_types.cpp<br>
+++ b/src/compiler/glsl_types.cpp<br>
@@ -955,6 +955,9 @@ glsl_type::record_compare(cons<wbr>t glsl_type *b, bool<br>
match_locations) const<br>
       if (this->fields.structure[i].mem<wbr>ory_restrict<br>
           != b->fields.structure[i].memory_<wbr>restrict)<br>
          return false;<br>
+      if (this->fields.structure[i].ima<wbr>ge_format<br>
+          != b->fields.structure[i].image_f<wbr>ormat)<br>
+         return false;<br>
       if (this->fields.structure[i].pre<wbr>cision<br>
           != b->fields.structure[i].precisi<wbr>on)<br>
          return false;<br>
diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h<br>
index 0449087238..67c152119f 100644<br>
--- a/src/compiler/glsl_types.h<br>
+++ b/src/compiler/glsl_types.h<br>
@@ -978,6 +978,11 @@ struct glsl_struct_field {<br>
    unsigned memory_restrict:1;<br>
<br>
    /**<br>
+    * Layout format, applicable to image variables only.<br>
+    */<br>
+   unsigned image_format:16;<br>
+<br>
+   /**<br>
     * Any of the xfb_* qualifiers trigger the shader to be in transform<br>
     * feedback mode so we need to keep track of whether the buffer was<br>
     * explicitly set or if its just been assigned the default global<br>
value.<br>
@@ -992,7 +997,8 @@ struct glsl_struct_field {<br>
         sample(0), matrix_layout(GLSL_MATRIX_LAYO<wbr>UT_INHERITED),<br>
patch(0),<br>
         precision(GLSL_PRECISION_<wbr>NONE), memory_read_only(0),<br>
         memory_write_only(0), memory_coherent(0), memory_volatile(0),<br>
-        memory_restrict(0), explicit_xfb_buffer(0),<br>
implicit_sized_array(0)<br>
+        memory_restrict(0), image_format(0), explicit_xfb_buffer(0),<br>
+        implicit_sized_array(0)<br>
    {<br>
       /* empty */<br>
    }<br>
--<br>
2.12.2<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">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>
</blockquote>
<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">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>
</blockquote>
<br>
<br>
</blockquote>
<br>
<br>
-- <br>
Lerne, wie die Welt wirklich ist,<br>
Aber vergiss niemals, wie sie sein sollte.<br>
</div></div></blockquote></div><br></div></div>