i965: Duplicate less code in GetSamplePositions driver hook.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Feb 2014 00:29:41 +0000 (16:29 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Feb 2014 16:18:28 +0000 (08:18 -0800)
The 4x and 8x cases contained identical code for extracting the X and
Y sample offset values and converting them from U0.4 back to float.

Without this refactoring, we'd have to duplicate it a third time in
order to support 2x MSAA.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/gen6_multisample_state.c

index f28e88022c6def3bbf94f60c5b4530336e5e0f27..fd3dd0e53637bb221c0a2992d59922703b679e77 100644 (file)
@@ -32,25 +32,26 @@ gen6_get_sample_position(struct gl_context *ctx,
                          struct gl_framebuffer *fb,
                          GLuint index, GLfloat *result)
 {
+   uint8_t bits;
+
    switch (fb->Visual.samples) {
    case 1:
       result[0] = result[1] = 0.5f;
+      return;
+   case 4:
+      bits = brw_multisample_positions_4x[0] >> (8 * index);
       break;
-   case 4: {
-      uint8_t val = (uint8_t)(brw_multisample_positions_4x[0] >> (8*index));
-      result[0] = ((val >> 4) & 0xf) / 16.0f;
-      result[1] = (val & 0xf) / 16.0f;
-      break;
-   }
-   case 8: {
-      uint8_t val = (uint8_t)(brw_multisample_positions_8x[index>>2] >> (8*(index & 3)));
-      result[0] = ((val >> 4) & 0xf) / 16.0f;
-      result[1] = (val & 0xf) / 16.0f;
+   case 8:
+      bits = brw_multisample_positions_8x[index >> 2] >> (8 * (index & 3));
       break;
-   }
    default:
       assert(!"Not implemented");
+      return;
    }
+
+   /* Convert from U0.4 back to a floating point coordinate. */
+   result[0] = ((bits >> 4) & 0xf) / 16.0f;
+   result[1] = (bits & 0xf) / 16.0f;
 }
 
 /**