[Mesa-dev] [PATCH 08/28] i965/blorp: Simplify the sample layout calculation

Jason Ekstrand jason at jlekstrand.net
Tue May 10 23:16:28 UTC 2016


---
 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index dd22e6d..897ce99 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -1506,6 +1506,9 @@ brw_blorp_blit_program::manual_blend_bilinear(unsigned num_samples)
       *                        ---------                            ---------
       *                        | 6 | 7 |                            | 7 | 1 |
       *                        ---------                            ---------
+      *
+      * Fortunately, this can be done fairly easily as:
+      * S' = (0x17306425 >> (S * 4)) & 0xf
       */
       emit_frc(vec16(t1_f), x_sample_coords);
       emit_frc(vec16(t2_f), y_sample_coords);
@@ -1515,23 +1518,10 @@ brw_blorp_blit_program::manual_blend_bilinear(unsigned num_samples)
       emit_mov(vec16(S), t1_f);
 
       if (num_samples == 8) {
-         /* Map the sample index to a sample number */
-         emit_cmp_if(BRW_CONDITIONAL_L, S, brw_imm_d(4));
-         {
-            emit_mov(vec16(t2), brw_imm_d(5));
-            emit_if_eq_mov(S, 1, vec16(t2), 2);
-            emit_if_eq_mov(S, 2, vec16(t2), 4);
-            emit_if_eq_mov(S, 3, vec16(t2), 6);
-         }
-         emit_else();
-         {
-            emit_mov(vec16(t2), brw_imm_d(0));
-            emit_if_eq_mov(S, 5, vec16(t2), 3);
-            emit_if_eq_mov(S, 6, vec16(t2), 7);
-            emit_if_eq_mov(S, 7, vec16(t2), 1);
-         }
-         emit_endif();
-         emit_mov(vec16(S), t2);
+         emit_mov(vec16(t2), brw_imm_d(0x17306425));
+         emit_shl(vec16(S), S, brw_imm_d(2));
+         emit_shr(vec16(S), t2, S);
+         emit_and(vec16(S), S, brw_imm_d(0xf));
       }
       texel_fetch(texture_data[i]);
    }
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list