[waffle] [PATCH 1/4] waffle: put waffle_enum items in a macro

Jordan Justen jordan.l.justen at intel.com
Wed Apr 22 17:09:14 PDT 2015


On 2015-04-22 11:03:47, Frank Henigman wrote:
> List all waffle_enum items in a big #define to avoid duplicating
> the list when a case is needed for each item, e.g. enum to string.

This looks kind of yucky. :)

When you recently mentioned the idea of changing wflinfo to be written
in python, it made me think about python bindings for waffle.

This lead me to think that it might be nice if the waffle API was
defined by something like XML. This would allow us to generate
waffle.h, python bindings, and things like this enum to string
mapping.

We do something similar (enum to string mapping) on the OpenGL API in
piglit.

-Jordan

> Signed-off-by: Frank Henigman <fjhenigman at google.com>
> ---
>  include/waffle/waffle.h | 150 ++++++++++++++++++++++++++----------------------
>  1 file changed, 81 insertions(+), 69 deletions(-)
> 
> diff --git a/include/waffle/waffle.h b/include/waffle/waffle.h
> index 297a487..dd39f2c 100644
> --- a/include/waffle/waffle.h
> +++ b/include/waffle/waffle.h
> @@ -98,80 +98,92 @@ waffle_error_to_string(enum waffle_error e);
>  // waffle_enum
>  // ---------------------------------------------------------------------------
>  
> -enum waffle_enum {
> -    // ------------------------------------------------------------------
> -    // Generic
> -    // ------------------------------------------------------------------
> -
> -    WAFFLE_DONT_CARE                                            = -1,
> -    WAFFLE_NONE                                                 =  0,
> -
> -    // ------------------------------------------------------------------
> -    // For waffle_init()
> -    // ------------------------------------------------------------------
> -
> -    WAFFLE_PLATFORM                                             = 0x0010,
> -        WAFFLE_PLATFORM_ANDROID                                 = 0x0011,
> -        WAFFLE_PLATFORM_CGL                                     = 0x0012,
> -        WAFFLE_PLATFORM_GLX                                     = 0x0013,
> -        WAFFLE_PLATFORM_WAYLAND                                 = 0x0014,
> -        WAFFLE_PLATFORM_X11_EGL                                 = 0x0015,
> -        WAFFLE_PLATFORM_GBM                                     = 0x0016,
> -        WAFFLE_PLATFORM_WGL                                     = 0x0017,
> -        WAFFLE_PLATFORM_NACL                                    = 0x0018,
> -
> -    // ------------------------------------------------------------------
> -    // For waffle_config_choose()
> -    // ------------------------------------------------------------------
> -
> -    WAFFLE_CONTEXT_API                                          = 0x020a,
> -        WAFFLE_CONTEXT_OPENGL                                   = 0x020b,
> -        WAFFLE_CONTEXT_OPENGL_ES1                               = 0x020c,
> -        WAFFLE_CONTEXT_OPENGL_ES2                               = 0x020d,
> -        WAFFLE_CONTEXT_OPENGL_ES3                               = 0x0214,
> -
> -    WAFFLE_CONTEXT_MAJOR_VERSION                                = 0x020e,
> -    WAFFLE_CONTEXT_MINOR_VERSION                                = 0x020f,
> -
> -    WAFFLE_CONTEXT_PROFILE                                      = 0x0210,
> -        WAFFLE_CONTEXT_CORE_PROFILE                             = 0x0211,
> -        WAFFLE_CONTEXT_COMPATIBILITY_PROFILE                    = 0x0212,
> +#define WAFFLE_ENUM_LIST_ANY(f) \
> +    /* ----------------------------------------------------------------*/ \
> +    /* Generic                                                         */ \
> +    /* ----------------------------------------------------------------*/ \
> +                                                                          \
> +    f(WAFFLE_DONT_CARE                                          , -1)     \
> +    f(WAFFLE_NONE                                               ,  0)     \
> +                                                                          \
> +    /* ----------------------------------------------------------------*/ \
> +    /* For waffle_init()                                               */ \
> +    /* ----------------------------------------------------------------*/ \
> +                                                                          \
> +    f(WAFFLE_PLATFORM                                           , 0x0010) \
> +        f(WAFFLE_PLATFORM_ANDROID                               , 0x0011) \
> +        f(WAFFLE_PLATFORM_CGL                                   , 0x0012) \
> +        f(WAFFLE_PLATFORM_GLX                                   , 0x0013) \
> +        f(WAFFLE_PLATFORM_WAYLAND                               , 0x0014) \
> +        f(WAFFLE_PLATFORM_X11_EGL                               , 0x0015) \
> +        f(WAFFLE_PLATFORM_GBM                                   , 0x0016) \
> +        f(WAFFLE_PLATFORM_WGL                                   , 0x0017) \
> +        f(WAFFLE_PLATFORM_NACL                                  , 0x0018) \
> +                                                                          \
> +    /* ----------------------------------------------------------------*/ \
> +    /* For waffle_config_choose()                                      */ \
> +    /* ----------------------------------------------------------------*/ \
> +                                                                          \
> +    f(WAFFLE_CONTEXT_API                                        , 0x020a) \
> +        f(WAFFLE_CONTEXT_OPENGL                                 , 0x020b) \
> +        f(WAFFLE_CONTEXT_OPENGL_ES1                             , 0x020c) \
> +        f(WAFFLE_CONTEXT_OPENGL_ES2                             , 0x020d) \
> +        f(WAFFLE_CONTEXT_OPENGL_ES3                             , 0x0214) \
> +                                                                          \
> +    f(WAFFLE_CONTEXT_MAJOR_VERSION                              , 0x020e) \
> +    f(WAFFLE_CONTEXT_MINOR_VERSION                              , 0x020f) \
> +                                                                          \
> +    f(WAFFLE_CONTEXT_PROFILE                                    , 0x0210) \
> +        f(WAFFLE_CONTEXT_CORE_PROFILE                           , 0x0211) \
> +        f(WAFFLE_CONTEXT_COMPATIBILITY_PROFILE                  , 0x0212) \
> +                                                                          \
> +    f(WAFFLE_RED_SIZE                                           , 0x0201) \
> +    f(WAFFLE_GREEN_SIZE                                         , 0x0202) \
> +    f(WAFFLE_BLUE_SIZE                                          , 0x0203) \
> +    f(WAFFLE_ALPHA_SIZE                                         , 0x0204) \
> +                                                                          \
> +    f(WAFFLE_DEPTH_SIZE                                         , 0x0205) \
> +    f(WAFFLE_STENCIL_SIZE                                       , 0x0206) \
> +                                                                          \
> +    f(WAFFLE_SAMPLE_BUFFERS                                     , 0x0207) \
> +    f(WAFFLE_SAMPLES                                            , 0x0208) \
> +                                                                          \
> +    f(WAFFLE_DOUBLE_BUFFERED                                    , 0x0209) \
> +                                                                          \
> +    f(WAFFLE_ACCUM_BUFFER                                       , 0x0213) \
> +                                                                          \
> +    /* ----------------------------------------------------------------*/ \
> +    /* For waffle_dl_sym()                                             */ \
> +    /* ----------------------------------------------------------------*/ \
> +                                                                          \
> +    f(WAFFLE_DL_OPENGL                                          , 0x0301) \
> +    f(WAFFLE_DL_OPENGL_ES1                                      , 0x0302) \
> +    f(WAFFLE_DL_OPENGL_ES2                                      , 0x0303) \
> +    f(WAFFLE_DL_OPENGL_ES3                                      , 0x0304) \
> +                                                                          \
> +    /* ----------------------------------------------------------------*/ \
> +    /* For waffle_window                                               */ \
> +    /* ----------------------------------------------------------------*/ \
> +                                                                          \
> +    f(WAFFLE_WINDOW_WIDTH                                       , 0x0310) \
> +    f(WAFFLE_WINDOW_HEIGHT                                      , 0x0311)
>  
>  #if WAFFLE_API_VERSION >= 0x0103
> -    WAFFLE_CONTEXT_FORWARD_COMPATIBLE                           = 0x0215,
> -    WAFFLE_CONTEXT_DEBUG                                        = 0x0216,
> +#define WAFFLE_ENUM_LIST_0103(f)                                          \
> +    f(WAFFLE_CONTEXT_FORWARD_COMPATIBLE                         , 0x0215) \
> +    f(WAFFLE_CONTEXT_DEBUG                                      , 0x0216)
> +#else
> +#define WAFFLE_ENUM_LIST_0103(f)
>  #endif
>  
> -    WAFFLE_RED_SIZE                                             = 0x0201,
> -    WAFFLE_GREEN_SIZE                                           = 0x0202,
> -    WAFFLE_BLUE_SIZE                                            = 0x0203,
> -    WAFFLE_ALPHA_SIZE                                           = 0x0204,
> -
> -    WAFFLE_DEPTH_SIZE                                           = 0x0205,
> -    WAFFLE_STENCIL_SIZE                                         = 0x0206,
> -
> -    WAFFLE_SAMPLE_BUFFERS                                       = 0x0207,
> -    WAFFLE_SAMPLES                                              = 0x0208,
> -
> -    WAFFLE_DOUBLE_BUFFERED                                      = 0x0209,
> +#define WAFFLE_ENUM_LIST(f) \
> +    WAFFLE_ENUM_LIST_ANY(f) \
> +    WAFFLE_ENUM_LIST_0103(f)
>  
> -    WAFFLE_ACCUM_BUFFER                                         = 0x0213,
> -
> -    // ------------------------------------------------------------------
> -    // For waffle_dl_sym()
> -    // ------------------------------------------------------------------
> -
> -    WAFFLE_DL_OPENGL                                            = 0x0301,
> -    WAFFLE_DL_OPENGL_ES1                                        = 0x0302,
> -    WAFFLE_DL_OPENGL_ES2                                        = 0x0303,
> -    WAFFLE_DL_OPENGL_ES3                                        = 0x0304,
> -
> -    // ------------------------------------------------------------------
> -    // For waffle_window
> -    // ------------------------------------------------------------------
> -
> -    WAFFLE_WINDOW_WIDTH                                         = 0x0310,
> -    WAFFLE_WINDOW_HEIGHT                                        = 0x0311,
> +enum waffle_enum {
> +#define ENUM_ITEM(name, value) name = value,
> +WAFFLE_ENUM_LIST(ENUM_ITEM)
> +#undef ENUM_ITEM
>  };
>  
>  const char*
> -- 
> 2.2.0.rc0.207.ga3a616c
> 
> _______________________________________________
> waffle mailing list
> waffle at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/waffle


More information about the waffle mailing list