1/* 2 * Copyright © 2012 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23 24#include "brw_batch.h" 25 26#include "brw_context.h" 27#include "brw_defines.h" 28#include "brw_multisample_state.h" 29#include "main/framebuffer.h" 30 31void 32gfx6_get_sample_position(struct gl_context *ctx, 33 struct gl_framebuffer *fb, 34 GLuint index, GLfloat *result) 35{ 36 uint8_t bits; 37 38 switch (_mesa_geometric_samples(fb)) { 39 case 1: 40 result[0] = result[1] = 0.5f; 41 return; 42 case 2: 43 bits = brw_multisample_positions_1x_2x >> (8 * index); 44 break; 45 case 4: 46 bits = brw_multisample_positions_4x >> (8 * index); 47 break; 48 case 8: 49 bits = brw_multisample_positions_8x[index >> 2] >> (8 * (index & 3)); 50 break; 51 case 16: 52 bits = brw_multisample_positions_16x[index >> 2] >> (8 * (index & 3)); 53 break; 54 default: 55 unreachable("Not implemented"); 56 } 57 58 /* Convert from U0.4 back to a floating point coordinate. */ 59 result[0] = ((bits >> 4) & 0xf) / 16.0f; 60 result[1] = (bits & 0xf) / 16.0f; 61} 62