Mesa (master): glx: Remove (unused, broken) fastImageUnpack fast path

Adam Jackson ajax at kemper.freedesktop.org
Thu Jun 2 19:28:39 UTC 2011


Module: Mesa
Branch: master
Commit: e09e5cb7d8b2d7a9d0ec61476e654528010b2b91
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e09e5cb7d8b2d7a9d0ec61476e654528010b2b91

Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jun  1 13:00:57 2011 -0400

glx: Remove (unused, broken) fastImageUnpack fast path

Reviewed-by: Brian Paul <brianp at vmware.com>
Signed-off-by: Adam Jackson <ajax at redhat.com>

---

 src/glx/glxclient.h    |    8 ----
 src/glx/indirect_glx.c |    3 -
 src/glx/renderpix.c    |   98 +++++++++++++++++++-----------------------------
 3 files changed, 39 insertions(+), 70 deletions(-)

diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h
index 2b6966f..a443f78 100644
--- a/src/glx/glxclient.h
+++ b/src/glx/glxclient.h
@@ -310,14 +310,6 @@ struct glx_context
    /*@} */
 
     /**
-     * This is \c GL_TRUE if the pixel unpack modes are such that an image
-     * can be unpacked from the clients memory by just copying.  It may
-     * still be true that the server will have to do some work.  This
-     * just promises that a straight copy will fetch the correct bytes.
-     */
-   GLboolean fastImageUnpack;
-
-    /**
      * Fill newImage with the unpacked form of \c oldImage getting it
      * ready for transport to the server.
      */
diff --git a/src/glx/indirect_glx.c b/src/glx/indirect_glx.c
index 1870ede..b4f16c7 100644
--- a/src/glx/indirect_glx.c
+++ b/src/glx/indirect_glx.c
@@ -404,10 +404,7 @@ indirect_create_context(struct glx_screen *psc,
 
    /*
     ** PERFORMANCE NOTE: A mode dependent fill image can speed things up.
-    ** Other code uses the fastImageUnpack bit, but it is never set
-    ** to GL_TRUE.
     */
-   gc->fastImageUnpack = GL_FALSE;
    gc->fillImage = __glFillImage;
    gc->pc = gc->buf;
    gc->bufEnd = gc->buf + bufSize;
diff --git a/src/glx/renderpix.c b/src/glx/renderpix.c
index 8234bbe..b54f115 100644
--- a/src/glx/renderpix.c
+++ b/src/glx/renderpix.c
@@ -76,10 +76,6 @@
  * Modify this function so that \c NULL images are sent using
  * \c __glXSendLargeChunk instead of __glXSendLargeCommand.  Doing this
  * will eliminate the need to allocate a buffer for that case.
- *
- * \bugs
- * The \c fastImageUnpack path, which is thankfully never used, is completely
- * broken.
  */
 void
 __glXSendLargeImage(struct glx_context * gc, GLint compsize, GLint dim,
@@ -87,48 +83,38 @@ __glXSendLargeImage(struct glx_context * gc, GLint compsize, GLint dim,
                     GLenum format, GLenum type, const GLvoid * src,
                     GLubyte * pc, GLubyte * modes)
 {
-   if (!gc->fastImageUnpack || (src == NULL)) {
-      /* Allocate a temporary holding buffer */
-      GLubyte *buf = (GLubyte *) Xmalloc(compsize);
-      if (!buf) {
-         __glXSetError(gc, GL_OUT_OF_MEMORY);
-         return;
-      }
+    /* Allocate a temporary holding buffer */
+    GLubyte *buf = (GLubyte *) Xmalloc(compsize);
+    if (!buf) {
+	__glXSetError(gc, GL_OUT_OF_MEMORY);
+	return;
+    }
 
-      /* Apply pixel store unpack modes to copy data into buf */
-      if (src != NULL) {
-         (*gc->fillImage) (gc, dim, width, height, depth, format, type,
-                           src, buf, modes);
-      }
-      else {
-         if (dim < 3) {
-            (void) memcpy(modes, __glXDefaultPixelStore + 4, 20);
-         }
-         else {
-            (void) memcpy(modes, __glXDefaultPixelStore + 0, 36);
-         }
-      }
+    /* Apply pixel store unpack modes to copy data into buf */
+    if (src != NULL) {
+	(*gc->fillImage) (gc, dim, width, height, depth, format, type,
+			  src, buf, modes);
+    }
+    else {
+	if (dim < 3) {
+	    (void) memcpy(modes, __glXDefaultPixelStore + 4, 20);
+	}
+	else {
+	    (void) memcpy(modes, __glXDefaultPixelStore + 0, 36);
+	}
+    }
 
-      /* Send large command */
-      __glXSendLargeCommand(gc, gc->pc, pc - gc->pc, buf, compsize);
+    /* Send large command */
+    __glXSendLargeCommand(gc, gc->pc, pc - gc->pc, buf, compsize);
 
-      /* Free buffer */
-      Xfree((char *) buf);
-   }
-   else {
-      /* Just send the data straight as is */
-      __glXSendLargeCommand(gc, gc->pc, pc - gc->pc, pc, compsize);
-   }
+    /* Free buffer */
+    Xfree((char *) buf);
 }
 
 /************************************************************************/
 
 /**
  * Implement GLX protocol for \c glSeparableFilter2D.
- *
- * \bugs
- * The \c fastImageUnpack path, which is thankfully never used, is completely
- * broken.
  */
 void
 __indirect_glSeparableFilter2D(GLenum target, GLenum internalformat,
@@ -177,6 +163,7 @@ __indirect_glSeparableFilter2D(GLenum target, GLenum internalformat,
       __GLX_END(0);
    }
    else {
+      GLubyte *buf;
       const GLint bufsize = image1len + image2len;
 
       /* Use GLXRenderLarge protocol to send command */
@@ -190,29 +177,22 @@ __indirect_glSeparableFilter2D(GLenum target, GLenum internalformat,
       __GLX_PUT_LONG(20, type);
       pc += hdrlen;
 
-      if (!gc->fastImageUnpack) {
-         /* Allocate a temporary holding buffer */
-         GLubyte *buf = (GLubyte *) Xmalloc(bufsize);
-         if (!buf) {
-            __glXSetError(gc, GL_OUT_OF_MEMORY);
-            return;
-         }
-         (*gc->fillImage) (gc, 1, width, 1, 1, format, type, row, buf,
-                           pixelHeaderPC);
+      /* Allocate a temporary holding buffer */
+      buf = (GLubyte *) Xmalloc(bufsize);
+      if (!buf) {
+         __glXSetError(gc, GL_OUT_OF_MEMORY);
+         return;
+      }
+      (*gc->fillImage) (gc, 1, width, 1, 1, format, type, row, buf,
+                        pixelHeaderPC);
 
-         (*gc->fillImage) (gc, 1, height, 1, 1, format, type, column,
-                           buf + image1len, pixelHeaderPC);
+      (*gc->fillImage) (gc, 1, height, 1, 1, format, type, column,
+                        buf + image1len, pixelHeaderPC);
 
-         /* Send large command */
-         __glXSendLargeCommand(gc, gc->pc, (GLint) (pc - gc->pc), buf,
-                               bufsize);
-         /* Free buffer */
-         Xfree((char *) buf);
-      }
-      else {
-         /* Just send the data straight as is */
-         __glXSendLargeCommand(gc, gc->pc, (GLint) (pc - gc->pc), pc,
-                               bufsize);
-      }
+      /* Send large command */
+      __glXSendLargeCommand(gc, gc->pc, (GLint) (pc - gc->pc), buf,
+                            bufsize);
+      /* Free buffer */
+      Xfree((char *) buf);
    }
 }




More information about the mesa-commit mailing list