<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, May 7, 2018 at 7:49 AM, Nicolai Hähnle <span dir="ltr"><<a href="mailto:nhaehnle@gmail.com" target="_blank">nhaehnle@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_7721409494001820660m_-681478858363758122HOEnZb"><div class="m_7721409494001820660m_-681478858363758122h5">On 02.05.2018 06:13, Marek Olšák wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
From: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>><br>
<br>
---<br>
  src/gallium/drivers/radeonsi/s<wbr>i_state.c      |   3 -<br>
  src/gallium/drivers/radeonsi/s<wbr>i_state_msaa.c | 154 ++++++++++++-------<br>
  2 files changed, 98 insertions(+), 59 deletions(-)<br>
<br>
diff --git a/src/gallium/drivers/radeonsi<wbr>/si_state.c b/src/gallium/drivers/radeonsi<wbr>/si_state.c<br>
index 62d0ed99d94..3f9332081bf 100644<br>
--- a/src/gallium/drivers/radeonsi<wbr>/si_state.c<br>
+++ b/src/gallium/drivers/radeonsi<wbr>/si_state.c<br>
@@ -4688,23 +4688,20 @@ static void si_init_config(struct si_context *sctx)<br>
                si_pm4_set_reg(pm4, R_028B98_VGT_STRMOUT_BUFFER_CO<wbr>NFIG, 0x0);<br>
        }<br>
        si_pm4_set_reg(pm4, R_028AA0_VGT_INSTANCE_STEP_RAT<wbr>E_0, 1);<br>
        if (!has_clear_state)<br>
                si_pm4_set_reg(pm4, R_028AB8_VGT_VTX_CNT_EN, 0x0);<br>
        if (sctx->chip_class < CIK)<br>
                si_pm4_set_reg(pm4, R_008A14_PA_CL_ENHANCE, S_008A14_NUM_CLIP_SEQ(3) |<br>
                               S_008A14_CLIP_VTX_REORDER_ENA<wbr>(1));<br>
  -     si_pm4_set_reg(pm4, R_028BD4_PA_SC_CENTROID_PRIORI<wbr>TY_0, 0x76543210);<br>
-       si_pm4_set_reg(pm4, R_028BD8_PA_SC_CENTROID_PRIORI<wbr>TY_1, 0xfedcba98);<br>
-<br>
        if (!has_clear_state)<br>
                si_pm4_set_reg(pm4, R_02882C_PA_SU_PRIM_FILTER_CNT<wbr>L, 0);<br>
        /* CLEAR_STATE doesn't clear these correctly on certain generations.<br>
         * I don't know why. Deduced by trial and error.<br>
         */<br>
        if (sctx->chip_class <= CIK) {<br>
                si_pm4_set_reg(pm4, R_028B28_VGT_STRMOUT_DRAW_OPAQ<wbr>UE_OFFSET, 0);<br>
                si_pm4_set_reg(pm4, R_028204_PA_SC_WINDOW_SCISSOR_<wbr>TL, S_028204_WINDOW_OFFSET_DISABLE<wbr>(1));<br>
                si_pm4_set_reg(pm4, R_028240_PA_SC_GENERIC_SCISSOR<wbr>_TL, S_028240_WINDOW_OFFSET_DISABLE<wbr>(1));<br>
diff --git a/src/gallium/drivers/radeonsi<wbr>/si_state_msaa.c b/src/gallium/drivers/radeonsi<wbr>/si_state_msaa.c<br>
index 7ee17a9f292..0f9e0fea1c7 100644<br>
--- a/src/gallium/drivers/radeonsi<wbr>/si_state_msaa.c<br>
+++ b/src/gallium/drivers/radeonsi<wbr>/si_state_msaa.c<br>
@@ -30,45 +30,97 @@<br>
         (((unsigned)(s1x) & 0xf) << 8)  | (((unsigned)(s1y) & 0xf) << 12) | \<br>
         (((unsigned)(s2x) & 0xf) << 16) | (((unsigned)(s2y) & 0xf) << 20) | \<br>
         (((unsigned)(s3x) & 0xf) << 24) | (((unsigned)(s3y) & 0xf) << 28))<br>
    /* For obtaining location coordinates from registers */<br>
  #define SEXT4(x)              ((int)((x) | ((x) & 0x8 ? 0xfffffff0 : 0)))<br>
  #define GET_SFIELD(reg, index)        SEXT4(((reg) >> ((index) * 4)) & 0xf)<br>
  #define GET_SX(reg, index)    GET_SFIELD((reg)[(index) / 4], ((index) % 4) * 2)<br>
  #define GET_SY(reg, index)    GET_SFIELD((reg)[(index) / 4], ((index) % 4) * 2 + 1)<br>
  +/* The following sample ordering is required by EQAA.<br>
+ *<br>
+ * Sample 0 is approx. in the top-left quadrant.<br>
+ * Sample 1 is approx. in the bottom-right quadrant.<br>
+ *<br>
+ * Sample 2 is approx. in the bottom-left quadrant.<br>
+ * Sample 3 is approx. in the top-right quadrant.<br>
+ * (sample I={2,3} adds more detail to the vicinity of sample I-2)<br>
</blockquote>
<br></div></div>
Isn't technically the requirement only that 0/1 are in opposite quadrants and 2/3 fill in the rest. Anyway,<br></blockquote><div><br></div><div>Yes, you can say that, and indeed it doesn't make a lot of sense to talk about vicinity with only 4 samples, but it's how EQAA works when you have fewer Z samples than coverage samples. In that case, the hw has to use the closest defined Z sample, which is I-2. So the definition that "sample I={2,3} adds more detail to the vicinity of sample I-2" is accurate with respect to EQAA with undefined Z samples.<br><br></div><div>Marek<br></div></div><br></div></div>