mesa/st: support l8 as well as i8 in bitmap code
authorKeith Whitwell <keithw@vmware.com>
Tue, 24 Feb 2009 11:58:58 +0000 (11:58 +0000)
committerKeith Whitwell <keithw@vmware.com>
Tue, 24 Feb 2009 12:14:50 +0000 (12:14 +0000)
Also don't send the partial program fragment down to hardware -- the
program will never be used in that form.

src/mesa/state_tracker/st_cb_bitmap.c

index 66d7cbf8e6a48e5130f77d03e4fa8f29120d7e2e..f55a5e713ffee55d89a815b7aa71fde1b8741108 100644 (file)
@@ -142,6 +142,10 @@ make_bitmap_fragment_program(GLcontext *ctx, GLuint samplerIndex)
    /* KIL if -tmp0 < 0 # texel=0 -> keep / texel=0 -> discard */
    p->Instructions[ic].Opcode = OPCODE_KIL;
    p->Instructions[ic].SrcReg[0].File = PROGRAM_TEMPORARY;
+
+   if (ctx->st->bitmap.tex_format == PIPE_FORMAT_L8_UNORM)
+      p->Instructions[ic].SrcReg[0].Swizzle = SWIZZLE_XXXX;
+
    p->Instructions[ic].SrcReg[0].Index = 0;
    p->Instructions[ic].SrcReg[0].NegateBase = NEGATE_XYZW;
    ic++;
@@ -157,7 +161,11 @@ make_bitmap_fragment_program(GLcontext *ctx, GLuint samplerIndex)
 
    stfp = (struct st_fragment_program *) p;
    stfp->Base.UsesKill = GL_TRUE;
-   st_translate_fragment_program(ctx->st, stfp, NULL);
+
+   /* No need to send this incomplete program down to hardware:
+    *
+    * st_translate_fragment_program(ctx->st, stfp, NULL);
+    */
 
    return stfp;
 }
@@ -786,6 +794,10 @@ st_init_bitmap(struct st_context *st)
                                    PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
       st->bitmap.tex_format = PIPE_FORMAT_I8_UNORM;
    }
+   else if (screen->is_format_supported(screen, PIPE_FORMAT_L8_UNORM, PIPE_TEXTURE_2D, 
+                                        PIPE_TEXTURE_USAGE_SAMPLER, 0)) {
+      st->bitmap.tex_format = PIPE_FORMAT_L8_UNORM;
+   }
    else {
       /* XXX support more formats */
       assert(0);