Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2013 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 <stdint.h>
  25.  
  26. /**
  27.  * 1x MSAA has a single sample at the center: (0.5, 0.5) -> (0x8, 0x8).
  28.  *
  29.  * 2x MSAA sample positions are (0.25, 0.25) and (0.75, 0.75):
  30.  *   4 c
  31.  * 4 0
  32.  * c   1
  33.  */
  34. static const uint32_t
  35. brw_multisample_positions_1x_2x = 0x0088cc44;
  36.  
  37. /**
  38.  * Sample positions:
  39.  *   2 6 a e
  40.  * 2   0
  41.  * 6       1
  42.  * a 2
  43.  * e     3
  44.  */
  45. static const uint32_t
  46. brw_multisample_positions_4x = 0xae2ae662;
  47.  
  48. /**
  49.  * Sample positions are based on a solution to the "8 queens" puzzle.
  50.  * Rationale: in a solution to the 8 queens puzzle, no two queens share
  51.  * a row, column, or diagonal.  This is a desirable property for samples
  52.  * in a multisampling pattern, because it ensures that the samples are
  53.  * relatively uniformly distributed through the pixel.
  54.  *
  55.  * There are several solutions to the 8 queens puzzle (see
  56.  * http://en.wikipedia.org/wiki/Eight_queens_puzzle).  This solution was
  57.  * chosen because it has a queen close to the center; this should
  58.  * improve the accuracy of centroid interpolation, since the hardware
  59.  * implements centroid interpolation by choosing the centermost sample
  60.  * that overlaps with the primitive being drawn.
  61.  *
  62.  * Note: from the Ivy Bridge PRM, Vol2 Part1 p304 (3DSTATE_MULTISAMPLE:
  63.  * Programming Notes):
  64.  *
  65.  *     "When programming the sample offsets (for NUMSAMPLES_4 or _8 and
  66.  *     MSRASTMODE_xxx_PATTERN), the order of the samples 0 to 3 (or 7
  67.  *     for 8X) must have monotonically increasing distance from the
  68.  *     pixel center. This is required to get the correct centroid
  69.  *     computation in the device."
  70.  *
  71.  * Sample positions:
  72.  *   1 3 5 7 9 b d f
  73.  * 1     5
  74.  * 3           2
  75.  * 5               6
  76.  * 7 4
  77.  * 9       0
  78.  * b             3
  79.  * d         1
  80.  * f   7
  81.  */
  82. static const uint32_t
  83. brw_multisample_positions_8x[] = { 0xdbb39d79, 0x3ff55117 };
  84.