Home | History | Annotate | Download | only in i965
      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 #ifndef BRW_MULTISAMPLE_STATE_H
     25 #define BRW_MULTISAMPLE_STATE_H
     26 
     27 #include <stdint.h>
     28 
     29 /**
     30  * Note: There are no standard multisample positions defined in OpenGL
     31  * specifications. Implementations have the freedom to pick the positions
     32  * which give plausible results. But the Vulkan specification does define
     33  * standard sample positions. So, we decided to pick the same pattern in
     34  * OpenGL as in Vulkan to keep it uniform across drivers and also to avoid
     35  * breaking applications which rely on this standard pattern.
     36  */
     37 
     38 /**
     39  * 1x MSAA has a single sample at the center: (0.5, 0.5) -> (0x8, 0x8).
     40  *
     41  * 2x MSAA sample positions are (0.25, 0.25) and (0.75, 0.75):
     42  *   4 c
     43  * 4 0
     44  * c   1
     45  */
     46 static const uint32_t
     47 brw_multisample_positions_1x_2x = 0x0088cc44;
     48 
     49 /**
     50  * Sample positions:
     51  *   2 6 a e
     52  * 2   0
     53  * 6       1
     54  * a 2
     55  * e     3
     56  */
     57 static const uint32_t
     58 brw_multisample_positions_4x = 0xae2ae662;
     59 
     60 /**
     61  * Sample positions:
     62  *
     63  * From the Ivy Bridge PRM, Vol2 Part1 p304 (3DSTATE_MULTISAMPLE:
     64  * Programming Notes):
     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               7
     74  * 3     3
     75  * 5         0
     76  * 7 5
     77  * 9             2
     78  * b       1
     79  * d   4
     80  * f           6
     81  */
     82 static const uint32_t
     83 brw_multisample_positions_8x[] = { 0x53d97b95, 0xf1bf173d };
     84 
     85 /**
     86  * Sample positions:
     87  *
     88  *    0 1 2 3 4 5 6 7 8 9 a b c d e f
     89  * 0   15
     90  * 1                  9
     91  * 2         10
     92  * 3                        7
     93  * 4                               13
     94  * 5                1
     95  * 6        4
     96  * 7                          3
     97  * 8 12
     98  * 9                    0
     99  * a            2
    100  * b                            6
    101  * c     11
    102  * d                      5
    103  * e              8
    104  * f                             14
    105  */
    106 static const uint32_t
    107 brw_multisample_positions_16x[] = {
    108    0xc75a7599, 0xb3dbad36, 0x2c42816e, 0x10eff408
    109 };
    110 
    111 #endif /* BRW_MULTISAMPLE_STATE_H */
    112