cell: minor improvements to fragment code-gen
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 11 Sep 2008 23:08:52 +0000 (17:08 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 11 Sep 2008 23:10:32 +0000 (17:10 -0600)
src/gallium/drivers/cell/ppu/cell_gen_fragment.c

index 5622701ddacfc512c8dc5b961cdb8f09d9fbe1b6..06219d4e98097ee35e46edab2537f6d0f8a8f941 100644 (file)
@@ -265,6 +265,8 @@ gen_blend(const struct pipe_blend_state *blend,
    int one_reg = spe_allocate_available_register(f);
    int tmp_reg = spe_allocate_available_register(f);
 
+   boolean one_reg_set = false; /* avoid setting one_reg more than once */
+
    ASSERT(blend->blend_enable);
 
    /* Unpack/convert framebuffer colors from four 32-bit packed colors
@@ -275,7 +277,7 @@ gen_blend(const struct pipe_blend_state *blend,
       int mask_reg = spe_allocate_available_register(f);
 
       /* mask = {0x000000ff, 0x000000ff, 0x000000ff, 0x000000ff} */
-      spe_fsmbi(f, mask_reg, 0x1111);
+      spe_load_int(f, mask_reg, 0xff);
 
       /* XXX there may be more clever ways to implement the following code */
       switch (color_format) {
@@ -418,7 +420,10 @@ gen_blend(const struct pipe_blend_state *blend,
       break;
    case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
       /* one = {1.0, 1.0, 1.0, 1.0} */
-      spe_load_float(f, one_reg, 1.0f);
+      if (!one_reg_set) {
+         spe_load_float(f, one_reg, 1.0f);
+         one_reg_set = true;
+      }
       /* tmp = one - fragA */
       spe_fs(f, tmp_reg, one_reg, fragA_reg);
       /* term = fb * tmp */
@@ -446,7 +451,10 @@ gen_blend(const struct pipe_blend_state *blend,
       break;
    case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
       /* one = {1.0, 1.0, 1.0, 1.0} */
-      spe_load_float(f, one_reg, 1.0f);
+      if (!one_reg_set) {
+         spe_load_float(f, one_reg, 1.0f);
+         one_reg_set = true;
+      }
       /* tmp = one - fragA */
       spe_fs(f, tmp_reg, one_reg, fragA_reg);
       /* termA = fbA * tmp */