xserver: Branch 'master' - 3 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 9 17:27:13 UTC 2023


 glamor/glamor.c                            |   12 ---
 glamor/glamor_composite_glyphs.c           |   10 +-
 glamor/glamor_copy.c                       |   12 +--
 glamor/glamor_dash.c                       |   14 +--
 glamor/glamor_glyphblt.c                   |    2 
 glamor/glamor_lines.c                      |    2 
 glamor/glamor_points.c                     |    2 
 glamor/glamor_priv.h                       |   13 +++
 glamor/glamor_program.c                    |   54 ++++++++------
 glamor/glamor_rects.c                      |    4 -
 glamor/glamor_render.c                     |   64 ++++++++---------
 glamor/glamor_segs.c                       |    2 
 glamor/glamor_spans.c                      |    2 
 glamor/glamor_text.c                       |   14 +--
 glamor/glamor_xv.c                         |   30 ++++----
 test/bugs/meson.build                      |   57 ++++++---------
 test/meson.build                           |  105 +++++++++++++++--------------
 test/scripts/xephyr-glamor-gles3-piglit.sh |   34 +++++++++
 18 files changed, 237 insertions(+), 196 deletions(-)

New commits:
commit 6fa9da0431aeadfe1ba5a63fb25e665d65bca860
Author: Konstantin <ria.freelander at gmail.com>
Date:   Wed Oct 4 20:55:45 2023 +0300

    tests: enable CI for both GLES2 and GLES3 variants
    
    Signed-off-by: Konstantin <ria.freelander at gmail.com>

diff --git a/test/bugs/meson.build b/test/bugs/meson.build
index 80eeb0750..9ffb26443 100644
--- a/test/bugs/meson.build
+++ b/test/bugs/meson.build
@@ -12,40 +12,28 @@ if get_option('xvfb')
 
     if xcb_dep.found() and xcb_image_dep.found() and xcb_util_dep.found() and get_option('xvfb') and get_option('xephyr') and build_glamor
         bug1354 = executable('bug1354', 'bug1354.c', dependencies: [xcb_dep, xcb_image_dep, xcb_util_dep])
-        test('bug1354-gl',
-                simple_xinit,
-                args: [simple_xinit.full_path(),
-                    bug1354.full_path(),
-                    '-t',':201','-r',':200',
-                    '----',
-                    xephyr_server.full_path(),
-                    '-glamor',
-                    '-schedMax', '2000',
-                    ':201',
-                    '--',
-                    xvfb_args,
-                    ':200'
-                    ],
-                suite: 'xephyr-glamor',
-                timeout: 300,
-            )
-        test('bug1354-gles',
-                simple_xinit,
-                args: [simple_xinit.full_path(),
-                    bug1354.full_path(),
-                    '-t',':199','-r',':198',
-                    '----',
-                    xephyr_server.full_path(),
-                    '-glamor_gles2',
-                    '-schedMax', '2000',
-                    ':199',
-                    '--',
-                    xvfb_args,
-                    ':198'
-                    ],
-                env: gles20_env,
-                suite: 'xephyr-glamor-gles2',
-                timeout: 300,
-            )
+        foreach testsuite: [
+            ['-gl', ':201', ':200'],
+            ['-gles2', ':199', ':198'],
+            ['-gles3', ':203', ':202']
+        ]
+            test('bug1354' + testsuite[0],
+                    simple_xinit,
+                    args: [simple_xinit.full_path(),
+                        bug1354.full_path(),
+                        '-t', testsuite[1],'-r', testsuite[2],
+                        '----',
+                        xephyr_server.full_path(),
+                        '-glamor',
+                        '-schedMax', '2000',
+                        testsuite[1],
+                        '--',
+                        xvfb_args,
+                        testsuite[2]
+                        ],
+                    suite: 'xephyr-glamor' + testsuite[0],
+                    timeout: 300,
+                )
+        endforeach
     endif
 endif
\ No newline at end of file
diff --git a/test/meson.build b/test/meson.build
index c28d3c386..7032f3003 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -70,6 +70,7 @@ rendercheck_tests_gles2_fail = [
 ]
 rendercheck_tests = rendercheck_blend + rendercheck_tests_noblend + rendercheck_a8
 rendercheck_tests_gles2_success = rendercheck_blend_gles2 + rendercheck_tests_noblend
+rendercheck_tests_gles3 = rendercheck_blend_gles2 + rendercheck_tests_noblend + rendercheck_tests_gles2_fail
 rendercheck = find_program('rendercheck', required:false)
 
 if get_option('xvfb')
@@ -105,76 +106,47 @@ if get_option('xvfb')
     endif
 
     if get_option('xephyr') and build_glamor
-        test('XTS',
-            find_program('scripts/xephyr-glamor-piglit.sh'),
-            env: piglit_env,
-            timeout: 1200,
-            suite: 'xephyr-glamor',
-        )
-        test('XTS',
-            find_program('scripts/xephyr-glamor-gles2-piglit.sh'),
-            env: gles20_env,
-            timeout: 1200,
-            suite: 'xephyr-glamor-gles2',
-        )
+        foreach testsuite : ['','-gles2','-gles3']
+            test_env = piglit_env
+            if(testsuite == '-gles2')
+                test_env = gles20_env
+            endif
+            test('XTS',
+                find_program('scripts/xephyr-glamor' + testsuite + '-piglit.sh'),
+                env: piglit_env,
+                timeout: 1200,
+                suite: 'xephyr-glamor' + testsuite,
+            )
+        endforeach
+        test_parameters = [
+                [rendercheck_tests, '', piglit_env, '', false], 
+                [rendercheck_tests_gles2_success, '_gles2', gles20_env, '-gles2', false], 
+                [rendercheck_tests_gles2_fail, '_gles2', gles20_env, '-gles2', true], 
+                [rendercheck_tests_gles3, '_gles2', piglit_env, '-gles3', false]
+            ]
 
         if rendercheck.found()
-            foreach rctest: rendercheck_tests
-                test(rctest[0],
-                     simple_xinit,
-                     args: [simple_xinit.full_path(),
-                            rendercheck.path(),
-                            rctest[1].split(' '),
-                            '----',
-                            xephyr_server.full_path(),
-                            '-glamor',
-                            '-glamor-skip-present',
-                            '-schedMax', '2000',
-                            '--',
-                            xvfb_args,
-                           ],
-                     suite: 'xephyr-glamor',
-                     timeout: 300,
-                    )
-            endforeach
-            foreach rctest: rendercheck_tests_gles2_success
-                test(rctest[0],
-                     simple_xinit,
-                     args: [simple_xinit.full_path(),
-                            rendercheck.path(),
-                            rctest[1].split(' '),
-                            '----',
-                            xephyr_server.full_path(),
-                            '-glamor_gles2',
-                            '-glamor-skip-present',
-                            '-schedMax', '2000',
-                            '--',
-                            xvfb_args,
-                           ],
-                     env: gles20_env,
-                     suite: 'xephyr-glamor-gles2',
-                     timeout: 300,
-                    )
-            endforeach
-            foreach rctest: rendercheck_tests_gles2_fail
-                test(rctest[0],
-                     simple_xinit,
-                     args: [simple_xinit.full_path(),
-                            rendercheck.path(),
-                            rctest[1].split(' '),
-                            '----',
-                            xephyr_server.full_path(),
-                            '-glamor_gles2',
-                            '-glamor-skip-present',
-                            '-schedMax', '2000',
-                            '--',
-                            xvfb_args,
-                           ],
-                     env: gles20_env,
-                     suite: 'xephyr-glamor-gles2',
-                     should_fail: true,
-                     timeout: 300,
-                    )
+            foreach testsuite : test_parameters
+                foreach rctest : testsuite[0]
+                    test(rctest[0],
+                        simple_xinit,
+                        args: [simple_xinit.full_path(),
+                                rendercheck.path(),
+                                rctest[1].split(' '),
+                                '----',
+                                xephyr_server.full_path(),
+                                '-glamor' + testsuite[1],
+                                '-glamor-skip-present',
+                                '-schedMax', '2000',
+                                '--',
+                                xvfb_args,
+                            ],
+                        env: testsuite[2],
+                        suite: 'xephyr-glamor' + testsuite[3],
+                        should_fail: testsuite[4],
+                        timeout: 300,
+                        )
+                endforeach
             endforeach
         endif
     endif
diff --git a/test/scripts/xephyr-glamor-gles3-piglit.sh b/test/scripts/xephyr-glamor-gles3-piglit.sh
new file mode 100755
index 000000000..87b0a9b09
--- /dev/null
+++ b/test/scripts/xephyr-glamor-gles3-piglit.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# this times out on Travis, because the tests take too long.
+if test "x$TRAVIS_BUILD_DIR" != "x"; then
+    exit 77
+fi
+
+# Start a Xephyr server using glamor.  Since the test environment is
+# headless, we start an Xvfb first to host the Xephyr.
+export PIGLIT_RESULTS_DIR=$XSERVER_BUILDDIR/test/piglit-results/xephyr-glamor-gles3
+
+export SERVER_COMMAND="$XSERVER_BUILDDIR/hw/kdrive/ephyr/Xephyr \
+        -glamor_gles2 \
+        -glamor-skip-present \
+        -noreset \
+        -schedMax 2000 \
+        -screen 1280x1024"
+
+# Tests that currently fail on llvmpipe on CI
+PIGLIT_ARGS="$PIGLIT_ARGS -x xcleararea at 6"
+PIGLIT_ARGS="$PIGLIT_ARGS -x xcleararea at 7"
+PIGLIT_ARGS="$PIGLIT_ARGS -x xclearwindow at 4"
+PIGLIT_ARGS="$PIGLIT_ARGS -x xclearwindow at 5"
+PIGLIT_ARGS="$PIGLIT_ARGS -x xcopyarea at 1"
+PIGLIT_ARGS="$PIGLIT_ARGS -x xsetfontpath at 1"
+PIGLIT_ARGS="$PIGLIT_ARGS -x xsetfontpath at 2"
+
+export PIGLIT_ARGS
+
+$XSERVER_BUILDDIR/test/simple-xinit \
+        $XSERVER_DIR/test/scripts/run-piglit.sh \
+        -- \
+        $XSERVER_BUILDDIR/hw/vfb/Xvfb \
+        -screen scrn 1280x1024x24
commit ee107cd4911e692480ab2ff9c12e3c6958bdec4e
Author: Konstantin Pugin <ria.freelander at gmail.com>
Date:   Sun Jul 24 16:03:51 2022 +0300

    glamor: support GLES3 shaders
    
    Some hardware (preferably mobile) working on GLES3 way faster than
    on desktop GL and supports more features. This commit will allow using
    GLES3 if glamor is running over GL ES, and version 3 is supported.
    
    Changes are the following:
    1. Add compatibility layer for 120/GLES2 shaders with defines in and out
    2. Switch attribute and varying to in and out in almost all shaders
       (aside gradient)
    3. Add newGL-only frag_color variable, which defines as gl_FragColor on
       old pipelines
    4. Switch all shaders to use frag_color.
    5. Previous commit is reverted, because now we have more than one GL ES
    version, previous commit used to set version 100 for all ES shaders, which
    is not true for ES 3
    
    Signed-off-by: Konstantin Pugin <ria.freelander at gmail.com>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index 848b484cf..a2cee41a0 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -689,17 +689,6 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 
     glamor_priv->glsl_version = epoxy_glsl_version();
 
-    if (glamor_priv->is_gles) {
-        /* Force us back to the base version of our programs on an ES
-         * context, anyway.  Basically glamor only uses desktop 1.20
-         * or 1.30 currently.  1.30's new features are also present in
-         * ES 3.0, but our glamor_program.c constructions use a lot of
-         * compatibility features (to reduce the diff between 1.20 and
-         * 1.30 programs).
-         */
-        glamor_priv->glsl_version = 120;
-    }
-
     /* We'd like to require GL_ARB_map_buffer_range or
      * GL_OES_map_buffer_range, since it offers more information to
      * the driver than plain old glMapBuffer() or glBufferSubData().
@@ -733,6 +722,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
          * etnaviv offers GLSL 140 with OpenGL 2.1.
          */
         if (glamor_glsl_has_ints(glamor_priv) &&
+            !glamor_priv->is_gles &&
             !epoxy_has_gl_extension("GL_ARB_instanced_arrays"))
                 glamor_priv->glsl_version = 120;
     } else {
diff --git a/glamor/glamor_composite_glyphs.c b/glamor/glamor_composite_glyphs.c
index 7911e0009..f208504dd 100644
--- a/glamor/glamor_composite_glyphs.c
+++ b/glamor/glamor_composite_glyphs.c
@@ -180,16 +180,16 @@ glamor_glyph_add(struct glamor_glyph_atlas *atlas, DrawablePtr glyph_draw)
 static const glamor_facet glamor_facet_composite_glyphs_130 = {
     .name = "composite_glyphs",
     .version = 130,
-    .vs_vars = ("attribute vec4 primitive;\n"
-                "attribute vec2 source;\n"
-                "varying vec2 glyph_pos;\n"),
+    .vs_vars = ("in vec4 primitive;\n"
+                "in vec2 source;\n"
+                "out vec2 glyph_pos;\n"),
     .vs_exec = ("       vec2 pos = primitive.zw * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
                 GLAMOR_POS(gl_Position, (primitive.xy + pos))
                 "       glyph_pos = (source + pos) * ATLAS_DIM_INV;\n"),
-    .fs_vars = ("varying vec2 glyph_pos;\n"
+    .fs_vars = ("in vec2 glyph_pos;\n"
                 "out vec4 color0;\n"
                 "out vec4 color1;\n"),
-    .fs_exec = ("       vec4 mask = texture2D(atlas, glyph_pos);\n"),
+    .fs_exec = ("       vec4 mask = texture(atlas, glyph_pos);\n"),
     .source_name = "source",
     .locations = glamor_program_location_atlas,
 };
diff --git a/glamor/glamor_copy.c b/glamor/glamor_copy.c
index 08b55b67b..00a04d94f 100644
--- a/glamor/glamor_copy.c
+++ b/glamor/glamor_copy.c
@@ -49,10 +49,10 @@ use_copyarea(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
 
 static const glamor_facet glamor_facet_copyarea = {
     "copy_area",
-    .vs_vars = "attribute vec2 primitive;\n",
+    .vs_vars = "in vec2 primitive;\n",
     .vs_exec = (GLAMOR_POS(gl_Position, primitive.xy)
                 "       fill_pos = (fill_offset + primitive.xy) * fill_size_inv;\n"),
-    .fs_exec = "       gl_FragColor = texture2D(sampler, fill_pos);\n",
+    .fs_exec = "       frag_color = texture(sampler, fill_pos);\n",
     .locations = glamor_program_location_fillsamp | glamor_program_location_fillpos,
     .use = use_copyarea,
 };
@@ -141,14 +141,14 @@ use_copyplane(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
 static const glamor_facet glamor_facet_copyplane = {
     "copy_plane",
     .version = 130,
-    .vs_vars = "attribute vec2 primitive;\n",
+    .vs_vars = "in vec2 primitive;\n",
     .vs_exec = (GLAMOR_POS(gl_Position, (primitive.xy))
                 "       fill_pos = (fill_offset + primitive.xy) * fill_size_inv;\n"),
-    .fs_exec = ("       uvec4 bits = uvec4(round(texture2D(sampler, fill_pos) * bitmul));\n"
+    .fs_exec = ("       uvec4 bits = uvec4(round(texture(sampler, fill_pos) * bitmul));\n"
                 "       if ((bits & bitplane) != uvec4(0,0,0,0))\n"
-                "               gl_FragColor = fg;\n"
+                "               frag_color = fg;\n"
                 "       else\n"
-                "               gl_FragColor = bg;\n"),
+                "               frag_color = bg;\n"),
     .locations = glamor_program_location_fillsamp|glamor_program_location_fillpos|glamor_program_location_fg|glamor_program_location_bg|glamor_program_location_bitplane,
     .use = use_copyplane,
 };
diff --git a/glamor/glamor_dash.c b/glamor/glamor_dash.c
index e0fe0e7e0..828969d91 100644
--- a/glamor/glamor_dash.c
+++ b/glamor/glamor_dash.c
@@ -27,8 +27,8 @@
 #include "glamor_prepare.h"
 
 static const char dash_vs_vars[] =
-    "attribute vec3 primitive;\n"
-    "varying float dash_offset;\n";
+    "in vec3 primitive;\n"
+    "out float dash_offset;\n";
 
 static const char dash_vs_exec[] =
     "       dash_offset = primitive.z / dash_length;\n"
@@ -36,20 +36,20 @@ static const char dash_vs_exec[] =
     GLAMOR_POS(gl_Position, primitive.xy);
 
 static const char dash_fs_vars[] =
-    "varying float dash_offset;\n";
+    "in float dash_offset;\n";
 
 static const char on_off_fs_exec[] =
-    "       float pattern = texture2D(dash, vec2(dash_offset, 0.5)).w;\n"
+    "       float pattern = texture(dash, vec2(dash_offset, 0.5)).w;\n"
     "       if (pattern == 0.0)\n"
     "               discard;\n";
 
 /* XXX deal with stippled double dashed lines once we have stippling support */
 static const char double_fs_exec[] =
-    "       float pattern = texture2D(dash, vec2(dash_offset, 0.5)).w;\n"
+    "       float pattern = texture(dash, vec2(dash_offset, 0.5)).w;\n"
     "       if (pattern == 0.0)\n"
-    "               gl_FragColor = bg;\n"
+    "               frag_color = bg;\n"
     "       else\n"
-    "               gl_FragColor = fg;\n";
+    "               frag_color = fg;\n";
 
 
 static const glamor_facet glamor_facet_on_off_dash_lines = {
diff --git a/glamor/glamor_glyphblt.c b/glamor/glamor_glyphblt.c
index ddc02656d..44f668818 100644
--- a/glamor/glamor_glyphblt.c
+++ b/glamor/glamor_glyphblt.c
@@ -32,7 +32,7 @@
 
 static const glamor_facet glamor_facet_poly_glyph_blt = {
     .name = "poly_glyph_blt",
-    .vs_vars = "attribute vec2 primitive;\n",
+    .vs_vars = "in vec2 primitive;\n",
     .vs_exec = ("       vec2 pos = vec2(0,0);\n"
                 GLAMOR_DEFAULT_POINT_SIZE
                 GLAMOR_POS(gl_Position, primitive)),
diff --git a/glamor/glamor_lines.c b/glamor/glamor_lines.c
index ec70804ac..c9b776bb5 100644
--- a/glamor/glamor_lines.c
+++ b/glamor/glamor_lines.c
@@ -27,7 +27,7 @@
 
 static const glamor_facet glamor_facet_poly_lines = {
     .name = "poly_lines",
-    .vs_vars = "attribute vec2 primitive;\n",
+    .vs_vars = "in vec2 primitive;\n",
     .vs_exec = ("       vec2 pos = vec2(0.0,0.0);\n"
                 GLAMOR_POS(gl_Position, primitive.xy)),
 };
diff --git a/glamor/glamor_points.c b/glamor/glamor_points.c
index d6d6784f7..91b5e4789 100644
--- a/glamor/glamor_points.c
+++ b/glamor/glamor_points.c
@@ -31,7 +31,7 @@
 
 static const glamor_facet glamor_facet_point = {
     .name = "poly_point",
-    .vs_vars = "attribute vec2 primitive;\n",
+    .vs_vars = "in vec2 primitive;\n",
     .vs_exec = (GLAMOR_DEFAULT_POINT_SIZE
                 GLAMOR_POS(gl_Position, primitive)),
 };
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index ea27abdd5..d8da1a0c1 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -54,6 +54,19 @@
     "       gl_PointSize = 1.0;\n"  \
     "#endif\n"
 
+#define GLAMOR_COMPAT_DEFINES_VS  \
+    "#define in attribute\n" \
+    "#define out varying\n"  \
+
+#define GLAMOR_COMPAT_DEFINES_FS  \
+    "#if __VERSION__ < 130\n" \
+    "#define in varying\n"  \
+    "#define frag_color gl_FragColor\n" \
+    "#define texture texture2D\n" \
+    "#else\n" \
+    "out vec4 frag_color;\n" \
+    "#endif\n"
+
 #include "glyphstr.h"
 
 #include "glamor_debug.h"
diff --git a/glamor/glamor_program.c b/glamor/glamor_program.c
index 9ee945d11..6f08e3211 100644
--- a/glamor/glamor_program.c
+++ b/glamor/glamor_program.c
@@ -32,7 +32,7 @@ use_solid(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
 
 const glamor_facet glamor_fill_solid = {
     .name = "solid",
-    .fs_exec = "       gl_FragColor = fg;\n",
+    .fs_exec = "       frag_color = fg;\n",
     .locations = glamor_program_location_fg,
     .use = use_solid,
 };
@@ -46,7 +46,7 @@ use_tile(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
 static const glamor_facet glamor_fill_tile = {
     .name = "tile",
     .vs_exec =  "       fill_pos = (fill_offset + primitive.xy + pos) * fill_size_inv;\n",
-    .fs_exec =  "       gl_FragColor = texture2D(sampler, fill_pos);\n",
+    .fs_exec =  "       frag_color = texture(sampler, fill_pos);\n",
     .locations = glamor_program_location_fillsamp | glamor_program_location_fillpos,
     .use = use_tile,
 };
@@ -62,10 +62,10 @@ use_stipple(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
 static const glamor_facet glamor_fill_stipple = {
     .name = "stipple",
     .vs_exec =  "       fill_pos = (fill_offset + primitive.xy + pos) * fill_size_inv;\n",
-    .fs_exec = ("       float a = texture2D(sampler, fill_pos).w;\n"
+    .fs_exec = ("       float a = texture(sampler, fill_pos).w;\n"
                 "       if (a == 0.0)\n"
                 "               discard;\n"
-                "       gl_FragColor = fg;\n"),
+                "       frag_color = fg;\n"),
     .locations = glamor_program_location_fg | glamor_program_location_fillsamp | glamor_program_location_fillpos,
     .use = use_stipple,
 };
@@ -82,11 +82,11 @@ use_opaque_stipple(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *a
 static const glamor_facet glamor_fill_opaque_stipple = {
     .name = "opaque_stipple",
     .vs_exec =  "       fill_pos = (fill_offset + primitive.xy + pos) * fill_size_inv;\n",
-    .fs_exec = ("       float a = texture2D(sampler, fill_pos).w;\n"
+    .fs_exec = ("       float a = texture(sampler, fill_pos).w;\n"
                 "       if (a == 0.0)\n"
-                "               gl_FragColor = bg;\n"
+                "               frag_color = bg;\n"
                 "       else\n"
-                "               gl_FragColor = fg;\n"),
+                "               frag_color = fg;\n"),
     .locations = glamor_program_location_fg | glamor_program_location_bg | glamor_program_location_fillsamp | glamor_program_location_fillpos,
     .use = use_opaque_stipple
 };
@@ -121,12 +121,15 @@ static glamor_location_var location_vars[] = {
         .location = glamor_program_location_fillpos,
         .vs_vars = ("uniform vec2 fill_offset;\n"
                     "uniform vec2 fill_size_inv;\n"
-                    "varying vec2 fill_pos;\n"),
-        .fs_vars = ("varying vec2 fill_pos;\n")
+                    "out vec2 fill_pos;\n"),
+        .fs_vars = ("in vec2 fill_pos;\n")
     },
     {
         .location = glamor_program_location_font,
-        .fs_vars = "uniform usampler2D font;\n",
+        .fs_vars = ("#ifdef GL_ES\n"
+                    "precision mediump usampler2D;\n"
+                    "#endif\n"
+                    "uniform usampler2D font;\n"),
     },
     {
         .location = glamor_program_location_bitplane,
@@ -188,6 +191,7 @@ fs_location_vars(glamor_program_location locations)
 static const char vs_template[] =
     "%s"                                /* version */
     "%s"                                /* exts */
+    "%s"                                /* in/out defines */
     "%s"                                /* defines */
     "%s"                                /* prim vs_vars */
     "%s"                                /* fill vs_vars */
@@ -204,6 +208,7 @@ static const char fs_template[] =
     "%s"                                /* prim fs_extensions */
     "%s"                                /* fill fs_extensions */
     GLAMOR_DEFAULT_PRECISION
+    "%s"                                /* in/out defines */
     "%s"                                /* defines */
     "%s"                                /* prim fs_vars */
     "%s"                                /* fill fs_vars */
@@ -283,11 +288,13 @@ glamor_build_program(ScreenPtr          screen,
             gpu_shader4 = TRUE;
         }
     }
-    /* For now, fix shader version to GLES as 100. We will fall with 130 shaders
-     * in previous check due to forcibly set 120 glsl for GLES. But this patch
-     * makes xv shaders to work */
-    if(version && glamor_priv->is_gles)
+
+    if (version == 130 && glamor_priv->is_gles && glamor_priv->glsl_version > 110)
+        version = 300;
+    else if (glamor_priv->is_gles)
         version = 100;
+    else if (!version)
+        version = 120;
 
     vs_vars = vs_location_vars(locations);
     fs_vars = fs_location_vars(locations);
@@ -298,7 +305,8 @@ glamor_build_program(ScreenPtr          screen,
         goto fail;
 
     if (version) {
-        if (asprintf(&version_string, "#version %d\n", version) < 0)
+        if (asprintf(&version_string, "#version %d %s\n", version,
+                     glamor_priv->is_gles && version > 100 ? "es" : "") < 0)
             version_string = NULL;
         if (!version_string)
             goto fail;
@@ -308,6 +316,7 @@ glamor_build_program(ScreenPtr          screen,
                  vs_template,
                  str(version_string),
                  gpu_shader4 ? "#extension GL_EXT_gpu_shader4 : require\n" : "",
+                 version < 130 ? GLAMOR_COMPAT_DEFINES_VS : "",
                  str(defines),
                  str(prim->vs_vars),
                  str(fill->vs_vars),
@@ -322,6 +331,7 @@ glamor_build_program(ScreenPtr          screen,
                  str(prim->fs_extensions),
                  str(fill->fs_extensions),
                  gpu_shader4 ? "#extension GL_EXT_gpu_shader4 : require\n#define texelFetch texelFetch2D\n#define uint unsigned int\n" : "",
+                 GLAMOR_COMPAT_DEFINES_FS,
                  str(defines),
                  str(prim->fs_vars),
                  str(fill->fs_vars),
@@ -563,7 +573,7 @@ use_source_picture(CARD8 op, PicturePtr src, PicturePtr dst, glamor_program *pro
 static const glamor_facet glamor_source_picture = {
     .name = "render_picture",
     .vs_exec =  "       fill_pos = (fill_offset + primitive.xy + pos) * fill_size_inv;\n",
-    .fs_exec =  "       vec4 source = texture2D(sampler, fill_pos);\n",
+    .fs_exec =  "       vec4 source = texture(sampler, fill_pos);\n",
     .locations = glamor_program_location_fillsamp | glamor_program_location_fillpos,
     .use_render = use_source_picture,
 };
@@ -579,7 +589,7 @@ use_source_1x1_picture(CARD8 op, PicturePtr src, PicturePtr dst, glamor_program
 
 static const glamor_facet glamor_source_1x1_picture = {
     .name = "render_picture",
-    .fs_exec =  "       vec4 source = texture2D(sampler, vec2(0.5));\n",
+    .fs_exec =  "       vec4 source = texture(sampler, vec2(0.5));\n",
     .locations = glamor_program_location_fillsamp,
     .use_render = use_source_1x1_picture,
 };
@@ -591,11 +601,11 @@ static const glamor_facet *glamor_facet_source[glamor_program_source_count] = {
 };
 
 static const char *glamor_combine[] = {
-    [glamor_program_alpha_normal]    = "        gl_FragColor = source * mask.a;\n",
-    [glamor_program_alpha_ca_first]  = "        gl_FragColor = source.a * mask;\n",
-    [glamor_program_alpha_ca_second] = "        gl_FragColor = source * mask;\n",
-    [glamor_program_alpha_dual_blend] = "       color0 = source * mask;\n"
-                                        "       color1 = source.a * mask;\n",
+    [glamor_program_alpha_normal]    = "       frag_color = source * mask.a;\n",
+    [glamor_program_alpha_ca_first]  = "       frag_color = source.a * mask;\n",
+    [glamor_program_alpha_ca_second] = "       frag_color = source * mask;\n",
+    [glamor_program_alpha_dual_blend] = "      color0 = source * mask;\n"
+                                        "      color1 = source.a * mask;\n",
     [glamor_program_alpha_dual_blend_gles2] = " gl_FragColor = source * mask;\n"
                                               " gl_SecondaryFragColorEXT = source.a * mask;\n"
 };
diff --git a/glamor/glamor_rects.c b/glamor/glamor_rects.c
index afe680d1b..aa05b8cef 100644
--- a/glamor/glamor_rects.c
+++ b/glamor/glamor_rects.c
@@ -28,8 +28,8 @@ static const glamor_facet glamor_facet_polyfillrect_130 = {
     .name = "poly_fill_rect",
     .version = 130,
     .source_name = "size",
-    .vs_vars = "attribute vec2 primitive;\n"
-               "attribute vec2 size;\n",
+    .vs_vars = "in vec2 primitive;\n"
+               "in vec2 size;\n",
     .vs_exec = ("       vec2 pos = size * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
                 GLAMOR_POS(gl_Position, (primitive.xy + pos))),
 };
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 0d233f27b..99c31fc2c 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -116,7 +116,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "			tex = (fract(tex) / wh.xy);\n"
         "		}\n"
         "	}\n"
-        "	return texture2D(tex_image, tex);\n"
+        "	return texture(tex_image, tex);\n"
         "}\n"
         " vec4 rel_sampler_rgbx(sampler2D tex_image, vec2 tex, vec4 wh, int repeat)\n"
         "{\n"
@@ -129,7 +129,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "			tex = (fract(tex) / wh.xy);\n"
         "		}\n"
         "	}\n"
-        "	return vec4(texture2D(tex_image, tex).rgb, 1.0);\n"
+        "	return vec4(texture(tex_image, tex).rgb, 1.0);\n"
         "}\n";
 
     const char *source_solid_fetch =
@@ -139,7 +139,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "	return source;\n"
         "}\n";
     const char *source_alpha_pixmap_fetch =
-        "varying vec2 source_texture;\n"
+        "in vec2 source_texture;\n"
         "uniform sampler2D source_sampler;\n"
         "uniform vec4 source_wh;"
         "vec4 get_source()\n"
@@ -148,7 +148,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "			        source_wh, source_repeat_mode);\n"
         "}\n";
     const char *source_pixmap_fetch =
-        "varying vec2 source_texture;\n"
+        "in vec2 source_texture;\n"
         "uniform sampler2D source_sampler;\n"
         "uniform vec4 source_wh;\n"
         "vec4 get_source()\n"
@@ -168,7 +168,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "	return mask;\n"
         "}\n";
     const char *mask_alpha_pixmap_fetch =
-        "varying vec2 mask_texture;\n"
+        "in vec2 mask_texture;\n"
         "uniform sampler2D mask_sampler;\n"
         "uniform vec4 mask_wh;\n"
         "vec4 get_mask()\n"
@@ -177,7 +177,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "			        mask_wh, mask_repeat_mode);\n"
         "}\n";
     const char *mask_pixmap_fetch =
-        "varying vec2 mask_texture;\n"
+        "in vec2 mask_texture;\n"
         "uniform sampler2D mask_sampler;\n"
         "uniform vec4 mask_wh;\n"
         "vec4 get_mask()\n"
@@ -206,17 +206,17 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
     const char *in_normal =
         "void main()\n"
         "{\n"
-        "	gl_FragColor = dest_swizzle(get_source() * get_mask().a);\n"
+        "	frag_color = dest_swizzle(get_source() * get_mask().a);\n"
         "}\n";
     const char *in_ca_source =
         "void main()\n"
         "{\n"
-        "	gl_FragColor = dest_swizzle(get_source() * get_mask());\n"
+        "	frag_color = dest_swizzle(get_source() * get_mask());\n"
         "}\n";
     const char *in_ca_alpha =
         "void main()\n"
         "{\n"
-        "	gl_FragColor = dest_swizzle(get_source().a * get_mask());\n"
+        "	frag_color = dest_swizzle(get_source().a * get_mask());\n"
         "}\n";
     const char *in_ca_dual_blend =
         "out vec4 color0;\n"
@@ -226,10 +226,6 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "	color0 = dest_swizzle(get_source() * get_mask());\n"
         "	color1 = dest_swizzle(get_source().a * get_mask());\n"
         "}\n";
-    const char *header_ca_dual_blend =
-        "#version 130\n";
-    const char *header_ca_dual_blend_gpu_shader4 =
-        "#version 120\n#extension GL_EXT_gpu_shader4 : require\n";
     const char *in_ca_dual_blend_gles2 =
         "void main()\n"
         "{\n"
@@ -238,14 +234,16 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         "}\n";
     const char *header_ca_dual_blend_gles2 =
         "#version 100\n"
-        "#extension GL_EXT_blend_func_extended : require\n";
+        "#extension GL_EXT_blend_func_extended : require\n"
+        GLAMOR_COMPAT_DEFINES_FS;
 
     char *source;
     const char *source_fetch;
     const char *mask_fetch = "";
     const char *in;
     const char *header;
-    const char *header_norm = "";
+    const char *header_norm = glamor_priv->glsl_version > 120 ? "#version 130\n" : "#version 120\n#extension GL_EXT_gpu_shader4 : require\n" GLAMOR_COMPAT_DEFINES_FS;
+    const char *header_es = glamor_priv->glsl_version > 100 ? "#version 300 es\n" : "#version 100\n" GLAMOR_COMPAT_DEFINES_FS;
     const char *dest_swizzle;
     GLuint prog;
 
@@ -298,7 +296,7 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         FatalError("Bad composite shader dest swizzle");
     }
 
-    header = header_norm;
+    header = glamor_priv->is_gles ? header_es : header_norm;
     switch (key->in) {
     case glamor_program_alpha_normal:
         in = in_normal;
@@ -311,10 +309,6 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
         break;
     case glamor_program_alpha_dual_blend:
         in = in_ca_dual_blend;
-        if (glamor_priv->glsl_version >= 130)
-           header = header_ca_dual_blend;
-        else
-           header = header_ca_dual_blend_gpu_shader4;
         break;
     case glamor_program_alpha_dual_blend_gles2:
         in = in_ca_dual_blend_gles2;
@@ -327,7 +321,8 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
     XNFasprintf(&source,
                 "%s"
                 GLAMOR_DEFAULT_PRECISION
-                "%s%s%s%s%s%s%s", header, repeat_define, relocate_texture,
+                "%s%s%s%s%s%s%s%s", header, GLAMOR_COMPAT_DEFINES_FS,
+                repeat_define, relocate_texture,
                 rel_sampler, source_fetch, mask_fetch, dest_swizzle, in);
 
     prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, source);
@@ -337,14 +332,14 @@ glamor_create_composite_fs(glamor_screen_private *glamor_priv, struct shader_key
 }
 
 static GLuint
-glamor_create_composite_vs(struct shader_key *key)
+glamor_create_composite_vs(glamor_screen_private* priv, struct shader_key *key)
 {
     const char *main_opening =
-        "attribute vec4 v_position;\n"
-        "attribute vec4 v_texcoord0;\n"
-        "attribute vec4 v_texcoord1;\n"
-        "varying vec2 source_texture;\n"
-        "varying vec2 mask_texture;\n"
+        "in vec4 v_position;\n"
+        "in vec4 v_texcoord0;\n"
+        "in vec4 v_texcoord1;\n"
+        "out vec2 source_texture;\n"
+        "out vec2 mask_texture;\n"
         "void main()\n"
         "{\n"
         "	gl_Position = v_position;\n";
@@ -354,7 +349,9 @@ glamor_create_composite_vs(struct shader_key *key)
     const char *source_coords_setup = "";
     const char *mask_coords_setup = "";
     const char *version_gles2 = "#version 100\n";
-    const char *version = "";
+    const char *version_gles3 = "#version 300 es\n";
+    const char *version = priv->glsl_version > 120 ? "#version 130\n" : "#version 120\n";
+    const char *defines = priv->glsl_version > 120 ? "": GLAMOR_COMPAT_DEFINES_VS;
     char *source;
     GLuint prog;
 
@@ -364,14 +361,17 @@ glamor_create_composite_vs(struct shader_key *key)
     if (key->mask != SHADER_MASK_NONE && key->mask != SHADER_MASK_SOLID)
         mask_coords_setup = mask_coords;
 
-    if (key->in == glamor_program_alpha_dual_blend_gles2)
+    if (priv->is_gles)
         version = version_gles2;
 
+    if (priv->is_gles && priv->glsl_version > 120)
+        version = version_gles3;
+
     XNFasprintf(&source,
                 "%s"
                 GLAMOR_DEFAULT_PRECISION
-                "%s%s%s%s",
-                version, main_opening, source_coords_setup,
+                "%s%s%s%s%s",
+                version, defines, main_opening, source_coords_setup,
                 mask_coords_setup, main_closing);
 
     prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, source);
@@ -389,7 +389,7 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key,
     glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
 
     glamor_make_current(glamor_priv);
-    vs = glamor_create_composite_vs(key);
+    vs = glamor_create_composite_vs(glamor_priv, key);
     if (vs == 0)
         return;
     fs = glamor_create_composite_fs(glamor_priv, key);
diff --git a/glamor/glamor_segs.c b/glamor/glamor_segs.c
index 78c19ec48..7b0108f83 100644
--- a/glamor/glamor_segs.c
+++ b/glamor/glamor_segs.c
@@ -27,7 +27,7 @@
 
 static const glamor_facet glamor_facet_poly_segment = {
     .name = "poly_segment",
-    .vs_vars = "attribute vec2 primitive;\n",
+    .vs_vars = "in vec2 primitive;\n",
     .vs_exec = ("       vec2 pos = vec2(0.0,0.0);\n"
                 GLAMOR_POS(gl_Position, primitive.xy)),
 };
diff --git a/glamor/glamor_spans.c b/glamor/glamor_spans.c
index dfa37dc07..93beb61d5 100644
--- a/glamor/glamor_spans.c
+++ b/glamor/glamor_spans.c
@@ -29,7 +29,7 @@ glamor_program  fill_spans_progs[4];
 static const glamor_facet glamor_facet_fillspans_130 = {
     .name = "fill_spans",
     .version = 130,
-    .vs_vars =  "attribute vec3 primitive;\n",
+    .vs_vars =  "in vec3 primitive;\n",
     .vs_exec = ("       vec2 pos = vec2(primitive.z,1) * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
                 GLAMOR_POS(gl_Position, (primitive.xy + pos))),
 };
diff --git a/glamor/glamor_text.c b/glamor/glamor_text.c
index 5343cc93b..f1672d420 100644
--- a/glamor/glamor_text.c
+++ b/glamor/glamor_text.c
@@ -221,9 +221,9 @@ glamor_text(DrawablePtr drawable, GCPtr gc,
 }
 
 static const char vs_vars_text[] =
-    "attribute vec4 primitive;\n"
-    "attribute vec2 source;\n"
-    "varying vec2 glyph_pos;\n";
+    "in vec4 primitive;\n"
+    "in vec2 source;\n"
+    "out vec2 glyph_pos;\n";
 
 static const char vs_exec_text[] =
     "       vec2 pos = primitive.zw * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
@@ -231,7 +231,7 @@ static const char vs_exec_text[] =
     "       glyph_pos = source + pos;\n";
 
 static const char fs_vars_text[] =
-    "varying vec2 glyph_pos;\n";
+    "in vec2 glyph_pos;\n";
 
 static const char fs_exec_text[] =
     "       ivec2 itile_texture = ivec2(glyph_pos);\n"
@@ -249,9 +249,9 @@ static const char fs_exec_te[] =
     "       uint texel = texelFetch(font, itile_texture, 0).x;\n"
     "       uint bit = (texel >> x) & uint(1);\n"
     "       if (bit == uint(0))\n"
-    "               gl_FragColor = bg;\n"
+    "               frag_color = bg;\n"
     "       else\n"
-    "               gl_FragColor = fg;\n";
+    "               frag_color = fg;\n";
 
 static const glamor_facet glamor_facet_poly_text = {
     .name = "poly_text",
@@ -353,7 +353,7 @@ use_image_solid(DrawablePtr drawable, GCPtr gc, glamor_program *prog, void *arg)
 
 static const glamor_facet glamor_facet_image_fill = {
     .name = "solid",
-    .fs_exec = "       gl_FragColor = fg;\n",
+    .fs_exec = "       frag_color = fg;\n",
     .locations = glamor_program_location_fg,
     .use = use_image_solid,
 };
diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index a3d6b3bc3..3467af86f 100644
--- a/glamor/glamor_xv.c
+++ b/glamor/glamor_xv.c
@@ -65,9 +65,9 @@ static const glamor_facet glamor_facet_xv_planar_2 = {
     .version = 120,
 
     .source_name = "v_texcoord0",
-    .vs_vars = ("attribute vec2 position;\n"
-                "attribute vec2 v_texcoord0;\n"
-                "varying vec2 tcs;\n"),
+    .vs_vars = ("in vec2 position;\n"
+                "in vec2 v_texcoord0;\n"
+                "out vec2 tcs;\n"),
     .vs_exec = (GLAMOR_POS(gl_Position, position)
                 "        tcs = v_texcoord0;\n"),
 
@@ -76,18 +76,18 @@ static const glamor_facet glamor_facet_xv_planar_2 = {
                 "uniform vec4 offsetyco;\n"
                 "uniform vec4 ucogamma;\n"
                 "uniform vec4 vco;\n"
-                "varying vec2 tcs;\n"),
+                "in vec2 tcs;\n"),
     .fs_exec = (
                 "        float sample;\n"
                 "        vec2 sample_uv;\n"
                 "        vec4 temp1;\n"
-                "        sample = texture2D(y_sampler, tcs).w;\n"
+                "        sample = texture(y_sampler, tcs).w;\n"
                 "        temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n"
-                "        sample_uv = texture2D(u_sampler, tcs).xy;\n"
+                "        sample_uv = texture(u_sampler, tcs).xy;\n"
                 "        temp1.xyz = ucogamma.xyz * vec3(sample_uv.x) + temp1.xyz;\n"
                 "        temp1.xyz = clamp(vco.xyz * vec3(sample_uv.y) + temp1.xyz, 0.0, 1.0);\n"
                 "        temp1.w = 1.0;\n"
-                "        gl_FragColor = temp1;\n"
+                "        frag_color = temp1;\n"
                 ),
 };
 
@@ -97,9 +97,9 @@ static const glamor_facet glamor_facet_xv_planar_3 = {
     .version = 120,
 
     .source_name = "v_texcoord0",
-    .vs_vars = ("attribute vec2 position;\n"
-                "attribute vec2 v_texcoord0;\n"
-                "varying vec2 tcs;\n"),
+    .vs_vars = ("in vec2 position;\n"
+                "in vec2 v_texcoord0;\n"
+                "out vec2 tcs;\n"),
     .vs_exec = (GLAMOR_POS(gl_Position, position)
                 "        tcs = v_texcoord0;\n"),
 
@@ -109,18 +109,18 @@ static const glamor_facet glamor_facet_xv_planar_3 = {
                 "uniform vec4 offsetyco;\n"
                 "uniform vec4 ucogamma;\n"
                 "uniform vec4 vco;\n"
-                "varying vec2 tcs;\n"),
+                "in vec2 tcs;\n"),
     .fs_exec = (
                 "        float sample;\n"
                 "        vec4 temp1;\n"
-                "        sample = texture2D(y_sampler, tcs).w;\n"
+                "        sample = texture(y_sampler, tcs).w;\n"
                 "        temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n"
-                "        sample = texture2D(u_sampler, tcs).w;\n"
+                "        sample = texture(u_sampler, tcs).w;\n"
                 "        temp1.xyz = ucogamma.xyz * vec3(sample) + temp1.xyz;\n"
-                "        sample = texture2D(v_sampler, tcs).w;\n"
+                "        sample = texture(v_sampler, tcs).w;\n"
                 "        temp1.xyz = clamp(vco.xyz * vec3(sample) + temp1.xyz, 0.0, 1.0);\n"
                 "        temp1.w = 1.0;\n"
-                "        gl_FragColor = temp1;\n"
+                "        frag_color = temp1;\n"
                 ),
 };
 
commit 8adff2891f23b1cb097a4132f39fa96667313af5
Author: Konstantin <ria.freelander at gmail.com>
Date:   Wed Sep 20 15:00:31 2023 +0300

    glamor: require GLES 2.0 on GL ES CI
    
    This will help us to catch GLES 2.0 only bugs.
    
    Signed-off-by: Konstantin <ria.freelander at gmail.com>

diff --git a/test/bugs/meson.build b/test/bugs/meson.build
index 470706d56..80eeb0750 100644
--- a/test/bugs/meson.build
+++ b/test/bugs/meson.build
@@ -43,6 +43,7 @@ if get_option('xvfb')
                     xvfb_args,
                     ':198'
                     ],
+                env: gles20_env,
                 suite: 'xephyr-glamor-gles2',
                 timeout: 300,
             )
diff --git a/test/meson.build b/test/meson.build
index 662eee4ef..c28d3c386 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -8,6 +8,11 @@ piglit_env = environment()
 piglit_env.set('XSERVER_DIR', meson.source_root())
 piglit_env.set('XSERVER_BUILDDIR', meson.build_root())
 
+gles20_env = environment()
+gles20_env.set('XSERVER_DIR', meson.source_root())
+gles20_env.set('XSERVER_BUILDDIR', meson.build_root())
+gles20_env.set('MESA_GLES_VERSION_OVERRIDE', '2.0')
+
 some_ops = ' -o clear,src,dst,over,xor,disjointover'
 gles2_working_formats = ' -f '+ ','.join(['a8',
                                           'a8r8g8b8',
@@ -31,7 +36,6 @@ rendercheck_tests_noblend = [
     ['composite/Some/x8r8g8b8', '-t composite -f a8r8g8b8,x8r8g8b8' + some_ops],
     ['composite/Some/a2r10g10b10', '-t composite -f a8r8g8b8,a2r10g10b10' + some_ops],
     ['ca composite/Some/a8r8g8b8', '-t cacomposite -f a8r8g8b8' + some_ops],
-    ['ca composite/Some/a8', '-t cacomposite -f a8r8g8b8,a8' + some_ops],
     ['ca composite/Some/x8r8g8b8', '-t cacomposite -f a8r8g8b8,x8r8g8b8' + some_ops],
     ['ca composite/Some/a2r10g10b10', '-t cacomposite -f a8r8g8b8,a2r10g10b10' + some_ops],
     ['fill', '-t fill'],
@@ -50,14 +54,22 @@ rendercheck_blend = [
     ['blend/Src', '-t blend -o src'],
     ['blend/Over', '-t blend -o over'],
 ]
+#A8 test is fail on GLES 2.0 now
+rendercheck_a8 = [
+    ['ca composite/Some/a8', '-t cacomposite -f a8r8g8b8,a8' + some_ops],
+]
 #Exclude 15bpp for now due to GLES limitation (see glamor.c:470)
 rendercheck_blend_gles2 = [
     ['blend/Clear', '-t blend -o clear' + gles2_working_formats],
+]
+#Test than should fail before !1158 merged
+rendercheck_tests_gles2_fail = [
     ['blend/Src', '-t blend -o src' + gles2_working_formats],
     ['blend/Over', '-t blend -o over' + gles2_working_formats],
+    ['ca composite/Some/a8', '-t cacomposite -f a8r8g8b8,a8' + some_ops],
 ]
-rendercheck_tests = rendercheck_blend + rendercheck_tests_noblend
-rendercheck_tests_gles2 = rendercheck_blend_gles2 + rendercheck_tests_noblend
+rendercheck_tests = rendercheck_blend + rendercheck_tests_noblend + rendercheck_a8
+rendercheck_tests_gles2_success = rendercheck_blend_gles2 + rendercheck_tests_noblend
 rendercheck = find_program('rendercheck', required:false)
 
 if get_option('xvfb')
@@ -101,7 +113,7 @@ if get_option('xvfb')
         )
         test('XTS',
             find_program('scripts/xephyr-glamor-gles2-piglit.sh'),
-            env: piglit_env,
+            env: gles20_env,
             timeout: 1200,
             suite: 'xephyr-glamor-gles2',
         )
@@ -125,7 +137,26 @@ if get_option('xvfb')
                      timeout: 300,
                     )
             endforeach
-            foreach rctest: rendercheck_tests_gles2
+            foreach rctest: rendercheck_tests_gles2_success
+                test(rctest[0],
+                     simple_xinit,
+                     args: [simple_xinit.full_path(),
+                            rendercheck.path(),
+                            rctest[1].split(' '),
+                            '----',
+                            xephyr_server.full_path(),
+                            '-glamor_gles2',
+                            '-glamor-skip-present',
+                            '-schedMax', '2000',
+                            '--',
+                            xvfb_args,
+                           ],
+                     env: gles20_env,
+                     suite: 'xephyr-glamor-gles2',
+                     timeout: 300,
+                    )
+            endforeach
+            foreach rctest: rendercheck_tests_gles2_fail
                 test(rctest[0],
                      simple_xinit,
                      args: [simple_xinit.full_path(),
@@ -139,7 +170,9 @@ if get_option('xvfb')
                             '--',
                             xvfb_args,
                            ],
+                     env: gles20_env,
                      suite: 'xephyr-glamor-gles2',
+                     should_fail: true,
                      timeout: 300,
                     )
             endforeach


More information about the xorg-commit mailing list