[Mesa-dev] [PATCH v2] egl: doesn't allow egl to create a forward-compatible context with req ver < 3

andrey simiklit asimiklit.work at gmail.com
Tue Nov 6 11:51:18 UTC 2018


Hello,

Any updates here? :-)
This test is needed to check issue which should be fixed by the following
mesa patch:
https://patchwork.freedesktop.org/patch/256063/

This issue mentioned in this bug by Ian Romanick <idr at freedesktop.org>:
https://bugzilla.freedesktop.org/show_bug.cgi?id=92552#c9

Regards,
Andrii.

On Fri, Oct 12, 2018 at 3:11 PM <asimiklit.work at gmail.com> wrote:

> From: Andrii Simiklit <andrii.simiklit at globallogic.com>
>
> EGL_KHR_create_context spec says:
>            "The default values for EGL_CONTEXT_MAJOR_VERSION_KHR and
>         EGL_CONTEXT_MINOR_VERSION_KHR are 1 and 0 respectively."
>
>                 requesting a forward-compatible context for OpenGL
>         versions less than 3.0 will generate an error.
>
>          "* If an OpenGL context is requested and the values for attributes
>         EGL_CONTEXT_MAJOR_VERSION_KHR and EGL_CONTEXT_MINOR_VERSION_KHR,
>         when considered together with the value for attribute
>         EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR, specify an OpenGL
>         version and feature set that are not defined, than an
>         EGL_BAD_MATCH error is generated.
>
>         The defined versions of OpenGL at the time of writing are OpenGL
>         1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, 3.2, 4.0, 4.1,
>         4.2, and 4.3. Feature deprecation was introduced with OpenGL
>         3.0, so forward-compatible contexts may only be requested for
>         OpenGL 3.0 and above. Thus, examples of invalid combinations of
>         attributes include:
>
>           - Major version < 1 or > 4
>           - Major version == 1 and minor version < 0 or > 5
>           - Major version == 2 and minor version < 0 or > 1
>           - Major version == 3 and minor version < 0 or > 2
>           - Major version == 4 and minor version < 0 or > 3
>           - Forward-compatible flag set and major version < 3
>
>         Because the purpose of forward-compatible contexts is to allow
>         application development on a specific OpenGL version with the
>         knowledge that the app will run on a future version, context
>         creation will fail if
>         EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR is set and the
>         context version returned cannot implement exactly the requested
>         version."
>
> v2: (Matt Turner) - The 'piglit_report_result' calls are moved to 'main'
>                   - The variable oresult => result
>                   - Fixed whitespace errors
>                   - Fixed missing spaces after 'for'
>
> Signed-off-by: Andrii Simiklit <andrii.simiklit at globallogic.com>
> ---
>  .../valid-flag-forward-compatible-gl.c        | 74 +++++++++++++++----
>  1 file changed, 59 insertions(+), 15 deletions(-)
>
> diff --git
> a/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> b/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> index 42feb54d6..6d2bd0d9f 100644
> ---
> a/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> +++
> b/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> @@ -23,16 +23,30 @@
>  #include "piglit-util-egl.h"
>  #include "common.h"
>
> -int gl_version;
> +int gl_version = 0;
>
> -static bool try_flag(int flag)
> +static bool try_flag(int req_version, int flag)
>  {
> -       const EGLint attribs[] = {
> -               EGL_CONTEXT_FLAGS_KHR, flag,
> -               EGL_NONE
> -       };
> +       bool result = true;
> +       const unsigned vidx = req_version < 0 ? 0 : (req_version == 0) ? 1
> : 2;
> +       const bool is_forward_compatible =
> +                       (0 != (flag &
> EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR));
>
> -       ctx = eglCreateContext(egl_dpy, cfg, EGL_NO_CONTEXT, attribs);
> +       const EGLint attribs[][5] = {
> +               /*------------req_version-before-case------------*/
> +               { EGL_CONTEXT_MAJOR_VERSION_KHR, abs(req_version),
> +                 EGL_CONTEXT_FLAGS_KHR, flag,
> +                 EGL_NONE },
> +               /*------------no-req_version-case----------------*/
> +               { EGL_CONTEXT_FLAGS_KHR, flag,
> +                 EGL_NONE },
> +               /*------------req_version-after-case-------------*/
> +               { EGL_CONTEXT_FLAGS_KHR, flag,
> +                 EGL_CONTEXT_MAJOR_VERSION_KHR, abs(req_version),
> +                 EGL_NONE }
> +       };
> +       assert(vidx < 3);
> +       ctx = eglCreateContext(egl_dpy, cfg, EGL_NO_CONTEXT,
> attribs[vidx]);
>         if (ctx != NULL) {
>                 /* Get GL version in order to know whether we can test
>                  * EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR.
> @@ -47,6 +61,17 @@ static bool try_flag(int flag)
>
>                         gl_version = piglit_get_gl_version();
>                 }
> +               if (abs(req_version) < 3 && is_forward_compatible) {
> +                       /* The EGL_KHR_create_context spec says:
> +                        *
> +                        * requesting a forward-compatible context for
> OpenGL
> +                        *   versions less than 3.0 will generate an error
> +                        *
> +                        *   The default values for
> EGL_CONTEXT_MAJOR_VERSION_KHR and
> +                        *   EGL_CONTEXT_MINOR_VERSION_KHR are 1 and 0
> respectively
> +                        */
> +                       result = false;
> +               }
>                 eglDestroyContext(egl_dpy, ctx);
>         } else if (!piglit_check_egl_error(EGL_BAD_MATCH)) {
>                 /* The EGL_KHR_create_context spec says:
> @@ -57,15 +82,17 @@ static bool try_flag(int flag)
>                  *        where these attributes are supported), then an
> EGL_BAD_MATCH
>                  *        error is generated.
>                  */
> -               piglit_report_result(PIGLIT_FAIL);
> +               result = false;
>         }
>
> -       return true;
> +       return result;
>  }
>
>  int main(int argc, char **argv)
>  {
>         bool pass = true;
> +       bool skip = false;
> +       int req_version;
>
>         if (!EGL_KHR_create_context_setup(EGL_OPENGL_BIT)) {
>                 fprintf(stderr, "Desktop GL not available.\n");
> @@ -77,16 +104,33 @@ int main(int argc, char **argv)
>          *
>          *    "The default value of EGL_CONTEXT_FLAGS_KHR is zero."
>          */
> -       pass = pass && try_flag(0);
> -       if (gl_version >= 30) {
> -               pass = pass &&
> try_flag(EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR);
> -       } else {
> -               piglit_report_result(PIGLIT_SKIP);
> +       for (req_version = 0; req_version < 4 && pass && !skip;
> ++req_version) {
> +               pass = pass && try_flag(req_version, 0);
> +               if (gl_version >= 30) {
> +                       pass = pass && try_flag(req_version,
> +
>  EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR);
> +               } else {
> +                       skip = true;
> +                       break;
> +               }
> +       }
> +       /* The sign of a req_version is used to specifay
> EGL_CONTEXT_MAJOR_VERSION_KHR
> +        * flag before or after of EGL_CONTEXT_FLAGS_KHR
> +        **/
> +       for (req_version = 0; req_version > -4 && pass && !skip;
> --req_version) {
> +               pass = pass && try_flag(req_version, 0);
> +               if (gl_version >= 30) {
> +                       pass = pass && try_flag(req_version,
> +
>  EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR);
> +               } else {
> +                       skip = true;
> +                       break;
> +               }
>         }
>
>         EGL_KHR_create_context_teardown();
>
> -       piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
> +       piglit_report_result(pass ? (skip ? PIGLIT_SKIP : PIGLIT_PASS) :
> PIGLIT_FAIL);
>
>         return EXIT_SUCCESS;
>  }
> --
> 2.17.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181106/d9cd2ab9/attachment.html>


More information about the mesa-dev mailing list