On Fri, Sep 11, 2015 at 2:18 AM, Tapani Pälli <[email protected]> wrote: > On 09/11/2015 09:15 AM, Ilia Mirkin wrote: >> >> On Fri, Sep 11, 2015 at 2:12 AM, Tapani Pälli <[email protected]> >> 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 <[email protected]> >>> --- >>> 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 :) _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
