On 10/20/2015 01:11 PM, Lofstedt, Marta wrote:

If you also remove the uniforms[i].array_elements in the same manner, the 
assert in:
ES31-CTS.explicit_uniform_location.uniform-loc-arrays-of-arrays
Is also avoided.

Are you referring to one of the loops iterating uniforms in this same place the patch is touching?

For me it looks like the problem with arrays-of-arrays test is that it will assign overlapping locations currently for uniforms if we have 'arrays of arrays' situation going on.

For example with

layout(location = 0) uniform float uni[2][2]

uni[0] gets location 0, but uni[1] has gets location 0 too. I haven't quite figured out yet where the issue is but the location counter gets reset for each array item and starts again from 0 while it should actually maintain its count ..


-----Original Message-----
From: mesa-dev [mailto:mesa-dev-boun...@lists.freedesktop.org] On
Behalf Of Tapani Pälli
Sent: Tuesday, October 20, 2015 11:24 AM
To: mesa-dev@lists.freedesktop.org
Subject: [Mesa-dev] [PATCH 1/3] glsl: skip buffer variables when filling
UniformRemapTable

UniformRemapTable is used only for remapping user specified uniform
locations to driver internally used ones, shader storage buffer variables
should not utilize uniform locations.

Signed-off-by: Tapani Pälli <tapani.pa...@intel.com>
---
  src/glsl/link_uniforms.cpp | 7 +++++--
  1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index
fe00aa3..f7b87a1 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -1180,7 +1180,8 @@ link_assign_uniform_locations(struct
gl_shader_program *prog,

     /* Reserve all the explicit locations of the active uniforms. */
     for (unsigned i = 0; i < num_uniforms; i++) {
-      if (uniforms[i].type->is_subroutine())
+      if (uniforms[i].type->is_subroutine() ||
+          uniforms[i].is_shader_storage)
           continue;

        if (uniforms[i].remap_location != UNMAPPED_UNIFORM_LOC) { @@ -
1200,8 +1201,10 @@ link_assign_uniform_locations(struct
gl_shader_program *prog,
     /* Reserve locations for rest of the uniforms. */
     for (unsigned i = 0; i < num_uniforms; i++) {

-      if (uniforms[i].type->is_subroutine())
+      if (uniforms[i].type->is_subroutine() ||
+          uniforms[i].is_shader_storage)
           continue;
+
        /* Built-in uniforms should not get any location. */
        if (uniforms[i].builtin)
           continue;
--
2.4.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to