Re: [PATCH RESEND] xfree86: prune duplicate monitor modes.

2016-01-27 Thread Eric Anholt
Michel Dänzer  writes:

> From: Leo Liu 
>
> same monitor modes added causing memory leak
> when looping `xrandr --prop'.
>
> Signed-off-by: Leo Liu 
> Signed-off-by: Michel Dänzer 
> ---
>
> More than two years later... Can somebody pick this up?
>
>  hw/xfree86/modes/xf86EdidModes.c |   22 ++
>  1 file changed, 22 insertions(+)
>
> diff --git a/hw/xfree86/modes/xf86EdidModes.c
> b/hw/xfree86/modes/xf86EdidModes.c
> index 4ee862d..261780b 100644
> --- a/hw/xfree86/modes/xf86EdidModes.c
> +++ b/hw/xfree86/modes/xf86EdidModes.c
> @@ -1143,6 +1143,27 @@ handle_detailed_monset(struct
> detailed_monitor_section *det_mon, void *data)
>  }
>  }
>  +static void
> +xf86PruneDuplicateMonitorModes(MonPtr Monitor)
> +{
> +DisplayModePtr master, clone, next;
> +
> +for (master = Monitor->Modes;
> + master && master != Monitor->Last;
> + master = master->next) {
> +for (clone = master->next;
> + clone && clone != Monitor->Modes;
> + clone = next) {
> +next = clone->next;
> +if (xf86ModesEqual (master, clone)) {
> +if (Monitor->Last == clone)
> +Monitor->Last = clone->prev;
> +xf86DeleteMode (>Modes, clone);
> +}
> +}
> +}
> +}
> +
>  /*
>   * Fill out MonPtr with xf86MonPtr information.
>   */
> @@ -1204,5 +1225,6 @@ xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor,
> xf86MonPtr DDC)
>  Monitor->Modes = Modes;
>  Monitor->Last = Mode;
>  }
> +xf86PruneDuplicateMonitorModes(Monitor);
>  }
>  }

It looks like xf86EdidMonitorSet() is just appending the new DDC modes
to the monitor.  If you switch monitors, I think you get the DDC modes
From both.  Shouldn't we just be deleting the old M_T_DRIVER modes right
before appending?


signature.asc
Description: PGP signature
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH 3/5] xephyr: Remove DRI1

2016-01-27 Thread Eric Anholt
Adam Jackson  writes:

> This only worked if the backend server supported DRI1, which is
> stunningly unlikely these days.

Patches 1-3 are:

Reviewed-by: Eric Anholt 

I have an old branch around for doing DRI3 under Xephyr, but I'm happy
to resurrect what I need when I get around to that.


signature.asc
Description: PGP signature
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 08/19] glamor: Set up XV sampler uniforms once at program build time.

2016-01-27 Thread Eric Anholt
No sense doing it on every draw.
Signed-off-by: Eric Anholt 
---
 glamor/glamor_xv.c | 20 +++-
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index 6e1a588..5d31fee 100644
--- a/glamor/glamor_xv.c
+++ b/glamor/glamor_xv.c
@@ -114,7 +114,7 @@ static void
 glamor_init_xv_shader(ScreenPtr screen)
 {
 glamor_screen_private *glamor_priv;
-GLint fs_prog, vs_prog;
+GLint fs_prog, vs_prog, sampler_loc;
 
 glamor_priv = glamor_get_screen_private(screen);
 glamor_make_current(glamor_priv);
@@ -130,6 +130,15 @@ glamor_init_xv_shader(ScreenPtr screen)
 glBindAttribLocation(glamor_priv->xv_prog,
  GLAMOR_VERTEX_SOURCE, "v_texcoord0");
 glamor_link_glsl_prog(screen, glamor_priv->xv_prog, "xv");
+
+glUseProgram(glamor_priv->xv_prog);
+sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "y_sampler");
+glUniform1i(sampler_loc, 0);
+sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "u_sampler");
+glUniform1i(sampler_loc, 1);
+sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "v_sampler");
+glUniform1i(sampler_loc, 2);
+
 }
 
 #define ClipValue(v,min,max) ((v) < (min) ? (min) : (v) > (max) ? (max) : (v))
@@ -258,7 +267,7 @@ glamor_xv_render(glamor_port_private *port_priv)
 float uco[3], vco[3], off[3];
 float bright, cont, gamma;
 int ref = port_priv->transform_index;
-GLint uloc, sampler_loc;
+GLint uloc;
 GLfloat *v;
 char *vbo_offset;
 
@@ -329,13 +338,6 @@ glamor_xv_render(glamor_port_private *port_priv)
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
-sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "y_sampler");
-glUniform1i(sampler_loc, 0);
-sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "u_sampler");
-glUniform1i(sampler_loc, 1);
-sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "v_sampler");
-glUniform1i(sampler_loc, 2);
-
 glEnableVertexAttribArray(GLAMOR_VERTEX_POS);
 glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
 
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 15/19] glamor: Clarify some logic in RepeatFix handling.

2016-01-27 Thread Eric Anholt
wh ratios are != 1.0 only when large, so with that we can simplify
down how we end up with RepeatFix being used.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_render.c | 21 +++--
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index ec757b3..4fbf842 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -565,22 +565,15 @@ glamor_set_composite_texture(glamor_screen_private 
*glamor_priv, int unit,
  *  GLES2 doesn't support RepeatNone. We need to fix it anyway.
  *
  **/
-if (repeat_type != RepeatNone)
-repeat_type += RepeatFix;
-else if (glamor_priv->gl_flavor == GLAMOR_GL_ES2
- || glamor_pixmap_priv_is_large(pixmap_priv)) {
-if (picture->transform)
-repeat_type += RepeatFix;
-}
-if (repeat_type >= RepeatFix) {
+if (glamor_pixmap_priv_is_large(pixmap_priv) ||
+(glamor_priv->gl_flavor == GLAMOR_GL_ES2 && repeat_type == RepeatNone 
&&
+ picture->transform)) {
 glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap, pixmap_priv);
-if ((wh[0] != 1.0 || wh[1] != 1.0)
-|| (glamor_priv->gl_flavor == GLAMOR_GL_ES2
-&& repeat_type == RepeatFix))
-glUniform4fv(wh_location, 1, wh);
-else
-repeat_type -= RepeatFix;
+glUniform4fv(wh_location, 1, wh);
+
+repeat_type += RepeatFix;
 }
+
 glUniform1i(repeat_location, repeat_type);
 }
 
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 03/19] glamor: Clarify when Render fallbacks happen due to an unsupported op.

2016-01-27 Thread Eric Anholt
Signed-off-by: Eric Anholt 
---
 glamor/glamor_render.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 5712cf8..51718d1 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -1577,8 +1577,10 @@ glamor_composite(CARD8 op,
 if (!glamor_pixmap_has_fbo(dest_pixmap))
 goto fail;
 
-if (op >= ARRAY_SIZE(composite_op_info))
+if (op >= ARRAY_SIZE(composite_op_info)) {
+glamor_fallback("Unsupported composite op %x\n", op);
 goto fail;
+}
 
 if (mask && mask->componentAlpha && !glamor_priv->has_dual_blend) {
 if (op == PictOpAtop
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 09/19] glamor: Simplify XV vertex setup.

2016-01-27 Thread Eric Anholt
We were clipping the drawn rectangle to each clip box, then expanding
the box to a big triangle to avoid tearing, then drawing each triangle
to the destination through a scissor.  If we're using a scissor for
clipping, though, then we don't need to clip the drawn primitive on
the CPU in the first place.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_xv.c | 68 --
 1 file changed, 30 insertions(+), 38 deletions(-)

diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index 5d31fee..2593d47 100644
--- a/glamor/glamor_xv.c
+++ b/glamor/glamor_xv.c
@@ -343,45 +343,36 @@ glamor_xv_render(glamor_port_private *port_priv)
 
 glEnable(GL_SCISSOR_TEST);
 
-v = glamor_get_vbo_space(screen, 16 * sizeof(GLfloat) * nBox, _offset);
+v = glamor_get_vbo_space(screen, 3 * 4 * sizeof(GLfloat), _offset);
 
-for (i = 0; i < nBox; i++) {
-float off_x = box[i].x1 - port_priv->drw_x;
-float off_y = box[i].y1 - port_priv->drw_y;
-float diff_x = (float) port_priv->src_w / (float) port_priv->dst_w;
-float diff_y = (float) port_priv->src_h / (float) port_priv->dst_h;
-float srcx, srcy, srcw, srch;
-int dstx, dsty, dstw, dsth;
-GLfloat *vptr = v + (i * 8);
-GLfloat *tptr = vptr + (8 * nBox);
+/* Set up a single primitive covering the area being drawn.  We'll
+ * clip it to port_priv->clip using GL scissors instead of just
+ * emitting a GL_QUAD per box, because this way we hopefully avoid
+ * diagonal tearing between the two trangles used to rasterize a
+ * GL_QUAD.
+ */
+i = 0;
+v[i++] = v_from_x_coord_x(dst_xscale, port_priv->drw_x + dst_x_off);
+v[i++] = v_from_x_coord_y(dst_yscale, port_priv->drw_y + dst_y_off);
 
-dstx = box[i].x1 + dst_x_off;
-dsty = box[i].y1 + dst_y_off;
-dstw = box[i].x2 - box[i].x1;
-dsth = box[i].y2 - box[i].y1;
+v[i++] = v_from_x_coord_x(dst_xscale, port_priv->drw_x + dst_x_off +
+  port_priv->dst_w * 2);
+v[i++] = v_from_x_coord_y(dst_yscale, port_priv->drw_y + dst_y_off);
 
-srcx = port_priv->src_x + off_x * diff_x;
-srcy = port_priv->src_y + off_y * diff_y;
-srcw = (port_priv->src_w * dstw) / (float) port_priv->dst_w;
-srch = (port_priv->src_h * dsth) / (float) port_priv->dst_h;
-
-glamor_set_normalize_vcoords(pixmap_priv,
- dst_xscale, dst_yscale,
- dstx - dstw,
- dsty,
- dstx + dstw,
- dsty + dsth * 2,
- vptr);
-
-glamor_set_normalize_tcoords(src_pixmap_priv[0],
- src_xscale[0],
- src_yscale[0],
- srcx - srcw,
- srcy,
- srcx + srcw,
- srcy + srch * 2,
- tptr);
-}
+v[i++] = v_from_x_coord_x(dst_xscale, port_priv->drw_x + dst_x_off);
+v[i++] = v_from_x_coord_y(dst_yscale, port_priv->drw_y + dst_y_off +
+  port_priv->dst_h * 2);
+
+v[i++] = t_from_x_coord_x(src_xscale[0], port_priv->src_x);
+v[i++] = t_from_x_coord_y(src_yscale[0], port_priv->src_y);
+
+v[i++] = t_from_x_coord_x(src_xscale[0], port_priv->src_x +
+  port_priv->src_w * 2);
+v[i++] = t_from_x_coord_y(src_yscale[0], port_priv->src_y);
+
+v[i++] = t_from_x_coord_x(src_xscale[0], port_priv->src_x);
+v[i++] = t_from_x_coord_y(src_yscale[0], port_priv->src_y +
+  port_priv->src_h * 2);
 
 glVertexAttribPointer(GLAMOR_VERTEX_POS, 2,
   GL_FLOAT, GL_FALSE,
@@ -389,10 +380,11 @@ glamor_xv_render(glamor_port_private *port_priv)
 
 glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2,
   GL_FLOAT, GL_FALSE,
-  2 * sizeof(float), vbo_offset + (nBox * 8 * 
sizeof(GLfloat)));
+  2 * sizeof(float), vbo_offset + 6 * sizeof(GLfloat));
 
 glamor_put_vbo_space(screen);
 
+/* Now draw our big triangle, clipped to each of the clip boxes. */
 for (i = 0; i < nBox; i++) {
 int dstx, dsty, dstw, dsth;
 
@@ -402,7 +394,7 @@ glamor_xv_render(glamor_port_private *port_priv)
 dsth = box[i].y2 - box[i].y1;
 
 glScissor(dstx, dsty, dstw, dsth);
-glDrawArrays(GL_TRIANGLE_FAN, i * 4, 3);
+glDrawArrays(GL_TRIANGLE_FAN, 0, 3);
 }
 glDisable(GL_SCISSOR_TEST);
 
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: 

[PATCH xserver 02/19] glamor: Label programs before linking them.

2016-01-27 Thread Eric Anholt
i965 does most of its compiling at link time, so our debug output for
its shaders didn't have the name on.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_core.c | 22 +++---
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/glamor/glamor_core.c b/glamor/glamor_core.c
index 0104b88..b9948b5 100644
--- a/glamor/glamor_core.c
+++ b/glamor/glamor_core.c
@@ -87,6 +87,17 @@ glamor_link_glsl_prog(ScreenPtr screen, GLint prog, const 
char *format, ...)
 GLint ok;
 glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
 
+if (glamor_priv->has_khr_debug) {
+char *label;
+va_list va;
+
+va_start(va, format);
+XNFvasprintf(, format, va);
+glObjectLabel(GL_PROGRAM, prog, -1, label);
+free(label);
+va_end(va);
+}
+
 glLinkProgram(prog);
 glGetProgramiv(prog, GL_LINK_STATUS, );
 if (!ok) {
@@ -100,17 +111,6 @@ glamor_link_glsl_prog(ScreenPtr screen, GLint prog, const 
char *format, ...)
 ErrorF("Failed to link: %s\n", info);
 FatalError("GLSL link failure\n");
 }
-
-if (glamor_priv->has_khr_debug) {
-char *label;
-va_list va;
-
-va_start(va, format);
-XNFvasprintf(, format, va);
-glObjectLabel(GL_PROGRAM, prog, -1, label);
-free(label);
-va_end(va);
-}
 }
 
 /*
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 18/19] glamor: Cut down a bunch of conditional handling for RepeatFix.

2016-01-27 Thread Eric Anholt
For hardware that doesn't do actual jumps for conditionals (i915,
current vc4 driver), this reduces the number of texture fetches
performed (assuming the driver isn't really smart about noticing that
the same sampler is used on each side of an if).

No performance difference on i965 with x11perf -magpixwin100 (n=40).

Signed-off-by: Eric Anholt 
---
 glamor/glamor_render.c | 50 +++---
 1 file changed, 19 insertions(+), 31 deletions(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index ed425f5..da45920 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -105,19 +105,18 @@ glamor_create_composite_fs(struct shader_key *key)
 /* The texture and the pixmap size is not match eaxctly, so can't sample 
it directly.
  * rel_sampler will recalculate the texture coords.*/
 const char *rel_sampler =
-" vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, 
int set_alpha)\n"
+" vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int 
repeat)\n"
 "{\n"
-"  tex = rel_tex_coord(tex, wh, repeat);\n"
-"  if (repeat == RepeatFix + RepeatNone) {\n"
-"  if (!(tex.x >= 0.0 && tex.x < 1.0 \n"
-"  && tex.y >= 0.0 && tex.y < 1.0))\n"
-"  return vec4(0.0, 0.0, 0.0, set_alpha);\n"
-"  tex = (fract(tex) / wh.xy);\n"
+"  if (repeat >= RepeatFix) {\n"
+"  tex = rel_tex_coord(tex, wh, repeat);\n"
+"  if (repeat == RepeatFix + RepeatNone) {\n"
+"  if (!(tex.x >= 0.0 && tex.x < 1.0 && \n"
+"tex.y >= 0.0 && tex.y < 1.0))\n"
+"  return vec4(0.0, 0.0, 0.0, 0.0);\n"
+"  tex = (fract(tex) / wh.xy);\n"
+"  }\n"
 "  }\n"
-"  if (set_alpha != 1)\n"
-"  return texture2D(tex_image, tex);\n"
-"  else\n"
-"  return vec4(texture2D(tex_image, tex).rgb, 1.0);\n"
+"  return texture2D(tex_image, tex);\n"
 "}\n";
 
 const char *source_solid_fetch =
@@ -132,11 +131,8 @@ glamor_create_composite_fs(struct shader_key *key)
 "uniform vec4 source_wh;"
 "vec4 get_source()\n"
 "{\n"
-"  if (source_repeat_mode < RepeatFix)\n"
-"  return texture2D(source_sampler, source_texture);\n"
-"  else \n"
-"  return rel_sampler(source_sampler, source_texture,\n"
-" source_wh, source_repeat_mode, 0);\n"
+"  return rel_sampler(source_sampler, source_texture,\n"
+" source_wh, source_repeat_mode);\n"
 "}\n";
 const char *source_pixmap_fetch =
 "varying vec2 source_texture;\n"
@@ -144,11 +140,9 @@ glamor_create_composite_fs(struct shader_key *key)
 "uniform vec4 source_wh;\n"
 "vec4 get_source()\n"
 "{\n"
-"  if (source_repeat_mode < RepeatFix) \n"
-"  return vec4(texture2D(source_sampler, 
source_texture).rgb, 1);\n"
-"  else \n"
-"  return rel_sampler(source_sampler, source_texture,\n"
-" source_wh, source_repeat_mode, 1);\n"
+"  return vec4(rel_sampler(source_sampler, source_texture,\n"
+"  source_wh, source_repeat_mode).rgb,\n"
+"  1.0);\n"
 "}\n";
 const char *mask_none =
 "vec4 get_mask()\n"
@@ -167,11 +161,8 @@ glamor_create_composite_fs(struct shader_key *key)
 "uniform vec4 mask_wh;\n"
 "vec4 get_mask()\n"
 "{\n"
-"  if (mask_repeat_mode < RepeatFix) \n"
-"  return texture2D(mask_sampler, mask_texture);\n"
-"  else \n"
-"  return rel_sampler(mask_sampler, mask_texture,\n"
-" mask_wh, mask_repeat_mode, 0);\n"
+"  return rel_sampler(mask_sampler, mask_texture,\n"
+" mask_wh, mask_repeat_mode);\n"
 "}\n";
 const char *mask_pixmap_fetch =
 "varying vec2 mask_texture;\n"
@@ -179,11 +170,8 @@ glamor_create_composite_fs(struct shader_key *key)
 "uniform vec4 mask_wh;\n"
 "vec4 get_mask()\n"
 "{\n"
-"  if (mask_repeat_mode < RepeatFix) \n"
-"  return vec4(texture2D(mask_sampler, mask_texture).rgb, 
1);\n"
-"  else \n"
-"  return rel_sampler(mask_sampler, mask_texture,\n"
-" mask_wh, mask_repeat_mode, 1);\n"
+"  return vec4(rel_sampler(mask_sampler, mask_texture,\n"
+"

[PATCH xserver 14/19] glamor: Drop extra conditionals for large pixmap handling.

2016-01-27 Thread Eric Anholt
For a small pixmap, it's got a box from 0,0 to width/height, so we can
always use that.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_utils.h | 18 --
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 5128a33..f20d520 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -56,13 +56,8 @@
 
 #define PIXMAP_PRIV_GET_ACTUAL_SIZE(pixmap, priv, w, h)  \
   do { \
-   if (_X_UNLIKELY(glamor_pixmap_priv_is_large(priv))) {   \
-   w = priv->box.x2 - priv->box.x1;\
-   h = priv->box.y2 - priv->box.y1;\
-   } else {\
-   w = (pixmap)->drawable.width;   \
-   h = (pixmap)->drawable.height;  \
-   }   \
+  w = priv->box.x2 - priv->box.x1;  \
+  h = priv->box.y2 - priv->box.y1;  \
   } while(0)
 
 #define glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap, priv) \
@@ -77,13 +72,8 @@
 
 #define pixmap_priv_get_fbo_off(_priv_, _xoff_, _yoff_)\
do {\
-if (_X_UNLIKELY(_priv_ && glamor_pixmap_priv_is_large(_priv_))) { \
-   *(_xoff_) = - (_priv_)->box.x1; \
-   *(_yoff_) = - (_priv_)->box.y1; \
-   } else {\
-   *(_xoff_) = 0;  \
-   *(_yoff_) = 0;  \
-   }   \
+   *(_xoff_) = - (_priv_)->box.x1; \
+   *(_yoff_) = - (_priv_)->box.y1; \
} while(0)
 
 #define xFixedToFloat(_val_) ((float)xFixedToInt(_val_)
\
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 01/19] ephyr: Make sure we have GLX_ARB_create_context before calling it.

2016-01-27 Thread Eric Anholt
This should fix aborts()s from epoxy on old software stacks.

Signed-off-by: Eric Anholt 
---
 hw/kdrive/ephyr/ephyr_glamor_glx.c | 34 --
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/hw/kdrive/ephyr/ephyr_glamor_glx.c 
b/hw/kdrive/ephyr/ephyr_glamor_glx.c
index 0981144..636150d 100644
--- a/hw/kdrive/ephyr/ephyr_glamor_glx.c
+++ b/hw/kdrive/ephyr/ephyr_glamor_glx.c
@@ -330,20 +330,26 @@ ephyr_glamor_glx_screen_init(xcb_window_t win)
"GLX_EXT_create_context_es2_profile\n");
 }
 } else {
-static const int context_attribs[] = {
-GLX_CONTEXT_PROFILE_MASK_ARB,
-GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
-GLX_CONTEXT_MAJOR_VERSION_ARB,
-GLAMOR_GL_CORE_VER_MAJOR,
-GLX_CONTEXT_MINOR_VERSION_ARB,
-GLAMOR_GL_CORE_VER_MINOR,
-0,
-};
-oldErrorHandler = XSetErrorHandler(ephyr_glx_error_handler);
-ctx = glXCreateContextAttribsARB(dpy, fb_config, NULL, True,
- context_attribs);
-XSync(dpy, False);
-XSetErrorHandler(oldErrorHandler);
+if (epoxy_has_glx_extension(dpy, DefaultScreen(dpy),
+"GLX_ARB_create_context")) {
+static const int context_attribs[] = {
+GLX_CONTEXT_PROFILE_MASK_ARB,
+GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
+GLX_CONTEXT_MAJOR_VERSION_ARB,
+GLAMOR_GL_CORE_VER_MAJOR,
+GLX_CONTEXT_MINOR_VERSION_ARB,
+GLAMOR_GL_CORE_VER_MINOR,
+0,
+};
+oldErrorHandler = XSetErrorHandler(ephyr_glx_error_handler);
+ctx = glXCreateContextAttribsARB(dpy, fb_config, NULL, True,
+ context_attribs);
+XSync(dpy, False);
+XSetErrorHandler(oldErrorHandler);
+} else {
+ctx = NULL;
+}
+
 if (!ctx)
 ctx = glXCreateContext(dpy, visual_info, NULL, True);
 }
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 19/19] glamor: Flip around conditionals in RepeatNone fixups.

2016-01-27 Thread Eric Anholt
Signed-off-by: Eric Anholt 
---
 glamor/glamor_render.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index da45920..73ac831 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -110,8 +110,8 @@ glamor_create_composite_fs(struct shader_key *key)
 "  if (repeat >= RepeatFix) {\n"
 "  tex = rel_tex_coord(tex, wh, repeat);\n"
 "  if (repeat == RepeatFix + RepeatNone) {\n"
-"  if (!(tex.x >= 0.0 && tex.x < 1.0 && \n"
-"tex.y >= 0.0 && tex.y < 1.0))\n"
+"  if (tex.x < 0.0 || tex.x >= 1.0 || \n"
+"  tex.y < 0.0 || tex.y >= 1.0)\n"
 "  return vec4(0.0, 0.0, 0.0, 0.0);\n"
 "  tex = (fract(tex) / wh.xy);\n"
 "  }\n"
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 12/19] glamor: Reuse the glamor_program_alpha_* enums for Render.

2016-01-27 Thread Eric Anholt
This is a step toward using glamor_program.c for Render acceleration.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_priv.h   | 12 ++--
 glamor/glamor_render.c | 28 ++--
 2 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index b70533a..60b0a66 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -107,14 +107,6 @@ enum shader_mask {
 SHADER_MASK_COUNT,
 };
 
-enum shader_in {
-SHADER_IN_NORMAL,
-SHADER_IN_CA_SOURCE,
-SHADER_IN_CA_ALPHA,
-SHADER_IN_CA_DUAL_BLEND,
-SHADER_IN_COUNT,
-};
-
 enum shader_dest_swizzle {
 SHADER_DEST_SWIZZLE_DEFAULT,
 SHADER_DEST_SWIZZLE_ALPHA_TO_RED,
@@ -124,7 +116,7 @@ enum shader_dest_swizzle {
 struct shader_key {
 enum shader_source source;
 enum shader_mask mask;
-enum shader_in in;
+glamor_program_alpha in;
 enum shader_dest_swizzle dest_swizzle;
 };
 
@@ -291,7 +283,7 @@ typedef struct glamor_screen_private {
 int render_nr_quads;
 glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT]
 [SHADER_MASK_COUNT]
-[SHADER_IN_COUNT]
+[glamor_program_alpha_count]
 [SHADER_DEST_SWIZZLE_COUNT];
 
 /* shaders to restore a texture to another texture. */
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index d1b7a15..ec757b3 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -278,16 +278,16 @@ glamor_create_composite_fs(struct shader_key *key)
 
 header = header_norm;
 switch (key->in) {
-case SHADER_IN_NORMAL:
+case glamor_program_alpha_normal:
 in = in_normal;
 break;
-case SHADER_IN_CA_SOURCE:
+case glamor_program_alpha_ca_first:
 in = in_ca_source;
 break;
-case SHADER_IN_CA_ALPHA:
+case glamor_program_alpha_ca_second:
 in = in_ca_alpha;
 break;
-case SHADER_IN_CA_DUAL_BLEND:
+case glamor_program_alpha_dual_blend:
 in = in_ca_dual_blend;
 header = header_ca_dual_blend;
 break;
@@ -368,7 +368,7 @@ glamor_create_composite_shader(ScreenPtr screen, struct 
shader_key *key,
 glBindAttribLocation(prog, GLAMOR_VERTEX_SOURCE, "v_texcoord0");
 glBindAttribLocation(prog, GLAMOR_VERTEX_MASK, "v_texcoord1");
 
-if (key->in == SHADER_IN_CA_DUAL_BLEND) {
+if (key->in == glamor_program_alpha_dual_blend) {
 glBindFragDataLocationIndexed(prog, 0, 0, "color0");
 glBindFragDataLocationIndexed(prog, 0, 1, "color1");
 }
@@ -674,7 +674,7 @@ static const int pict_format_combine_tab[][3] = {
 
 static Bool
 combine_pict_format(PictFormatShort * des, const PictFormatShort src,
-const PictFormatShort mask, enum shader_in in_ca)
+const PictFormatShort mask, glamor_program_alpha in_ca)
 {
 PictFormatShort new_vis;
 int src_type, mask_type, src_bpp;
@@ -691,19 +691,19 @@ combine_pict_format(PictFormatShort * des, const 
PictFormatShort src,
 new_vis = PICT_FORMAT_VIS(src) | PICT_FORMAT_VIS(mask);
 
 switch (in_ca) {
-case SHADER_IN_NORMAL:
+case glamor_program_alpha_normal:
 src_type = PICT_FORMAT_TYPE(src);
 mask_type = PICT_TYPE_A;
 break;
-case SHADER_IN_CA_SOURCE:
+case glamor_program_alpha_ca_first:
 src_type = PICT_FORMAT_TYPE(src);
 mask_type = PICT_FORMAT_TYPE(mask);
 break;
-case SHADER_IN_CA_ALPHA:
+case glamor_program_alpha_ca_second:
 src_type = PICT_TYPE_A;
 mask_type = PICT_FORMAT_TYPE(mask);
 break;
-case SHADER_IN_CA_DUAL_BLEND:
+case glamor_program_alpha_dual_blend:
 src_type = PICT_FORMAT_TYPE(src);
 mask_type = PICT_FORMAT_TYPE(mask);
 break;
@@ -867,19 +867,19 @@ glamor_composite_choose_shader(CARD8 op,
 }
 
 if (!mask->componentAlpha) {
-key.in = SHADER_IN_NORMAL;
+key.in = glamor_program_alpha_normal;
 }
 else {
 if (op == PictOpClear)
 key.mask = SHADER_MASK_NONE;
 else if (glamor_priv->has_dual_blend)
-key.in = SHADER_IN_CA_DUAL_BLEND;
+key.in = glamor_program_alpha_dual_blend;
 else if (op == PictOpSrc || op == PictOpAdd
  || op == PictOpIn || op == PictOpOut
  || op == PictOpOverReverse)
-key.in = SHADER_IN_CA_SOURCE;
+key.in = glamor_program_alpha_ca_second;
 else if (op == PictOpOutReverse || op == PictOpInReverse) {
-key.in = SHADER_IN_CA_ALPHA;
+key.in = glamor_program_alpha_ca_first;
 }
 else {
 glamor_fallback("Unsupported component alpha op: %d\n", op);
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: 

[PATCH xserver 10/19] glamor: Convert XV to using glamor_program.c.

2016-01-27 Thread Eric Anholt
One less custom path!  By following the common glamor_program.c use
pattern, we get the ability to handle large pixmaps as the
destination.  It's also one less place where glamor_utils.h coordinate
transformation happens.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_priv.h |   2 +-
 glamor/glamor_xv.c   | 147 ---
 2 files changed, 71 insertions(+), 78 deletions(-)

diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index f1eed5b..d78db7f 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -318,7 +318,7 @@ typedef struct glamor_screen_private {
 Bool logged_any_fbo_allocation_failure;
 
 /* xv */
-GLint xv_prog;
+glamor_program xv_prog;
 
 struct glamor_context ctx;
 } glamor_screen_private;
diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index 2593d47..e8c849d 100644
--- a/glamor/glamor_xv.c
+++ b/glamor/glamor_xv.c
@@ -37,6 +37,7 @@
 #endif
 
 #include "glamor_priv.h"
+#include "glamor_transform.h"
 #include "glamor_transfer.h"
 
 #include 
@@ -58,36 +59,36 @@ typedef struct tagREF_TRANSFORM {
 #define RTFContrast(a)   (1.0 + ((a)*1.0)/1000.0)
 #define RTFHue(a)   (((a)*3.1416)/1000.0)
 
-static const char *xv_vs = "attribute vec4 v_position;\n"
-"attribute vec4 v_texcoord0;\n"
-"varying vec2 tcs;\n"
-"void main()\n"
-"{\n"
-" gl_Position = v_position;\n"
-"tcs = v_texcoord0.xy;\n"
-"}\n";
-
-static const char *xv_ps = GLAMOR_DEFAULT_PRECISION
-"uniform sampler2D y_sampler;\n"
-"uniform sampler2D u_sampler;\n"
-"uniform sampler2D v_sampler;\n"
-"uniform vec4 offsetyco;\n"
-"uniform vec4 ucogamma;\n"
-"uniform vec4 vco;\n"
-"varying vec2 tcs;\n"
-"float sample;\n"
-"vec4 temp1;\n"
-"void main()\n"
-"{\n"
-"sample = texture2D(y_sampler, tcs).w;\n"
-"temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n"
-"sample = texture2D(u_sampler, tcs).w;\n"
-"temp1.xyz = ucogamma.xyz * vec3(sample) + temp1.xyz;\n"
-"sample = texture2D(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"
-"}\n";
+static const glamor_facet glamor_facet_xv_planar = {
+.name = "xv_planar",
+
+.source_name = "v_texcoord0",
+.vs_vars = ("attribute vec2 position;\n"
+"attribute vec2 v_texcoord0;\n"
+"varying vec2 tcs;\n"),
+.vs_exec = (GLAMOR_POS(gl_Position, position)
+"tcs = v_texcoord0;\n"),
+
+.fs_vars = ("uniform sampler2D y_sampler;\n"
+"uniform sampler2D u_sampler;\n"
+"uniform sampler2D v_sampler;\n"
+"uniform vec4 offsetyco;\n"
+"uniform vec4 ucogamma;\n"
+"uniform vec4 vco;\n"
+"varying vec2 tcs;\n"),
+.fs_exec = (
+"float sample;\n"
+"vec4 temp1;\n"
+"sample = texture2D(y_sampler, tcs).w;\n"
+"temp1.xyz = offsetyco.www * vec3(sample) + 
offsetyco.xyz;\n"
+"sample = texture2D(u_sampler, tcs).w;\n"
+"temp1.xyz = ucogamma.xyz * vec3(sample) + 
temp1.xyz;\n"
+"sample = texture2D(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"
+),
+};
 
 #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
 
@@ -113,30 +114,19 @@ int glamor_xv_num_images = ARRAY_SIZE(glamor_xv_images);
 static void
 glamor_init_xv_shader(ScreenPtr screen)
 {
-glamor_screen_private *glamor_priv;
-GLint fs_prog, vs_prog, sampler_loc;
-
-glamor_priv = glamor_get_screen_private(screen);
-glamor_make_current(glamor_priv);
-glamor_priv->xv_prog = glCreateProgram();
-
-vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xv_vs);
-fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xv_ps);
-glAttachShader(glamor_priv->xv_prog, vs_prog);
-glAttachShader(glamor_priv->xv_prog, fs_prog);
+glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
+GLint sampler_loc;
 
-glBindAttribLocation(glamor_priv->xv_prog,
- GLAMOR_VERTEX_POS, "v_position");
-glBindAttribLocation(glamor_priv->xv_prog,
- GLAMOR_VERTEX_SOURCE, "v_texcoord0");
-glamor_link_glsl_prog(screen, glamor_priv->xv_prog, "xv");
+glamor_build_program(screen,
+ _priv->xv_prog,
+ _facet_xv_planar, NULL, NULL, NULL);
 
-glUseProgram(glamor_priv->xv_prog);
-sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "y_sampler");
+glUseProgram(glamor_priv->xv_prog.prog);
+sampler_loc = 

[PATCH xserver 11/19] glamor: Drop extra SHADER_IN type for no mask present.

2016-01-27 Thread Eric Anholt
We can just hand in a constant mask and the driver will optimize away
the multiplication for us.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_priv.h   |  1 -
 glamor/glamor_render.c | 17 ++---
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index d78db7f..b70533a 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -108,7 +108,6 @@ enum shader_mask {
 };
 
 enum shader_in {
-SHADER_IN_SOURCE_ONLY,
 SHADER_IN_NORMAL,
 SHADER_IN_CA_SOURCE,
 SHADER_IN_CA_ALPHA,
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 51718d1..d1b7a15 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -147,6 +147,11 @@ glamor_create_composite_fs(struct shader_key *key)
 "  return rel_sampler(source_sampler, source_texture,\n"
 " source_wh, source_repeat_mode, 1);\n"
 "}\n";
+const char *mask_none =
+"vec4 get_mask()\n"
+"{\n"
+"  return vec4(0.0, 0.0, 0.0, 1.0);\n"
+"}\n";
 const char *mask_solid_fetch =
 "uniform vec4 mask;\n"
 "vec4 get_mask()\n"
@@ -190,11 +195,6 @@ glamor_create_composite_fs(struct shader_key *key)
 "  return vec4(color.a, undef, undef, undef);"
 "}";
 
-const char *in_source_only =
-"void main()\n"
-"{\n"
-"  gl_FragColor = dest_swizzle(get_source());\n"
-"}\n";
 const char *in_normal =
 "void main()\n"
 "{\n"
@@ -246,6 +246,7 @@ glamor_create_composite_fs(struct shader_key *key)
 
 switch (key->mask) {
 case SHADER_MASK_NONE:
+mask_fetch = mask_none;
 break;
 case SHADER_MASK_SOLID:
 mask_fetch = mask_solid_fetch;
@@ -277,9 +278,6 @@ glamor_create_composite_fs(struct shader_key *key)
 
 header = header_norm;
 switch (key->in) {
-case SHADER_IN_SOURCE_ONLY:
-in = in_source_only;
-break;
 case SHADER_IN_NORMAL:
 in = in_normal;
 break;
@@ -693,8 +691,6 @@ combine_pict_format(PictFormatShort * des, const 
PictFormatShort src,
 new_vis = PICT_FORMAT_VIS(src) | PICT_FORMAT_VIS(mask);
 
 switch (in_ca) {
-case SHADER_IN_SOURCE_ONLY:
-return TRUE;
 case SHADER_IN_NORMAL:
 src_type = PICT_FORMAT_TYPE(src);
 mask_type = PICT_TYPE_A;
@@ -893,7 +889,6 @@ glamor_composite_choose_shader(CARD8 op,
 }
 else {
 key.mask = SHADER_MASK_NONE;
-key.in = SHADER_IN_SOURCE_ONLY;
 }
 
 if (dest_pixmap->drawable.bitsPerPixel <= 8 &&
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 00/19] glamor: Cleanups all over

2016-01-27 Thread Eric Anholt
I've been working on vc4 X performance again, particularly looking at
dragging windows with xcompmgr -c running.  I'll be sending a separate
patch to accelerate a8 rendering on GLES2-class renderers, but even
with that things are crazy slow.  I think at this point the major
problem is the crazy mass of code from rel_sampler().

This series was some cleanups as I worked toward that, and finally one
patch that should reduce the cost of rel_sampler on non-control-flow
hardware (I see fewer texture sampler requests on vc4).  No
performance change on i965, but I hope that vc4 is in better shape
after it.  (I'm away from the hardware at the moment, but should test
later today).

Eric Anholt (19):
  ephyr: Make sure we have GLX_ARB_create_context before calling it.
  glamor: Label programs before linking them.
  glamor: Clarify when Render fallbacks happen due to an unsupported op.
  glamor: Drop dead *_from_x_coord_y() functions.
  glamor: Rename the *y_inverted helpers to not say "inverted".
  glamor: Drop comment about dead yInverted flag.
  glamor: Drop dead glamor_pict_format_is_compatible().
  glamor: Set up XV sampler uniforms once at program build time.
  glamor: Simplify XV vertex setup.
  glamor: Convert XV to using glamor_program.c.
  glamor: Drop extra SHADER_IN type for no mask present.
  glamor: Reuse the glamor_program_alpha_* enums for Render.
  glamor: Simplify the pixmap box looping.
  glamor: Drop extra conditionals for large pixmap handling.
  glamor: Clarify some logic in RepeatFix handling.
  glamor: Clean up formatting of RepeatFix shader code.
  glamor: Clarify how the repeat values being passed around work.
  glamor: Cut down a bunch of conditional handling for RepeatFix.
  glamor: Flip around conditionals in RepeatNone fixups.

 glamor/glamor_composite_glyphs.c   |  10 +-
 glamor/glamor_copy.c   |  15 +--
 glamor/glamor_core.c   |  22 ++--
 glamor/glamor_dash.c   |   6 +-
 glamor/glamor_glyphblt.c   |  12 +--
 glamor/glamor_lines.c  |   6 +-
 glamor/glamor_points.c |   7 +-
 glamor/glamor_priv.h   |  35 +++---
 glamor/glamor_rects.c  |   7 +-
 glamor/glamor_render.c | 161 +---
 glamor/glamor_segs.c   |   6 +-
 glamor/glamor_spans.c  |  23 ++--
 glamor/glamor_text.c   |   8 +-
 glamor/glamor_transfer.c   |  16 +--
 glamor/glamor_transform.c  |   9 +-
 glamor/glamor_transform.h  |   3 +-
 glamor/glamor_utils.h  |  70 
 glamor/glamor_xv.c | 213 +
 hw/kdrive/ephyr/ephyr_glamor_glx.c |  34 +++---
 19 files changed, 298 insertions(+), 365 deletions(-)

-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 04/19] glamor: Drop dead *_from_x_coord_y() functions.

2016-01-27 Thread Eric Anholt
They've been dead since the yInverted removal
(e310387f443b6333edf02c8980daa303505382b4).

Signed-off-by: Eric Anholt 
---
 glamor/glamor_utils.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index d4366c1..875c935 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -36,10 +36,8 @@
 #include "mipict.h"
 
 #define v_from_x_coord_x(_xscale_, _x_)  ( 2 * (_x_) * (_xscale_) - 
1.0)
-#define v_from_x_coord_y(_yscale_, _y_)  (-2 * (_y_) * (_yscale_) + 
1.0)
 #define v_from_x_coord_y_inverted(_yscale_, _y_) (2 * (_y_) * (_yscale_) - 1.0)
 #define t_from_x_coord_x(_xscale_, _x_)  ((_x_) * (_xscale_))
-#define t_from_x_coord_y(_yscale_, _y_)  (1.0 - (_y_) * (_yscale_))
 #define t_from_x_coord_y_inverted(_yscale_, _y_) ((_y_) * (_yscale_))
 
 #define pixmap_priv_get_dest_scale(pixmap, _pixmap_priv_, _pxscale_, 
_pyscale_) \
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 16/19] glamor: Clean up formatting of RepeatFix shader code.

2016-01-27 Thread Eric Anholt
All sorts of weird indentation, and some cuddled conditional
statements deep in the if tree.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_render.c | 57 ++
 1 file changed, 30 insertions(+), 27 deletions(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 4fbf842..a2a7f4a 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -74,30 +74,33 @@ glamor_create_composite_fs(struct shader_key *key)
 const char *relocate_texture =
 "vec2 rel_tex_coord(vec2 texture, vec4 wh, int repeat) \n"
 "{\n"
-"   vec2 rel_tex; \n"
-"   rel_tex = texture * wh.xy; \n"
+"  vec2 rel_tex; \n"
+"  rel_tex = texture * wh.xy; \n"
 "  if (repeat == RepeatNone)\n"
 "  return rel_tex; \n"
-"   else if (repeat == RepeatNormal) \n"
-"  rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy);\n"
-"   else if(repeat == RepeatPad) { \n"
-"   if (rel_tex.x >= 1.0) rel_tex.x = 1.0 - wh.z * wh.x / 2.;  
\n"
-"  else if(rel_tex.x < 0.0) rel_tex.x = 0.0;   
\n"
-"   if (rel_tex.y >= 1.0) rel_tex.y = 1.0 - wh.w * wh.y / 2.;  
\n"
-"  else if(rel_tex.y < 0.0) rel_tex.y = 0.0;   \n"
-"  rel_tex = rel_tex / wh.xy; \n"
-"} \n"
-"   else if(repeat == RepeatReflect) {\n"
+"  else if (repeat == RepeatNormal) \n"
+"  rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy); \n"
+"  else if (repeat == RepeatPad) { \n"
+"  if (rel_tex.x >= 1.0) \n"
+"  rel_tex.x = 1.0 - wh.z * wh.x / 2.; \n"
+"  else if (rel_tex.x < 0.0) \n"
+"  rel_tex.x = 0.0; \n"
+"  if (rel_tex.y >= 1.0) \n"
+"  rel_tex.y = 1.0 - wh.w * wh.y / 2.; \n"
+"  else if (rel_tex.y < 0.0) \n"
+"  rel_tex.y = 0.0; \n"
+"  rel_tex = rel_tex / wh.xy; \n"
+"  } else if (repeat == RepeatReflect) {\n"
 "  if ((1.0 - mod(abs(floor(rel_tex.x)), 2.0)) < 0.001)\n"
-"  rel_tex.x = 2.0 - (1.0 - 
fract(rel_tex.x))/wh.x;\n"
+"  rel_tex.x = 2.0 - (1.0 - fract(rel_tex.x)) / 
wh.x;\n"
 "  else \n"
-"  rel_tex.x = fract(rel_tex.x)/wh.x;\n"
+"  rel_tex.x = fract(rel_tex.x) / wh.x;\n"
 "  if ((1.0 - mod(abs(floor(rel_tex.y)), 2.0)) < 0.001)\n"
-"  rel_tex.y = 2.0 - (1.0 - 
fract(rel_tex.y))/wh.y;\n"
+"  rel_tex.y = 2.0 - (1.0 - fract(rel_tex.y)) / 
wh.y;\n"
 "  else \n"
-"  rel_tex.y = fract(rel_tex.y)/wh.y;\n"
-"} \n"
-"   return rel_tex; \n"
+"  rel_tex.y = fract(rel_tex.y) / wh.y;\n"
+"  } \n"
+"  return rel_tex; \n"
 "}\n";
 /* The texture and the pixmap size is not match eaxctly, so can't sample 
it directly.
  * rel_sampler will recalculate the texture coords.*/
@@ -105,7 +108,7 @@ glamor_create_composite_fs(struct shader_key *key)
 " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, 
int set_alpha)\n"
 "{\n"
 "  tex = rel_tex_coord(tex, wh, repeat - RepeatFix);\n"
-"   if (repeat == RepeatFix) {\n"
+"  if (repeat == RepeatFix) {\n"
 "  if (!(tex.x >= 0.0 && tex.x < 1.0 \n"
 "  && tex.y >= 0.0 && tex.y < 1.0))\n"
 "  return vec4(0.0, 0.0, 0.0, set_alpha);\n"
@@ -129,9 +132,9 @@ glamor_create_composite_fs(struct shader_key *key)
 "uniform vec4 source_wh;"
 "vec4 get_source()\n"
 "{\n"
-"   if (source_repeat_mode < RepeatFix)\n"
+"  if (source_repeat_mode < RepeatFix)\n"
 "  return texture2D(source_sampler, source_texture);\n"
-"   else \n"
+"  else \n"
 "  return rel_sampler(source_sampler, source_texture,\n"
 " source_wh, source_repeat_mode, 0);\n"
 "}\n";
@@ -141,7 +144,7 @@ glamor_create_composite_fs(struct shader_key *key)
 "uniform vec4 source_wh;\n"
 "vec4 get_source()\n"
 "{\n"
-"   if (source_repeat_mode < RepeatFix) \n"
+"  if (source_repeat_mode < RepeatFix) \n"
 "  return vec4(texture2D(source_sampler, 
source_texture).rgb, 1);\n"
 "  else \n"
 "  return rel_sampler(source_sampler, source_texture,\n"
@@ -164,9 +167,9 @@ glamor_create_composite_fs(struct 

[PATCH xserver 13/19] glamor: Simplify the pixmap box looping.

2016-01-27 Thread Eric Anholt
We had a double loop across h and w, and passed the current x and y
out to callers who then used w to multiply/add to an index.  Instead,
just single loop across w * h.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_composite_glyphs.c | 10 ++
 glamor/glamor_copy.c | 15 ---
 glamor/glamor_dash.c |  6 +++---
 glamor/glamor_glyphblt.c | 12 ++--
 glamor/glamor_lines.c|  6 +++---
 glamor/glamor_points.c   |  7 ---
 glamor/glamor_priv.h | 20 +---
 glamor/glamor_rects.c|  7 ---
 glamor/glamor_segs.c |  6 +++---
 glamor/glamor_spans.c| 23 ---
 glamor/glamor_text.c |  8 +---
 glamor/glamor_transfer.c | 16 
 glamor/glamor_transform.c|  7 +++
 glamor/glamor_transform.h|  3 +--
 glamor/glamor_xv.c   |  6 +++---
 15 files changed, 78 insertions(+), 74 deletions(-)

diff --git a/glamor/glamor_composite_glyphs.c b/glamor/glamor_composite_glyphs.c
index 2e4dfe2..f51ff6d 100644
--- a/glamor/glamor_composite_glyphs.c
+++ b/glamor/glamor_composite_glyphs.c
@@ -237,10 +237,10 @@ glamor_glyphs_flush(CARD8 op, PicturePtr src, PicturePtr 
dst,
 glamor_screen_private *glamor_priv = 
glamor_get_screen_private(drawable->pScreen);
 PixmapPtr atlas_pixmap = atlas->atlas;
 glamor_pixmap_private *atlas_priv = 
glamor_get_pixmap_private(atlas_pixmap);
-glamor_pixmap_fbo *atlas_fbo = glamor_pixmap_fbo_at(atlas_priv, 0, 0);
+glamor_pixmap_fbo *atlas_fbo = glamor_pixmap_fbo_at(atlas_priv, 0);
 PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable);
 glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
-int box_x, box_y;
+int box_index;
 int off_x, off_y;
 
 glamor_put_vbo_space(drawable->pScreen);
@@ -255,11 +255,13 @@ glamor_glyphs_flush(CARD8 op, PicturePtr src, PicturePtr 
dst,
 
 glUniform1i(prog->atlas_uniform, 1);
 
-glamor_pixmap_loop(pixmap_priv, box_x, box_y) {
+glamor_pixmap_loop(pixmap_priv, box_index) {
 BoxPtr box = RegionRects(dst->pCompositeClip);
 int nbox = RegionNumRects(dst->pCompositeClip);
 
-glamor_set_destination_drawable(drawable, box_x, box_y, TRUE, 
FALSE, prog->matrix_uniform, _x, _y);
+glamor_set_destination_drawable(drawable, box_index, TRUE, FALSE,
+prog->matrix_uniform,
+_x, _y);
 
 /* Run over the clip list, drawing the glyphs
  * in each box
diff --git a/glamor/glamor_copy.c b/glamor/glamor_copy.c
index 1adfba0..5fed89f 100644
--- a/glamor/glamor_copy.c
+++ b/glamor/glamor_copy.c
@@ -307,7 +307,7 @@ glamor_copy_fbo_fbo_draw(DrawablePtr src,
 PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst);
 glamor_pixmap_private *src_priv = glamor_get_pixmap_private(src_pixmap);
 glamor_pixmap_private *dst_priv = glamor_get_pixmap_private(dst_pixmap);
-int src_box_x, src_box_y, dst_box_x, dst_box_y;
+int src_box_index, dst_box_index;
 int dst_off_x, dst_off_y;
 int src_off_x, src_off_y;
 GLshort *v;
@@ -368,19 +368,20 @@ glamor_copy_fbo_fbo_draw(DrawablePtr src,
 
 glEnable(GL_SCISSOR_TEST);
 
-glamor_pixmap_loop(src_priv, src_box_x, src_box_y) {
-BoxPtr src_box = glamor_pixmap_box_at(src_priv, src_box_x, src_box_y);
+glamor_pixmap_loop(src_priv, src_box_index) {
+BoxPtr src_box = glamor_pixmap_box_at(src_priv, src_box_index);
 
 args.dx = dx + src_off_x - src_box->x1;
 args.dy = dy + src_off_y - src_box->y1;
-args.src = glamor_pixmap_fbo_at(src_priv, src_box_x, src_box_y);
+args.src = glamor_pixmap_fbo_at(src_priv, src_box_index);
 
 if (!glamor_use_program(dst_pixmap, gc, prog, ))
 goto bail_ctx;
 
-glamor_pixmap_loop(dst_priv, dst_box_x, dst_box_y) {
-glamor_set_destination_drawable(dst, dst_box_x, dst_box_y, FALSE, 
FALSE,
-prog->matrix_uniform, _off_x, 
_off_y);
+glamor_pixmap_loop(dst_priv, dst_box_index) {
+glamor_set_destination_drawable(dst, dst_box_index, FALSE, FALSE,
+prog->matrix_uniform,
+_off_x, _off_y);
 
 glScissor(dst_off_x - args.dx,
   dst_off_y - args.dy,
diff --git a/glamor/glamor_dash.c b/glamor/glamor_dash.c
index 101228e..a6a11c1 100644
--- a/glamor/glamor_dash.c
+++ b/glamor/glamor_dash.c
@@ -205,16 +205,16 @@ glamor_dash_loop(DrawablePtr drawable, GCPtr gc, 
glamor_program *prog,
 {
 PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable);
 glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
-int box_x, box_y;
+int box_index;
 int off_x, 

[PATCH xserver 07/19] glamor: Drop dead glamor_pict_format_is_compatible().

2016-01-27 Thread Eric Anholt
This hasn't been used since 2f80c7791bb0b11f261cb1e3e0d89163dcdd0342
(GLAMOR_SEPARATE_TEXTURE removal).

Signed-off-by: Eric Anholt 
---
 glamor/glamor_utils.h | 20 
 1 file changed, 20 deletions(-)

diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 3adc687..5128a33 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -852,26 +852,6 @@ glamor_get_rgba_from_pixel(CARD32 pixel,
 }
 
 inline static Bool
-glamor_pict_format_is_compatible(PicturePtr picture)
-{
-GLenum iformat;
-PixmapPtr pixmap = glamor_get_drawable_pixmap(picture->pDrawable);
-
-iformat = gl_iformat_for_pixmap(pixmap);
-switch (iformat) {
-case GL_RGBA:
-return (picture->format == PICT_a8r8g8b8 ||
-picture->format == PICT_x8r8g8b8);
-case GL_ALPHA:
-case GL_RED:
-case GL_LUMINANCE:
-return (picture->format == PICT_a8);
-default:
-return FALSE;
-}
-}
-
-inline static Bool
 glamor_is_large_pixmap(PixmapPtr pixmap)
 {
 glamor_pixmap_private *priv;
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 17/19] glamor: Clarify how the repeat values being passed around work.

2016-01-27 Thread Eric Anholt
Signed-off-by: Eric Anholt 
---
 glamor/glamor_render.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index a2a7f4a..ed425f5 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -76,11 +76,11 @@ glamor_create_composite_fs(struct shader_key *key)
 "{\n"
 "  vec2 rel_tex; \n"
 "  rel_tex = texture * wh.xy; \n"
-"  if (repeat == RepeatNone)\n"
+"  if (repeat == RepeatFix + RepeatNone)\n"
 "  return rel_tex; \n"
-"  else if (repeat == RepeatNormal) \n"
+"  else if (repeat == RepeatFix + RepeatNormal) \n"
 "  rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy); \n"
-"  else if (repeat == RepeatPad) { \n"
+"  else if (repeat == RepeatFix + RepeatPad) { \n"
 "  if (rel_tex.x >= 1.0) \n"
 "  rel_tex.x = 1.0 - wh.z * wh.x / 2.; \n"
 "  else if (rel_tex.x < 0.0) \n"
@@ -90,7 +90,7 @@ glamor_create_composite_fs(struct shader_key *key)
 "  else if (rel_tex.y < 0.0) \n"
 "  rel_tex.y = 0.0; \n"
 "  rel_tex = rel_tex / wh.xy; \n"
-"  } else if (repeat == RepeatReflect) {\n"
+"  } else if (repeat == RepeatFix + RepeatReflect) {\n"
 "  if ((1.0 - mod(abs(floor(rel_tex.x)), 2.0)) < 0.001)\n"
 "  rel_tex.x = 2.0 - (1.0 - fract(rel_tex.x)) / 
wh.x;\n"
 "  else \n"
@@ -107,8 +107,8 @@ glamor_create_composite_fs(struct shader_key *key)
 const char *rel_sampler =
 " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, 
int set_alpha)\n"
 "{\n"
-"  tex = rel_tex_coord(tex, wh, repeat - RepeatFix);\n"
-"  if (repeat == RepeatFix) {\n"
+"  tex = rel_tex_coord(tex, wh, repeat);\n"
+"  if (repeat == RepeatFix + RepeatNone) {\n"
 "  if (!(tex.x >= 0.0 && tex.x < 1.0 \n"
 "  && tex.y >= 0.0 && tex.y < 1.0))\n"
 "  return vec4(0.0, 0.0, 0.0, set_alpha);\n"
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 06/19] glamor: Drop comment about dead yInverted flag.

2016-01-27 Thread Eric Anholt
Wait long enough, and you don't need to think about it at all.

Signed-off-by: Eric Anholt 
---
 glamor/glamor_transform.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/glamor/glamor_transform.c b/glamor/glamor_transform.c
index ad06943..564a52d 100644
--- a/glamor/glamor_transform.c
+++ b/glamor/glamor_transform.c
@@ -77,8 +77,6 @@ glamor_set_destination_drawable(DrawablePtr drawable,
  *  gl_x = (render_x + drawable->x + off_x) * 2 / width - 1
  *
  *  gl_x = (render_x) * 2 / width + (drawable->x + off_x) * 2 / width - 1
- *
- * I'll think about yInverted later, when I have some way to test
  */
 
 if (do_drawable_translate) {
-- 
2.6.4

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver 05/19] glamor: Rename the *y_inverted helpers to not say "inverted".

2016-01-27 Thread Eric Anholt
Signed-off-by: Eric Anholt 
---
 glamor/glamor_utils.h | 30 ++
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 875c935..3adc687 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -36,9 +36,9 @@
 #include "mipict.h"
 
 #define v_from_x_coord_x(_xscale_, _x_)  ( 2 * (_x_) * (_xscale_) - 
1.0)
-#define v_from_x_coord_y_inverted(_yscale_, _y_) (2 * (_y_) * (_yscale_) - 1.0)
+#define v_from_x_coord_y(_yscale_, _y_)  (2 * (_y_) * (_yscale_) - 1.0)
 #define t_from_x_coord_x(_xscale_, _x_)  ((_x_) * (_xscale_))
-#define t_from_x_coord_y_inverted(_yscale_, _y_) ((_y_) * (_yscale_))
+#define t_from_x_coord_y(_yscale_, _y_)  ((_y_) * (_yscale_))
 
 #define pixmap_priv_get_dest_scale(pixmap, _pixmap_priv_, _pxscale_, 
_pyscale_) \
   do {   \
@@ -311,7 +311,7 @@
 texcoord)  \
   do { \
(texcoord)[0] = t_from_x_coord_x(xscale, _tx_); \
-(texcoord)[1] = t_from_x_coord_y_inverted(yscale, _ty_);\
+(texcoord)[1] = t_from_x_coord_y(yscale, _ty_); \
 DEBUGF("normalized point tx %f ty %f \n", (texcoord)[0],   \
(texcoord)[1]); \
   } while(0)
@@ -330,7 +330,7 @@
 tx += fbo_x_off;   \
 ty += fbo_y_off;   \
 (texcoord)[0] = t_from_x_coord_x(xscale, tx);  \
-(texcoord)[1] = t_from_x_coord_y_inverted(yscale, ty); \
+(texcoord)[1] = t_from_x_coord_y(yscale, ty);   \
 DEBUGF("normalized tx %f ty %f \n", (texcoord)[0], (texcoord)[1]); \
   } while(0)
 
@@ -482,8 +482,8 @@
 (vertices)[1 * stride] = _t2_ = t_from_x_coord_x(xscale, tx2); \
 (vertices)[2 * stride] = _t2_; \
 (vertices)[3 * stride] = _t0_; \
-(vertices)[1] = _t1_ = t_from_x_coord_y_inverted(yscale, ty1); \
-(vertices)[2 * stride + 1] = _t5_ = t_from_x_coord_y_inverted(yscale, 
ty2); \
+(vertices)[1] = _t1_ = t_from_x_coord_y(yscale, ty1);   \
+(vertices)[2 * stride + 1] = _t5_ = t_from_x_coord_y(yscale, ty2);  \
 (vertices)[1 * stride + 1] = _t1_; \
 (vertices)[3 * stride + 1] = _t5_; \
   } while(0)
@@ -562,8 +562,8 @@
(vertices)[2] = t_from_x_coord_x(xscale, x2);   \
(vertices)[6] = (vertices)[2];  \
(vertices)[4] = (vertices)[0];  \
-(vertices)[1] = t_from_x_coord_y_inverted(yscale, y1);  \
-(vertices)[7] = t_from_x_coord_y_inverted(yscale, y2);  \
+(vertices)[1] = t_from_x_coord_y(yscale, y1);   \
+(vertices)[7] = t_from_x_coord_y(yscale, y2);   \
(vertices)[3] = (vertices)[1];  \
(vertices)[5] = (vertices)[7];  \
 } while(0)
@@ -596,7 +596,7 @@
vertices)   \
 do {   \
(vertices)[0] = v_from_x_coord_x(xscale, x);\
-(vertices)[1] = v_from_x_coord_y_inverted(yscale, y);   \
+(vertices)[1] = v_from_x_coord_y(yscale, y);\
 } while(0)
 
 #define glamor_set_normalize_tri_vcoords(xscale, yscale, vtx,  \
@@ -639,11 +639,9 @@
x2 + fbo_x_off);\
 (vertices)[2 * stride] = _t2_; \
 (vertices)[3 * stride] = _t0_; \
-(vertices)[1] = _t1_ = v_from_x_coord_y_inverted(yscale,   \
- y1 + fbo_y_off);   \
+(vertices)[1] = _t1_ = v_from_x_coord_y(yscale, y1 + fbo_y_off);\
 (vertices)[2 * stride + 1] = _t5_ = \
-v_from_x_coord_y_inverted(yscale,   \
-  y2 + fbo_y_off);  \
+v_from_x_coord_y(yscale, y2 + fbo_y_off);   \
 (vertices)[1 * stride + 1] = _t1_; \
 (vertices)[3 * stride + 1] = _t5_; \
   } while(0)
@@ -675,8 +673,8 @@
(vertices)[2] = v_from_x_coord_x(xscale, x2);   \
(vertices)[6] = (vertices)[2];  

Re: [PATCH 1/1] Initialize pci_dev

2016-01-27 Thread Adam Jackson
On Fri, 2016-01-22 at 00:26 +, Pascal Terjan wrote:
> Else it is read before initialization if XSERVER_LIBPCIACCESS is not defined
> or location.type is not BUS_PCI.
> 
> Noticed when I got a segfault where it was 0x1 while doing some tests on arm.
> 
> Signed-off-by: Pascal Terjan 

remote: I: patch #71391 updated using rev 
66e7909bfefd93c05aa37d0cadccc5348f0382be.
remote: I: 1 patch(es) updated to state Accepted.
To ssh://git.freedesktop.org/git/xorg/driver/xf86-video-fbdev
   ae0aeff..66e7909  master -> master

- ajax
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver] modesetting: Require sufficiently new libdrm

2016-01-27 Thread Adam Jackson
Bugzilla: https://bugs.freedesktop.org/93883
Signed-off-by: Adam Jackson 
---
 configure.ac | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index ac3bb64..312fc69 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2035,8 +2035,7 @@ if test "x$XORG" = xyes; then
 
if test "x$DRM" = xyes; then
dnl 2.4.46 is required for cursor hotspot support.
-   PKG_CHECK_EXISTS(libdrm >= 2.4.46)
-   XORG_DRIVER_MODESETTING=yes
+   PKG_CHECK_EXISTS(libdrm >= 2.4.46, XORG_DRIVER_MODESETTING=yes, 
XORG_DRIVER_MODESETTING=no)
fi
 
AC_SUBST([XORG_LIBS])
-- 
2.5.0

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver] modesetting: Require sufficiently new libdrm

2016-01-27 Thread Alex Deucher
On Wed, Jan 27, 2016 at 11:50 AM, Adam Jackson  wrote:
> Bugzilla: https://bugs.freedesktop.org/93883
> Signed-off-by: Adam Jackson 

Reviewed-by: Alex Deucher 

> ---
>  configure.ac | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index ac3bb64..312fc69 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -2035,8 +2035,7 @@ if test "x$XORG" = xyes; then
>
> if test "x$DRM" = xyes; then
> dnl 2.4.46 is required for cursor hotspot support.
> -   PKG_CHECK_EXISTS(libdrm >= 2.4.46)
> -   XORG_DRIVER_MODESETTING=yes
> +   PKG_CHECK_EXISTS(libdrm >= 2.4.46, 
> XORG_DRIVER_MODESETTING=yes, XORG_DRIVER_MODESETTING=no)
> fi
>
> AC_SUBST([XORG_LIBS])
> --
> 2.5.0
>
> ___
> xorg-devel@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver] dri2: Sync i915_pci_ids.h and i965_pci_ids.h from mesa

2016-01-27 Thread Adam Jackson
On Wed, 2016-01-27 at 13:47 +0100, Andreas Boll wrote:
> I've verified that i915_pci_ids.h and i965_pci_ids.h match with
> current mesa master 19ae5de981e014
> 
> Reviewed-by: Andreas Boll 

remote: I: patch #71718 updated using rev 
50ca286d79f6304b972ea74487308e7794a170fb.
remote: I: 1 patch(es) updated to state Accepted.
To ssh://git.freedesktop.org/git/xorg/xserver
   bf23db4..50ca286  master -> master

- ajax
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH xserver] dri2: Sync i915_pci_ids.h and i965_pci_ids.h from mesa

2016-01-27 Thread Timo Aaltonen
Adds Skylake, Kabylake and Broxton allowing them to use
modesetting + glamor with dri2.

Signed-off-by: Timo Aaltonen 
---
 hw/xfree86/dri2/pci_ids/i915_pci_ids.h |  4 +--
 hw/xfree86/dri2/pci_ids/i965_pci_ids.h | 56 +++---
 2 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/hw/xfree86/dri2/pci_ids/i915_pci_ids.h 
b/hw/xfree86/dri2/pci_ids/i915_pci_ids.h
index 7d51975..1c43c8e 100644
--- a/hw/xfree86/dri2/pci_ids/i915_pci_ids.h
+++ b/hw/xfree86/dri2/pci_ids/i915_pci_ids.h
@@ -11,5 +11,5 @@ CHIPSET(0x27AE, I945_GME, "Intel(R) 945GME")
 CHIPSET(0x29B2, Q35_G,"Intel(R) Q35")
 CHIPSET(0x29C2, G33_G,"Intel(R) G33")
 CHIPSET(0x29D2, Q33_G,"Intel(R) Q33")
-CHIPSET(0xA011, IGD_GM,   "Intel(R) IGD")
-CHIPSET(0xA001, IGD_G,"Intel(R) IGD")
+CHIPSET(0xA011, PNV_GM,   "Intel(R) Pineview M")
+CHIPSET(0xA001, PNV_G,"Intel(R) Pineview")
diff --git a/hw/xfree86/dri2/pci_ids/i965_pci_ids.h 
b/hw/xfree86/dri2/pci_ids/i965_pci_ids.h
index 2e04301..5139e27 100644
--- a/hw/xfree86/dri2/pci_ids/i965_pci_ids.h
+++ b/hw/xfree86/dri2/pci_ids/i965_pci_ids.h
@@ -109,7 +109,55 @@ CHIPSET(0x162A, bdw_gt3, "Intel(R) Iris Pro P6300 
(Broadwell GT3e)")
 CHIPSET(0x162B, bdw_gt3, "Intel(R) Iris 6100 (Broadwell GT3)")
 CHIPSET(0x162D, bdw_gt3, "Intel(R) Broadwell GT3")
 CHIPSET(0x162E, bdw_gt3, "Intel(R) Broadwell GT3")
-CHIPSET(0x22B0, chv, "Intel(R) Cherryview")
-CHIPSET(0x22B1, chv, "Intel(R) Cherryview")
-CHIPSET(0x22B2, chv, "Intel(R) Cherryview")
-CHIPSET(0x22B3, chv, "Intel(R) Cherryview")
+CHIPSET(0x1902, skl_gt1, "Intel(R) HD Graphics 510 (Skylake GT1)")
+CHIPSET(0x1906, skl_gt1, "Intel(R) HD Graphics 510 (Skylake GT1)")
+CHIPSET(0x190A, skl_gt1, "Intel(R) Skylake GT1")
+CHIPSET(0x190E, skl_gt1, "Intel(R) Skylake GT1")
+CHIPSET(0x1912, skl_gt2, "Intel(R) HD Graphics 530 (Skylake GT2)")
+CHIPSET(0x1913, skl_gt2, "Intel(R) Skylake GT2f")
+CHIPSET(0x1915, skl_gt2, "Intel(R) Skylake GT2f")
+CHIPSET(0x1916, skl_gt2, "Intel(R) HD Graphics 520 (Skylake GT2)")
+CHIPSET(0x1917, skl_gt2, "Intel(R) Skylake GT2f")
+CHIPSET(0x191A, skl_gt2, "Intel(R) Skylake GT2")
+CHIPSET(0x191B, skl_gt2, "Intel(R) HD Graphics 530 (Skylake GT2)")
+CHIPSET(0x191D, skl_gt2, "Intel(R) HD Graphics P530 (Skylake GT2)")
+CHIPSET(0x191E, skl_gt2, "Intel(R) HD Graphics 515 (Skylake GT2)")
+CHIPSET(0x1921, skl_gt2, "Intel(R) Skylake GT2")
+CHIPSET(0x1923, skl_gt3, "Intel(R) Iris Graphics 540 (Skylake GT3e)")
+CHIPSET(0x1926, skl_gt3, "Intel(R) HD Graphics 535 (Skylake GT3)")
+CHIPSET(0x1927, skl_gt3, "Intel(R) Iris Graphics 550 (Skylake GT3e)")
+CHIPSET(0x192A, skl_gt4, "Intel(R) Skylake GT4")
+CHIPSET(0x192B, skl_gt3, "Intel(R) Iris Graphics (Skylake GT3fe)")
+CHIPSET(0x1932, skl_gt4, "Intel(R) Skylake GT4")
+CHIPSET(0x193A, skl_gt4, "Intel(R) Skylake GT4")
+CHIPSET(0x193B, skl_gt4, "Intel(R) Skylake GT4")
+CHIPSET(0x193D, skl_gt4, "Intel(R) Skylake GT4")
+CHIPSET(0x5902, kbl_gt1, "Intel(R) Kabylake GT1")
+CHIPSET(0x5906, kbl_gt1, "Intel(R) Kabylake GT1")
+CHIPSET(0x590A, kbl_gt1, "Intel(R) Kabylake GT1")
+CHIPSET(0x590B, kbl_gt1, "Intel(R) Kabylake GT1")
+CHIPSET(0x590E, kbl_gt1, "Intel(R) Kabylake GT1")
+CHIPSET(0x5913, kbl_gt1_5, "Intel(R) Kabylake GT1.5")
+CHIPSET(0x5915, kbl_gt1_5, "Intel(R) Kabylake GT1.5")
+CHIPSET(0x5917, kbl_gt1_5, "Intel(R) Kabylake GT1.5")
+CHIPSET(0x5912, kbl_gt2, "Intel(R) Kabylake GT2")
+CHIPSET(0x5916, kbl_gt2, "Intel(R) Kabylake GT2")
+CHIPSET(0x591A, kbl_gt2, "Intel(R) Kabylake GT2")
+CHIPSET(0x591B, kbl_gt2, "Intel(R) Kabylake GT2")
+CHIPSET(0x591D, kbl_gt2, "Intel(R) Kabylake GT2")
+CHIPSET(0x591E, kbl_gt2, "Intel(R) Kabylake GT2")
+CHIPSET(0x5921, kbl_gt2, "Intel(R) Kabylake GT2F")
+CHIPSET(0x5926, kbl_gt3, "Intel(R) Kabylake GT3")
+CHIPSET(0x592A, kbl_gt3, "Intel(R) Kabylake GT3")
+CHIPSET(0x592B, kbl_gt3, "Intel(R) Kabylake GT3")
+CHIPSET(0x5932, kbl_gt4, "Intel(R) Kabylake GT4")
+CHIPSET(0x593A, kbl_gt4, "Intel(R) Kabylake GT4")
+CHIPSET(0x593B, kbl_gt4, "Intel(R) Kabylake GT4")
+CHIPSET(0x593D, kbl_gt4, "Intel(R) Kabylake GT4")
+CHIPSET(0x22B0, chv, "Intel(R) HD Graphics (Cherryview)")
+CHIPSET(0x22B1, chv, "Intel(R) HD Graphics (Cherryview)")
+CHIPSET(0x22B2, chv, "Intel(R) HD Graphics (Cherryview)")
+CHIPSET(0x22B3, chv, "Intel(R) HD Graphics (Cherryview)")
+CHIPSET(0x0A84, bxt, "Intel(R) HD Graphics (Broxton)")
+CHIPSET(0x1A84, bxt, "Intel(R) HD Graphics (Broxton)")
+CHIPSET(0x5A84, bxt, "Intel(R) HD Graphics (Broxton)")
-- 
2.5.0

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xf86-input-libinput] Add property/option for enabling/disabling tap-n-drag

2016-01-27 Thread Hans de Goede

Hi,

On 27-01-16 02:20, Peter Hutterer wrote:

Signed-off-by: Peter Hutterer 


Patch looks good to me:

Reviewed-by: Hans de Goede 

Regards,

Hans



---
  include/libinput-properties.h |  6 +++
  man/libinput.man  |  8 
  src/xf86libinput.c| 94 +++
  3 files changed, 108 insertions(+)

diff --git a/include/libinput-properties.h b/include/libinput-properties.h
index 098ce48..d117729 100644
--- a/include/libinput-properties.h
+++ b/include/libinput-properties.h
@@ -30,6 +30,12 @@
  /* Tapping default enabled/disabled: BOOL, 1 value, read-only */
  #define LIBINPUT_PROP_TAP_DEFAULT "libinput Tapping Enabled Default"

+/* Tap drag enabled/disabled: BOOL, 1 value */
+#define LIBINPUT_PROP_TAP_DRAG "libinput Tapping Drag Enabled"
+
+/* Tap drag default enabled/disabled: BOOL, 1 value */
+#define LIBINPUT_PROP_TAP_DRAG_DEFAULT "libinput Tapping Drag Enabled Default"
+
  /* Tap drag lock enabled/disabled: BOOL, 1 value */
  #define LIBINPUT_PROP_TAP_DRAG_LOCK "libinput Tapping Drag Lock Enabled"

diff --git a/man/libinput.man b/man/libinput.man
index b6f476e..43beda7 100644
--- a/man/libinput.man
+++ b/man/libinput.man
@@ -129,6 +129,14 @@ mouse is connected".
  .BI "Option \*qTapping\*q \*q" bool \*q
  Enables or disables tap-to-click behavior.
  .TP 7
+.BI "Option \*qTappingDrag\*q \*q" bool \*q
+Enables or disables drag during tapping behavior ("tap-and-drag"). When
+enabled, a tap followed by a finger held down causes a single button down
+only, all motions of that finger thus translate into dragging motion.
+Tap-and-drag requires option
+.B Tapping
+to be enabled.
+.TP 7
  .BI "Option \*qTappingDragLock\*q \*q" bool \*q
  Enables or disables drag lock during tapping behavior. When enabled, a
  finger up during tap-and-drag will not immediately release the button. If
diff --git a/src/xf86libinput.c b/src/xf86libinput.c
index fd07cf3..b520b26 100644
--- a/src/xf86libinput.c
+++ b/src/xf86libinput.c
@@ -112,6 +112,7 @@ struct xf86libinput {

struct options {
BOOL tapping;
+   BOOL tap_drag;
BOOL tap_drag_lock;
BOOL natural_scrolling;
BOOL left_handed;
@@ -386,6 +387,13 @@ LibinputApplyConfig(DeviceIntPtr dev)
"Failed to set Tapping DragLock to %d\n",
driver_data->options.tap_drag_lock);

+   if (libinput_device_config_tap_get_finger_count(device) > 0 &&
+   libinput_device_config_tap_set_drag_enabled(device,
+   
driver_data->options.tap_drag) != LIBINPUT_CONFIG_STATUS_SUCCESS)
+   xf86IDrvMsg(pInfo, X_ERROR,
+   "Failed to set Tapping Drag to %d\n",
+   driver_data->options.tap_drag);
+
if (libinput_device_config_calibration_has_matrix(device) &&
libinput_device_config_calibration_set_matrix(device,
  
driver_data->options.matrix) != LIBINPUT_CONFIG_STATUS_SUCCESS)
@@ -1277,6 +1285,30 @@ xf86libinput_parse_tap_option(InputInfoPtr pInfo,
  }

  static inline BOOL
+xf86libinput_parse_tap_drag_option(InputInfoPtr pInfo,
+  struct libinput_device *device)
+{
+   BOOL drag;
+
+   if (libinput_device_config_tap_get_finger_count(device) == 0)
+   return FALSE;
+
+   drag = xf86SetBoolOption(pInfo->options,
+"TappingDrag",
+
libinput_device_config_tap_get_drag_enabled(device));
+
+   if (libinput_device_config_tap_set_drag_enabled(device, drag) !=
+   LIBINPUT_CONFIG_STATUS_SUCCESS) {
+   xf86IDrvMsg(pInfo, X_ERROR,
+   "Failed to set Tapping Drag Lock to %d\n",
+   drag);
+   drag = libinput_device_config_tap_get_drag_enabled(device);
+   }
+
+   return drag;
+}
+
+static inline BOOL
  xf86libinput_parse_tap_drag_lock_option(InputInfoPtr pInfo,
struct libinput_device *device)
  {
@@ -1683,6 +1715,7 @@ xf86libinput_parse_options(InputInfoPtr pInfo,

/* libinput options */
options->tapping = xf86libinput_parse_tap_option(pInfo, device);
+   options->tap_drag = xf86libinput_parse_tap_drag_option(pInfo, device);
options->tap_drag_lock = xf86libinput_parse_tap_drag_lock_option(pInfo, 
device);
options->speed = xf86libinput_parse_accel_option(pInfo, device);
options->accel_profile = xf86libinput_parse_accel_profile_option(pInfo, 
device);
@@ -2046,6 +2079,8 @@ _X_EXPORT XF86ModuleData libinputModuleData = {
  /* libinput-specific properties */
  static Atom prop_tap;
  static Atom prop_tap_default;
+static Atom prop_tap_drag;
+static Atom prop_tap_drag_default;
  static Atom 

Re: [PATCH xserver] dri2: Sync i915_pci_ids.h and i965_pci_ids.h from mesa

2016-01-27 Thread Andreas Boll
I've verified that i915_pci_ids.h and i965_pci_ids.h match with
current mesa master 19ae5de981e014

Reviewed-by: Andreas Boll 

Thanks,
Andreas

2016-01-27 13:18 GMT+01:00 Timo Aaltonen :
> Adds Skylake, Kabylake and Broxton allowing them to use
> modesetting + glamor with dri2.
>
> Signed-off-by: Timo Aaltonen 
> ---
>  hw/xfree86/dri2/pci_ids/i915_pci_ids.h |  4 +--
>  hw/xfree86/dri2/pci_ids/i965_pci_ids.h | 56 
> +++---
>  2 files changed, 54 insertions(+), 6 deletions(-)
>
> diff --git a/hw/xfree86/dri2/pci_ids/i915_pci_ids.h 
> b/hw/xfree86/dri2/pci_ids/i915_pci_ids.h
> index 7d51975..1c43c8e 100644
> --- a/hw/xfree86/dri2/pci_ids/i915_pci_ids.h
> +++ b/hw/xfree86/dri2/pci_ids/i915_pci_ids.h
> @@ -11,5 +11,5 @@ CHIPSET(0x27AE, I945_GME, "Intel(R) 945GME")
>  CHIPSET(0x29B2, Q35_G,"Intel(R) Q35")
>  CHIPSET(0x29C2, G33_G,"Intel(R) G33")
>  CHIPSET(0x29D2, Q33_G,"Intel(R) Q33")
> -CHIPSET(0xA011, IGD_GM,   "Intel(R) IGD")
> -CHIPSET(0xA001, IGD_G,"Intel(R) IGD")
> +CHIPSET(0xA011, PNV_GM,   "Intel(R) Pineview M")
> +CHIPSET(0xA001, PNV_G,"Intel(R) Pineview")
> diff --git a/hw/xfree86/dri2/pci_ids/i965_pci_ids.h 
> b/hw/xfree86/dri2/pci_ids/i965_pci_ids.h
> index 2e04301..5139e27 100644
> --- a/hw/xfree86/dri2/pci_ids/i965_pci_ids.h
> +++ b/hw/xfree86/dri2/pci_ids/i965_pci_ids.h
> @@ -109,7 +109,55 @@ CHIPSET(0x162A, bdw_gt3, "Intel(R) Iris Pro P6300 
> (Broadwell GT3e)")
>  CHIPSET(0x162B, bdw_gt3, "Intel(R) Iris 6100 (Broadwell GT3)")
>  CHIPSET(0x162D, bdw_gt3, "Intel(R) Broadwell GT3")
>  CHIPSET(0x162E, bdw_gt3, "Intel(R) Broadwell GT3")
> -CHIPSET(0x22B0, chv, "Intel(R) Cherryview")
> -CHIPSET(0x22B1, chv, "Intel(R) Cherryview")
> -CHIPSET(0x22B2, chv, "Intel(R) Cherryview")
> -CHIPSET(0x22B3, chv, "Intel(R) Cherryview")
> +CHIPSET(0x1902, skl_gt1, "Intel(R) HD Graphics 510 (Skylake GT1)")
> +CHIPSET(0x1906, skl_gt1, "Intel(R) HD Graphics 510 (Skylake GT1)")
> +CHIPSET(0x190A, skl_gt1, "Intel(R) Skylake GT1")
> +CHIPSET(0x190E, skl_gt1, "Intel(R) Skylake GT1")
> +CHIPSET(0x1912, skl_gt2, "Intel(R) HD Graphics 530 (Skylake GT2)")
> +CHIPSET(0x1913, skl_gt2, "Intel(R) Skylake GT2f")
> +CHIPSET(0x1915, skl_gt2, "Intel(R) Skylake GT2f")
> +CHIPSET(0x1916, skl_gt2, "Intel(R) HD Graphics 520 (Skylake GT2)")
> +CHIPSET(0x1917, skl_gt2, "Intel(R) Skylake GT2f")
> +CHIPSET(0x191A, skl_gt2, "Intel(R) Skylake GT2")
> +CHIPSET(0x191B, skl_gt2, "Intel(R) HD Graphics 530 (Skylake GT2)")
> +CHIPSET(0x191D, skl_gt2, "Intel(R) HD Graphics P530 (Skylake GT2)")
> +CHIPSET(0x191E, skl_gt2, "Intel(R) HD Graphics 515 (Skylake GT2)")
> +CHIPSET(0x1921, skl_gt2, "Intel(R) Skylake GT2")
> +CHIPSET(0x1923, skl_gt3, "Intel(R) Iris Graphics 540 (Skylake GT3e)")
> +CHIPSET(0x1926, skl_gt3, "Intel(R) HD Graphics 535 (Skylake GT3)")
> +CHIPSET(0x1927, skl_gt3, "Intel(R) Iris Graphics 550 (Skylake GT3e)")
> +CHIPSET(0x192A, skl_gt4, "Intel(R) Skylake GT4")
> +CHIPSET(0x192B, skl_gt3, "Intel(R) Iris Graphics (Skylake GT3fe)")
> +CHIPSET(0x1932, skl_gt4, "Intel(R) Skylake GT4")
> +CHIPSET(0x193A, skl_gt4, "Intel(R) Skylake GT4")
> +CHIPSET(0x193B, skl_gt4, "Intel(R) Skylake GT4")
> +CHIPSET(0x193D, skl_gt4, "Intel(R) Skylake GT4")
> +CHIPSET(0x5902, kbl_gt1, "Intel(R) Kabylake GT1")
> +CHIPSET(0x5906, kbl_gt1, "Intel(R) Kabylake GT1")
> +CHIPSET(0x590A, kbl_gt1, "Intel(R) Kabylake GT1")
> +CHIPSET(0x590B, kbl_gt1, "Intel(R) Kabylake GT1")
> +CHIPSET(0x590E, kbl_gt1, "Intel(R) Kabylake GT1")
> +CHIPSET(0x5913, kbl_gt1_5, "Intel(R) Kabylake GT1.5")
> +CHIPSET(0x5915, kbl_gt1_5, "Intel(R) Kabylake GT1.5")
> +CHIPSET(0x5917, kbl_gt1_5, "Intel(R) Kabylake GT1.5")
> +CHIPSET(0x5912, kbl_gt2, "Intel(R) Kabylake GT2")
> +CHIPSET(0x5916, kbl_gt2, "Intel(R) Kabylake GT2")
> +CHIPSET(0x591A, kbl_gt2, "Intel(R) Kabylake GT2")
> +CHIPSET(0x591B, kbl_gt2, "Intel(R) Kabylake GT2")
> +CHIPSET(0x591D, kbl_gt2, "Intel(R) Kabylake GT2")
> +CHIPSET(0x591E, kbl_gt2, "Intel(R) Kabylake GT2")
> +CHIPSET(0x5921, kbl_gt2, "Intel(R) Kabylake GT2F")
> +CHIPSET(0x5926, kbl_gt3, "Intel(R) Kabylake GT3")
> +CHIPSET(0x592A, kbl_gt3, "Intel(R) Kabylake GT3")
> +CHIPSET(0x592B, kbl_gt3, "Intel(R) Kabylake GT3")
> +CHIPSET(0x5932, kbl_gt4, "Intel(R) Kabylake GT4")
> +CHIPSET(0x593A, kbl_gt4, "Intel(R) Kabylake GT4")
> +CHIPSET(0x593B, kbl_gt4, "Intel(R) Kabylake GT4")
> +CHIPSET(0x593D, kbl_gt4, "Intel(R) Kabylake GT4")
> +CHIPSET(0x22B0, chv, "Intel(R) HD Graphics (Cherryview)")
> +CHIPSET(0x22B1, chv, "Intel(R) HD Graphics (Cherryview)")
> +CHIPSET(0x22B2, chv, "Intel(R) HD Graphics (Cherryview)")
> +CHIPSET(0x22B3, chv, "Intel(R) HD Graphics (Cherryview)")
> +CHIPSET(0x0A84, bxt, "Intel(R) HD Graphics (Broxton)")
> +CHIPSET(0x1A84, bxt, "Intel(R) HD Graphics (Broxton)")
> +CHIPSET(0x5A84, bxt, "Intel(R) HD Graphics (Broxton)")
> --
> 2.5.0
>
> ___
>