On May 6, 2017 7:56:02 AM Samuel Pitoiset <[email protected]> wrote:
ARB_bindless_texture allows to declare image types inside
structures,
Of course it does... It's not like having samplers and uniforms in
structures is a massive source of pain or anything like that...
which means we need to keep track of the format.
Right. Does it make more sense to put this on the structure element or on
the image type itself? SPIR-V makes the format part of the image type.
Doing so would also let us potentially get rid of the field in [n]ir_variable.
Signed-off-by: Samuel Pitoiset <[email protected]>
---
src/compiler/glsl/builtin_variables.cpp | 1 +
src/compiler/glsl_types.cpp | 3 +++
src/compiler/glsl_types.h | 8 +++++++-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/compiler/glsl/builtin_variables.cpp
b/src/compiler/glsl/builtin_variables.cpp
index a45c9d62c7..ce4dd43730 100644
--- a/src/compiler/glsl/builtin_variables.cpp
+++ b/src/compiler/glsl/builtin_variables.cpp
@@ -341,6 +341,7 @@ per_vertex_accumulator::add_field(int slot, const
glsl_type *type,
this->fields[this->num_fields].memory_coherent = 0;
this->fields[this->num_fields].memory_volatile = 0;
this->fields[this->num_fields].memory_restrict = 0;
+ this->fields[this->num_fields].image_format = 0;
this->fields[this->num_fields].explicit_xfb_buffer = 0;
this->fields[this->num_fields].xfb_buffer = -1;
this->fields[this->num_fields].xfb_stride = -1;
diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp
index 00a95d4a8e..a495366919 100644
--- a/src/compiler/glsl_types.cpp
+++ b/src/compiler/glsl_types.cpp
@@ -955,6 +955,9 @@ glsl_type::record_compare(const glsl_type *b, bool
match_locations) const
if (this->fields.structure[i].memory_restrict
!= b->fields.structure[i].memory_restrict)
return false;
+ if (this->fields.structure[i].image_format
+ != b->fields.structure[i].image_format)
+ return false;
if (this->fields.structure[i].precision
!= b->fields.structure[i].precision)
return false;
diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h
index 0449087238..67c152119f 100644
--- a/src/compiler/glsl_types.h
+++ b/src/compiler/glsl_types.h
@@ -978,6 +978,11 @@ struct glsl_struct_field {
unsigned memory_restrict:1;
/**
+ * Layout format, applicable to image variables only.
+ */
+ unsigned image_format:16;
+
+ /**
* Any of the xfb_* qualifiers trigger the shader to be in transform
* feedback mode so we need to keep track of whether the buffer was
* explicitly set or if its just been assigned the default global value.
@@ -992,7 +997,8 @@ struct glsl_struct_field {
sample(0), matrix_layout(GLSL_MATRIX_LAYOUT_INHERITED), patch(0),
precision(GLSL_PRECISION_NONE), memory_read_only(0),
memory_write_only(0), memory_coherent(0), memory_volatile(0),
- memory_restrict(0), explicit_xfb_buffer(0), implicit_sized_array(0)
+ memory_restrict(0), image_format(0), explicit_xfb_buffer(0),
+ implicit_sized_array(0)
{
/* empty */
}
--
2.12.2
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev