<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 07/06/18 17:22, Jason Ekstrand
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAOFGe97+n0VEayj3u33FrJsTAp0CQVE6cjMT_PUPv7qCPXL2AQ@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">On Thu, Jun 7, 2018 at 7:16 AM,
            Lionel Landwerlin <span dir="ltr"><<a
                href="mailto:lionel.g.landwerlin@intel.com"
                target="_blank" moz-do-not-send="true">lionel.g.landwerlin@intel.com</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div class="HOEnZb">
                <div class="h5">We've been running into crashes in i965
                  because of a number of issue<br>
                  throughout the driver stack. This is a really basic
                  tests that list<br>
                  the formats and their associated modifiers to just
                  catch any<br>
                  regressions.<br>
                  <br>
                  Signed-off-by: Lionel Landwerlin <<a
                    href="mailto:lionel.g.landwerlin@intel.com"
                    moz-do-not-send="true">lionel.g.landwerlin@intel.com</a><wbr>><br>
                  Bugzilla: <a
                    href="https://bugs.freedesktop.org/show_bug.cgi?id=106642"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://bugs.freedesktop.org/<wbr>show_bug.cgi?id=106642</a><br>
                  ---<br>
                   tests/egl/spec/CMakeLists.txt                 |   1 +<br>
                   .../CMakeLists.no_api.txt                     |   7 +<br>
                   .../CMakeLists.txt                            |   1 +<br>
                   .../query_format_modifiers.c                  | 148
                  ++++++++++++++++++<br>
                   tests/opengl.py                               |   6 +<br>
                   5 files changed, 163 insertions(+)<br>
                   create mode 100644 tests/egl/spec/egl_ext_image_<wbr>dma_buf_import_modifiers/<wbr>CMakeLists.no_api.txt<br>
                   create mode 100644 tests/egl/spec/egl_ext_image_<wbr>dma_buf_import_modifiers/<wbr>CMakeLists.txt<br>
                   create mode 100644 tests/egl/spec/egl_ext_image_<wbr>dma_buf_import_modifiers/<wbr>query_format_modifiers.c<br>
                  <br>
                  diff --git a/tests/egl/spec/CMakeLists.<wbr>txt
                  b/tests/egl/spec/CMakeLists.<wbr>txt<br>
                  index 66d76db60..772f8258a 100644<br>
                  --- a/tests/egl/spec/CMakeLists.<wbr>txt<br>
                  +++ b/tests/egl/spec/CMakeLists.<wbr>txt<br>
                  @@ -2,6 +2,7 @@ add_subdirectory (egl-1.4)<br>
                   add_subdirectory (egl_ext_client_extensions)<br>
                   add_subdirectory (egl_ext_device_query)<br>
                   add_subdirectory (egl_ext_device_enumeration)<br>
                  +add_subdirectory (egl_ext_image_dma_buf_import_<wbr>modifiers)<br>
                   add_subdirectory (egl_khr_create_context)<br>
                   add_subdirectory (egl_khr_get_all_proc_<wbr>addresses)<br>
                   add_subdirectory (egl_khr_gl_image)<br>
                  diff --git a/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/CMakeLists.no_api.<wbr>txt
                  b/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/CMakeLists.no_api.<wbr>txt<br>
                  new file mode 100644<br>
                  index 000000000..f6b672e44<br>
                  --- /dev/null<br>
                  +++ b/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/CMakeLists.no_api.<wbr>txt<br>
                  @@ -0,0 +1,7 @@<br>
                  +link_libraries(<br>
                  +       piglitutil<br>
                  +)<br>
                  +<br>
                  +piglit_add_executable(egl_<wbr>ext_image_dma_buf_import_<wbr>modifiers-query
                  query_format_modifiers.c)<br>
                  +<br>
                  +# vim: ft=cmake:<br>
                  diff --git a/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/CMakeLists.txt
                  b/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/CMakeLists.txt<br>
                  new file mode 100644<br>
                  index 000000000..144a306f4<br>
                  --- /dev/null<br>
                  +++ b/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/CMakeLists.txt<br>
                  @@ -0,0 +1 @@<br>
                  +piglit_include_target_api()<br>
                  diff --git a/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/query_format_<wbr>modifiers.c
                  b/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/query_format_<wbr>modifiers.c<br>
                  new file mode 100644<br>
                  index 000000000..d58886654<br>
                  --- /dev/null<br>
                  +++ b/tests/egl/spec/egl_ext_<wbr>image_dma_buf_import_<wbr>modifiers/query_format_<wbr>modifiers.c<br>
                  @@ -0,0 +1,148 @@<br>
                  +/*<br>
                  + * Copyright 2018 Intel Corporation<br>
                  + *<br>
                  + * Permission is hereby granted, free of charge, to
                  any person obtaining a<br>
                  + * copy of this software and associated documentation
                  files (the "Software"),<br>
                  + * to deal in the Software without restriction,
                  including without limitation<br>
                  + * the rights to use, copy, modify, merge, publish,
                  distribute, sublicense,<br>
                  + * and/or sell copies of the Software, and to permit
                  persons to whom the<br>
                  + * Software is furnished to do so, subject to the
                  following conditions:<br>
                  + *<br>
                  + * The above copyright notice and this permission
                  notice (including the next<br>
                  + * paragraph) shall be included in all copies or
                  substantial portions of the<br>
                  + * Software.<br>
                  + *<br>
                  + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY
                  OF ANY KIND, EXPRESS OR<br>
                  + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE
                  WARRANTIES OF MERCHANTABILITY,<br>
                  + * FITNESS FOR A PARTICULAR PURPOSE AND
                  NONINFRINGEMENT.  IN NO EVENT SHALL<br>
                  + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
                  CLAIM, DAMAGES OR OTHER<br>
                  + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
                  OR OTHERWISE, ARISING<br>
                  + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
                  THE USE OR OTHER DEALINGS<br>
                  + * IN THE SOFTWARE.<br>
                  + */<br>
                  +<br>
                  +#include "piglit-util.h"<br>
                  +#include "piglit-util-egl.h"<br>
                  +<br>
                  +int<br>
                  +main(int argc, char *argv[])<br>
                  +{<br>
                  +       EGLDisplay dpy;<br>
                  +       EGLBoolean (*peglQueryDmaBufFormatsEXT)(<wbr>EGLDisplay
                  dpy,<br>
                  +                                               EGLint
                  max_formats,<br>
                  +                                               EGLint
                  *formats,<br>
                  +                                               EGLint
                  *num_formats);<br>
                  +       EGLBoolean (*peglQueryDmaBufModifiersEXT)<wbr>(EGLDisplay
                  dpy,<br>
                  +                                               
                   EGLint format,<br>
                  +                                               
                   EGLint max_modifiers,<br>
                  +                                               
                   EGLuint64KHR *modifiers,<br>
                  +                                               
                   EGLBoolean *external_only,<br>
                  +                                               
                   EGLint *num_modifiers);<br>
                  +       EGLint f, n_formats, *formats, rand_format,
                  n_modifiers;<br>
                  +       EGLint egl_major, egl_minor;<br>
                  +       EGLBoolean ret;<br>
                  +       bool in_list;<br>
                  +<br>
                  +       /* Strip common piglit args. */<br>
                  +       piglit_strip_arg(&argc, argv, "-fbo");<br>
                  +       piglit_strip_arg(&argc, argv, "-auto");<br>
                  +<br>
                  +       dpy = eglGetDisplay(EGL_DEFAULT_<wbr>DISPLAY);<br>
                </div>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div>There's a piglit_egl_get_default_display helper.  Any
              particular reason you didn't use it?<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Thanks, didn't know about it.<br>
    <br>
    <blockquote type="cite"
cite="mid:CAOFGe97+n0VEayj3u33FrJsTAp0CQVE6cjMT_PUPv7qCPXL2AQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div class="HOEnZb">
                <div class="h5">
                  +       if (!dpy) {<br>
                  +               piglit_loge("failed to get
                  EGLDisplay\n");<br>
                  +               piglit_report_result(PIGLIT_<wbr>SKIP);<br>
                  +       }<br>
                  +<br>
                  +       ret = eglInitialize(dpy, &egl_major,
                  &egl_minor);<br>
                  +       if (!ret) {<br>
                  +               EGLint egl_error = eglGetError();<br>
                  +               piglit_loge("failed to get EGLConfig:
                  %s(0x%x)",<br>
                  +                         
                   piglit_get_egl_error_name(egl_<wbr>error),
                  egl_error);<br>
                  +               piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +       }<br>
                  +<br>
                  +       if (egl_major < 1 && egl_minor <
                  2) {<br>
                </div>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div>This does not do what you want.  It needs to be</div>
            <div><br>
            </div>
            <div>if (egl_major < 1 || (egl_major == 1 &&
              egl_minor < 2)) {<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Duh!<br>
    <br>
    <blockquote type="cite"
cite="mid:CAOFGe97+n0VEayj3u33FrJsTAp0CQVE6cjMT_PUPv7qCPXL2AQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div class="HOEnZb">
                <div class="h5">
                  +               piglit_logi("EGL 1.2 required");<br>
                  +               piglit_report_result(PIGLIT_<wbr>SKIP);<br>
                  +       }<br>
                  +<br>
                  +       piglit_require_egl_extension(<wbr>dpy,
                  "EGL_EXT_image_dma_buf_import_<wbr>modifiers");<br>
                  +<br>
                  +       peglQueryDmaBufFormatsEXT =<br>
                  +               (void *)eglGetProcAddress("<wbr>eglQueryDmaBufFormatsEXT");<br>
                  +       peglQueryDmaBufModifiersEXT =<br>
                  +               (void *)eglGetProcAddress("<wbr>eglQueryDmaBufModifiersEXT");<br>
                  +<br>
                  +       if (!peglQueryDmaBufFormatsEXT ||
                  !peglQueryDmaBufModifiersEXT) {<br>
                  +               printf("No display query
                  entrypoint\n");<br>
                </div>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div>piglit_loge?  At the very least, it should go to
              stderr.<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Oops, forgot to convert that one.<br>
    <br>
    <blockquote type="cite"
cite="mid:CAOFGe97+n0VEayj3u33FrJsTAp0CQVE6cjMT_PUPv7qCPXL2AQ@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div class="HOEnZb">
                <div class="h5">
                  +               piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +       }<br>
                  +<br>
                  +       ret = peglQueryDmaBufFormatsEXT(dpy, 0, NULL,
                  &n_formats);<br>
                  +       if (!ret)<br>
                  +               piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +       piglit_logd("Found %i format(s):", n_formats);<br>
                  +<br>
                  +       formats = calloc(n_formats, sizeof(*formats));<br>
                  +       peglQueryDmaBufFormatsEXT(dpy, n_formats,
                  formats, &n_formats);<br>
                  +<br>
                  +       for (f = 0; f < n_formats; f++) {<br>
                  +               EGLBoolean *external;<br>
                  +               EGLuint64KHR *modifiers;<br>
                  +               EGLint m;<br>
                  +<br>
                  +               piglit_logd("Format 0x%x (%c%c%c%c):",<br>
                  +                           formats[f],<br>
                  +                           formats[f] & 0xff,<br>
                  +                           (formats[f] >> 8)
                  & 0xff,<br>
                  +                           (formats[f] >> 16)
                  & 0xff,<br>
                  +                           (formats[f] >> 24)
                  & 0xff);<br>
                  +<br>
                  +               ret = peglQueryDmaBufModifiersEXT(<wbr>dpy,
                  formats[f], 0, NULL,<br>
                  +                                               
                   NULL, &n_modifiers);<br>
                  +               if (!ret)<br>
                  +                       piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +<br>
                  +               piglit_logd("\t%i modifiers:",
                  n_modifiers);<br>
                  +<br>
                  +               modifiers = calloc(n_modifiers,
                  sizeof(*modifiers));<br>
                  +               external = calloc(n_modifiers,
                  sizeof(*external));<br>
                  +               ret = peglQueryDmaBufModifiersEXT(<wbr>dpy,
                  formats[f],<br>
                  +                                               
                   n_modifiers, modifiers,<br>
                  +                                               
                   external, &n_modifiers);<br>
                  +               if (!ret)<br>
                  +                       piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +<br>
                  +               for (m = 0; m < n_modifiers; m++) {<br>
                  +                       piglit_logd("\t0x%016lx
                  external=%i", modifiers[m], external[m]);<br>
                  +               }<br>
                  +<br>
                  +               free(modifiers);<br>
                  +               free(external);<br>
                  +       }<br>
                  +<br>
                  +       /* Try to query an invalid format. */<br>
                  +       do {<br>
                  +               in_list = false;<br>
                  +               rand_format = rand();<br>
                  +<br>
                  +               for (f = 0; f < n_formats; f++) {<br>
                  +                       if (formats[f] == rand_format)
                  {<br>
                  +                               in_list = true;<br>
                  +                               break;<br>
                  +                       }<br>
                  +               }<br>
                  +       } while (in_list);<br>
                  +<br>
                  +       piglit_logd("Trying to query random format
                  0x%x", rand_format);<br>
                  +       ret = peglQueryDmaBufModifiersEXT(<wbr>dpy,
                  rand_format,<br>
                  +                                         0, NULL,
                  NULL, &n_modifiers);<br>
                  +       if (ret)<br>
                  +               piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +       if (eglGetError() != EGL_BAD_PARAMETER)<br>
                  +               piglit_report_result(PIGLIT_<wbr>FAIL);<br>
                  +<br>
                  +       free(formats);<br>
                  +<br>
                  +       piglit_report_result(PIGLIT_<wbr>PASS);<br>
                  +}<br>
                  diff --git a/tests/opengl.py b/tests/opengl.py<br>
                  index 6a6d71fb4..751391451 100644<br>
                  --- a/tests/opengl.py<br>
                  +++ b/tests/opengl.py<br>
                  @@ -4534,6 +4534,12 @@ with profile.test_list.group_<wbr>manager(<br>
                           exclude_platforms=['glx']) as g:<br>
                       g(['egl_mesa_platform_<wbr>surfaceless'],
                  'conformance')<br>
                  <br>
                  +with profile.test_list.group_<wbr>manager(<br>
                  +        PiglitGLTest,<br>
                  +        grouptools.join('spec',
                  'egl_ext_image_dma_buf_import_<wbr>modifiers'),<br>
                  +        exclude_platforms=['glx']) as g:<br>
                  +    g(['egl_ext_image_dma_buf_<wbr>import_modifiers-query'],
                  'conformance')<br>
                  +<br>
                   with profile.test_list.group_<wbr>manager(<br>
                           PiglitGLTest, grouptools.join('spec',
                  '!opengl ES 2.0')) as g:<br>
                       g(['glsl-fs-pointcoord_gles2']<wbr>,
                  'glsl-fs-pointcoord')<br>
                  -- <br>
                  2.17.1<br>
                  <br>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>