Merge branch 'master' of git+ssh://git.freedesktop.org/git/mesa/mesa into gallium-0.2
[mesa.git] / src / mesa / drivers / dri / intel / intel_pixel_bitmap.c
index 3777422619bdf4ed3155bdf819609236d1ca5d55..daa6d4be17201ec790c71fa5d51cee9ad07b5f88 100644 (file)
 
 #include "intel_screen.h"
 #include "intel_context.h"
-#include "intel_ioctl.h"
 #include "intel_batchbuffer.h"
 #include "intel_blit.h"
 #include "intel_regions.h"
 #include "intel_buffer_objects.h"
-
+#include "intel_buffers.h"
+#include "intel_pixel.h"
+#include "intel_reg.h"
 
 
 #define FILE_DEBUG_FLAG DEBUG_PIXEL
@@ -164,11 +165,8 @@ do_blit_bitmap( GLcontext *ctx,
    struct intel_context *intel = intel_context(ctx);
    struct intel_region *dst = intel_drawbuf_region(intel);
    GLfloat tmpColor[4];
-
-   union {
-      GLuint ui;
-      GLubyte ub[4];
-   } color;
+   GLubyte ubcolor[4];
+   GLuint color8888, color565;
 
    if (!dst)
        return GL_FALSE;
@@ -185,14 +183,17 @@ do_blit_bitmap( GLcontext *ctx,
        ADD_3V(tmpColor, tmpColor, ctx->Current.RasterSecondaryColor);
    }
 
-   UNCLAMPED_FLOAT_TO_CHAN(color.ub[0], tmpColor[2]);
-   UNCLAMPED_FLOAT_TO_CHAN(color.ub[1], tmpColor[1]);
-   UNCLAMPED_FLOAT_TO_CHAN(color.ub[2], tmpColor[0]);
-   UNCLAMPED_FLOAT_TO_CHAN(color.ub[3], tmpColor[3]);
+   UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[0], tmpColor[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[1], tmpColor[1]);
+   UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[2], tmpColor[2]);
+   UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[3], tmpColor[3]);
+
+   color8888 = INTEL_PACKCOLOR8888(ubcolor[0], ubcolor[1], ubcolor[2], ubcolor[3]);
+   color565 = INTEL_PACKCOLOR565(ubcolor[0], ubcolor[1], ubcolor[2]);
 
    /* Does zoom apply to bitmaps?
     */
-   if (!intel_check_blit_fragment_ops(ctx) ||
+   if (!intel_check_blit_fragment_ops(ctx, tmpColor[3] == 1.0F) ||
        ctx->Pixel.ZoomX != 1.0F || 
        ctx->Pixel.ZoomY != 1.0F)
       return GL_FALSE;
@@ -287,11 +288,11 @@ do_blit_bitmap( GLcontext *ctx,
                                                  dst->cpp,
                                                  (GLubyte *)stipple, 
                                                  sz,
-                                                 color.ui,
+                                                 (dst->cpp == 2) ? color565 : color8888,
                                                  dst->pitch,
                                                  dst->buffer,
                                                  0,
-                                                 dst->tiled,
+                                                 dst->tiling,
                                                  rect.x1 + px,
                                                  rect.y2 - (py + h),
                                                  w, h,
@@ -299,10 +300,8 @@ do_blit_bitmap( GLcontext *ctx,
            } 
         } 
       }
-      intel->need_flush = GL_TRUE;
-   out:
-      intel_batchbuffer_flush(intel->batch);
    }
+out:
    UNLOCK_HARDWARE(intel);