Implement/use fragment kill results
authorBrian <brian.paul@tungstengraphics.com>
Wed, 3 Oct 2007 01:16:57 +0000 (19:16 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Wed, 3 Oct 2007 01:16:57 +0000 (19:16 -0600)
src/mesa/pipe/softpipe/sp_quad_fs.c
src/mesa/pipe/tgsi/exec/tgsi_exec.c
src/mesa/pipe/tgsi/exec/tgsi_exec.h

index 57c01dcfcc359ad716f1531787fe1f657d659bc9..f394c587dc8bf332d3acf76eaee67e84a5202f87 100755 (executable)
@@ -113,7 +113,7 @@ shade_quad(
          machine->InterpCoefs );
    }
    else {
-      tgsi_exec_machine_run( machine );
+      quad->mask &= tgsi_exec_machine_run( machine );
    }
 
    /* store result color (always in output[1]) */
index 158abba270be302eb48f893ea72489c4b0f0bdc1..a0b3bc1c8e693a3fca9bdfdd76cae1bedc40e9b8 100644 (file)
@@ -2359,16 +2359,16 @@ exec_instruction(
 }
 
 
-void
+/**
+ * Run TGSI interpreter.
+ * \return bitmask of "alive" quad components
+ */
+uint
 tgsi_exec_machine_run( struct tgsi_exec_machine *mach )
 {
    uint i;
    int pc = 0;
 
-#if XXX_SSE
-   mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] = 0;
-#else
-
    mach->CondMask = 0xf;
    mach->LoopMask = 0xf;
    mach->ContMask = 0xf;
@@ -2399,8 +2399,6 @@ tgsi_exec_machine_run( struct tgsi_exec_machine *mach )
       exec_instruction( mach, mach->Instructions + pc, &pc );
    }
 
-#endif
-
 #if 0
    /* we scale from floats in [0,1] to Zbuffer ints in sp_quad_depth_test.c */
    if (mach->Processor == TGSI_PROCESSOR_FRAGMENT) {
@@ -2411,6 +2409,8 @@ tgsi_exec_machine_run( struct tgsi_exec_machine *mach )
          mach->Outputs[0].xyzw[2].f[i] *= ctx->DrawBuffer->_DepthMaxF;
    }
 #endif
+
+   return ~mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0];
 }
 
 
index e7827ecce158815be23c509ca6893e159aba3a99..354d5df6c2690d3146c99b050ece34bd057ee734 100644 (file)
@@ -175,7 +175,7 @@ tgsi_exec_machine_init(
    unsigned numSamplers,
    struct tgsi_sampler *samplers);
 
-void
+uint
 tgsi_exec_machine_run(
    struct tgsi_exec_machine *mach );