On 09/11/2015 09:32 AM, Ilia Mirkin wrote:
On Fri, Sep 11, 2015 at 2:18 AM, Tapani Pälli <tapani.pa...@intel.com> wrote:
On 09/11/2015 09:15 AM, Ilia Mirkin wrote:

On Fri, Sep 11, 2015 at 2:12 AM, Tapani Pälli <tapani.pa...@intel.com>
wrote:

This makes sure that user is still able to query properties about
variables that have gotten packed by lower_packed_varyings pass.

Fixes following OpenGL ES 3.1 test:
     ES31-CTS.program_interface_query.separate-programs-vertex

v2: fix 'name included in packed list' check (Ilia Mirkin)

Signed-off-by: Tapani Pälli <tapani.pa...@intel.com>
---
   src/glsl/linker.cpp | 74
++++++++++++++++++++++++++++++++++++++++++++++++++---
   1 file changed, 70 insertions(+), 4 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 94f847e..d8afb26 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -3114,6 +3114,29 @@ add_program_resource(struct gl_shader_program
*prog, GLenum type,
      return true;
   }

+/* Function checks if a variable var is a packed varying and
+ * if given name is part of packed varying's list.
+ *
+ * If a variable is a packed varying, it has a name like
+ * 'packed:a,b,c' where a, b and c are separate variables.
+ */
+static bool
+included_in_packed_varying(ir_variable *var, const char *name)
+{
+   if (strncmp(var->name, "packed:", 7) != 0)
+      return false;
+
+   const char *name_in_list = strstr(var->name, name);
+   const char *head = name_in_list - 1;
+   const char *tail = name_in_list + strlen(name);
+
+   if (name_in_list &&
+       (*head == ':' || *head == ',') &&
+       (*tail == '\0' || *tail == ','))


So... in the case "ab,b" and you search for 'b', it'll find 'ab' and
reject it.


Huh, this seems more complex that I thought .. almost a case for proper
parser rather than a helper function.

FWIW there's strtok_r(). BTW, make sure to skip the "packed:" bit of
var->name. And be thankful that variable names can't contain commas in
them :)

I could iterate over instances also using strstr but strtok_r seems cleaner, only minus is that it requires strdup but this will happen only with packed varyings so overall it is quite a corner case. Will send strtok_r version.

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

Reply via email to