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