This part of work will enable Xephyr to run mutter.

The logic is that I disabled the GLX_texture_from_pixmap extension in Xephyr so
that mutter will have to copy the pixmap into texture and draw the texture with
glTexImage2D.

To support GLX_texture_from_pixmap, we have to support the general GLX pixmap
applications. Currently I have not implemented that.


>From b8455ad213b33634f7b68732e45813e771eaeb3a Mon Sep 17 00:00:00 2001
From: Haitao Feng <haitao.f...@intel.com>
Date: Tue, 11 May 2010 14:32:32 +0800
Subject: Make mutter work


Signed-off-by: Haitao Feng <haitao.f...@intel.com>
---
 hw/kdrive/ephyr/ephyrhostglx.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/hw/kdrive/ephyr/ephyrhostglx.c b/hw/kdrive/ephyr/ephyrhostglx.c
index 728687b..6733782 100644
--- a/hw/kdrive/ephyr/ephyrhostglx.c
+++ b/hw/kdrive/ephyr/ephyrhostglx.c
@@ -165,6 +165,10 @@ ephyrHostGLXGetStringFromServer (int a_screen_number,
     xGLXGenericGetStringReq *req=NULL;
     xGLXSingleReply reply;
     int length=0, numbytes=0, major_opcode=0, get_string_op=0;
+    const char *glx_texture_from_pixmap = "GLX_EXT_texture_from_pixmap ";
+    char *start = NULL;
+    char *end = NULL;
+    int pos = 0, len = 0;
 
     EPHYR_RETURN_VAL_IF_FAIL (dpy && a_string, FALSE) ;
 
@@ -229,8 +233,18 @@ ephyrHostGLXGetStringFromServer (int a_screen_number,
     _XEatData (dpy, length) ;
     UnlockDisplay (dpy);
     SyncHandle ();
-    EPHYR_LOG ("strname:%#x, strvalue:'%s', strlen:%d\n",
-               a_string_name, *a_string, numbytes) ;
+
+    start = strstr(*a_string, glx_texture_from_pixmap);
+    if (start){
+        EPHYR_LOG ("strname:%#x, strvalue:'%s', strlen:%d\n",
+                   a_string_name, *a_string, numbytes) ;
+        len = strlen(glx_texture_from_pixmap);
+        pos = start - *a_string;
+        end = start + strlen(glx_texture_from_pixmap);
+        memmove(start, end, numbytes + 1 - pos - len);
+        EPHYR_LOG ("strname:%#x, strvalue:'%s', strlen:%d\n",
+                   a_string_name, *a_string, numbytes) ;
+    }
 
     is_ok = TRUE ;
 out:
-- 
1.6.3.3

_______________________________________________
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

Reply via email to