Thanks for looking at this! I wanted to add the memory barrier command
to shader_runner to, but I also found that
piglit_get_gl_enum_from_name would not handle those strings.

My question is, why not just make piglit_get_gl_enum_from_name handle
more strings?

I think the enum=>string translation is ambiguous, but string=>enum
should not be, right?

-Jordan

On 2015-12-09 15:36:50, Timothy Arceri wrote:
> ---
>  tests/util/gen_dispatch.py                | 14 +++++++++++++-
>  tests/util/piglit-util-gl-enum-gen.c.mako | 24 ++++++++++++++++++++++++
>  tests/util/piglit-util-gl.h               |  3 +++
>  3 files changed, 40 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/util/gen_dispatch.py b/tests/util/gen_dispatch.py
> index 80099ad..dd05687 100644
> --- a/tests/util/gen_dispatch.py
> +++ b/tests/util/gen_dispatch.py
> @@ -144,12 +144,14 @@ class EnumCode(object):
>          enums = cls.get_enums_in_default_namespace(gl_registry)
>          unique_enums = cls.get_unique_enums(enums)
>          enums_by_name = cls.get_enums_by_name(enums)
> +        memory_barrier = cls.get_enums_in_memory_barrier_group(gl_registry)
>          render_template(
>              cls.C_TEMPLATE,
>              out_dir,
>              gl_registry=gl_registry,
>              sorted_unique_enums_in_default_namespace=unique_enums,
> -            sorted_enums_by_name=enums_by_name)
> +            sorted_enums_by_name=enums_by_name,
> +            sorted_by_name_memory_barrier_enums=memory_barrier)
>  
>      @classmethod
>      def get_enums_in_default_namespace(cls, gl_registry):
> @@ -161,6 +163,16 @@ class EnumCode(object):
>          return enums
>  
>      @classmethod
> +    def get_enums_in_memory_barrier_group(cls, gl_registry):
> +        enums = []
> +        for enum_group in gl_registry.enum_groups:
> +            if enum_group.name == 'MemoryBarrierMask':
> +               if enum_group.type == 'bitmask':
> +                    for enum in enum_group.enums:
> +                        enums.append(enum)
> +        return cls.get_enums_by_name(enums)
> +
> +    @classmethod
>      def get_unique_enums(cls, enums):
>          def append_enum_if_new_value(enum_list, enum):
>              if enum_list[-1].num_value < enum.num_value:
> diff --git a/tests/util/piglit-util-gl-enum-gen.c.mako 
> b/tests/util/piglit-util-gl-enum-gen.c.mako
> index 9a0fff8..04b79b8 100644
> --- a/tests/util/piglit-util-gl-enum-gen.c.mako
> +++ b/tests/util/piglit-util-gl-enum-gen.c.mako
> @@ -64,6 +64,30 @@ compare_enum_name(const void *a, const void *b)
>  }
>  
>  GLenum
> +piglit_get_gl_memory_barrier_enum_from_name(const char *name)
> +{
> +>-------static const struct gl_name_to_enum names[] = {
> +% for enum in sorted_by_name_memory_barrier_enums:
> +>------->-------{ "${enum.name}", ${enum.c_num_literal} },
> +% endfor
> +>-------};
> +>-------struct gl_name_to_enum key = { name, 0 };
> +>-------struct gl_name_to_enum *result;
> +
> +>-------result = (struct gl_name_to_enum*)
> +>------->-------bsearch(&key,
> +>------->-------        names, ARRAY_SIZE(names), sizeof names[0],
> +>------->-------        compare_enum_name);
> +
> +>-------if (result == NULL) {
> +>------->-------fprintf(stderr, "No known enum named %s!\n", name);
> +>------->-------abort();
> +>-------}
> +
> +>-------return result->_enum;
> +}
> +
> +GLenum
>  piglit_get_gl_enum_from_name(const char *name)
>  {
>  >-------static const struct gl_name_to_enum names[] = {
> diff --git a/tests/util/piglit-util-gl.h b/tests/util/piglit-util-gl.h
> index 5a8c82b..4ba0aa3 100644
> --- a/tests/util/piglit-util-gl.h
> +++ b/tests/util/piglit-util-gl.h
> @@ -95,6 +95,9 @@ const char *piglit_get_gl_enum_name(GLenum param);
>   */
>  GLenum piglit_get_gl_enum_from_name(const char *name);
>  
> +GLenum
> +piglit_get_gl_memory_barrier_enum_from_name(const char *name);
> +
>  /**
>   * \brief Convert a GL primitive type enum value to a string.
>   *
> -- 
> 2.4.3
> 
> _______________________________________________
> Piglit mailing list
> Piglit@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to