Module: Mesa
Branch: staging/23.1
Commit: 71737d9a0e5e76eec307d1516337c31475c04ff5
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=71737d9a0e5e76eec307d1516337c31475c04ff5

Author: Danylo Piliaiev <[email protected]>
Date:   Wed Jul 19 17:37:53 2023 +0200

freedreno/regs: Rename SP_FS_CTRL_REG0.DIFF_FINE into LODPIXMASK

That's the "real" name of the field.

It enables ALL helper invocations in a quad, which is necessary for
fine derivatives and quad subgroup ops.

While PIXLODENABLE by itself enables only 3 out 4 fragments in a quad.

Cc: mesa-stable

Signed-off-by: Danylo Piliaiev <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24211>
(cherry picked from commit 696f37f5c3f4527cc204906f272bc33c5eae8ea0)

---

 .pick_status.json                                 |  2 +-
 src/freedreno/registers/adreno/a6xx.xml           | 15 +++++++++++++--
 src/freedreno/vulkan/tu_pipeline.cc               |  2 +-
 src/gallium/drivers/freedreno/a6xx/fd6_program.cc |  2 +-
 4 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index b930171dba3..ad95d2163da 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -1615,7 +1615,7 @@
         "description": "freedreno/regs: Rename SP_FS_CTRL_REG0.DIFF_FINE into 
LODPIXMASK",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/freedreno/registers/adreno/a6xx.xml 
b/src/freedreno/registers/adreno/a6xx.xml
index 79261dba648..320fb5e0b2e 100644
--- a/src/freedreno/registers/adreno/a6xx.xml
+++ b/src/freedreno/registers/adreno/a6xx.xml
@@ -3365,11 +3365,22 @@ to upconvert to 32b float internally?
                <bitfield name="THREADSIZE" pos="20" type="a6xx_threadsize"/>
                <bitfield name="UNK21" pos="21" type="boolean"/>
                <bitfield name="VARYING" pos="22" type="boolean"/>
-               <bitfield name="DIFF_FINE" pos="23" type="boolean"/>
+               <bitfield name="LODPIXMASK" pos="23" type="boolean">
+                       <doc>
+                               Enable ALL helper invocations in a quad. 
Necessary for
+                               fine derivatives and quad subgroup ops.
+                       </doc>
+               </bitfield>
                <!-- note: vk blob uses bit24 -->
                <bitfield name="UNK24" pos="24" type="boolean"/>
                <bitfield name="UNK25" pos="25" type="boolean"/>
-               <bitfield name="PIXLODENABLE" pos="26" type="boolean"/>
+               <bitfield name="PIXLODENABLE" pos="26" type="boolean">
+                       <doc>
+                               Enable helper invocations. Enables 3 out of 4 
fragments,
+                               because the coarse derivatives only use half of 
the quad
+                               and so one pixel's value is always unused.
+                       </doc>
+               </bitfield>
                <bitfield name="UNK27" pos="27" type="boolean"/>
                <bitfield name="EARLYPREAMBLE" pos="28" type="boolean"/>
                <bitfield name="MERGEDREGS" pos="31" type="boolean"/>
diff --git a/src/freedreno/vulkan/tu_pipeline.cc 
b/src/freedreno/vulkan/tu_pipeline.cc
index f7a70d7dd20..5610135bfbd 100644
--- a/src/freedreno/vulkan/tu_pipeline.cc
+++ b/src/freedreno/vulkan/tu_pipeline.cc
@@ -504,7 +504,7 @@ tu6_emit_xs(struct tu_cs *cs,
                .branchstack = ir3_shader_branchstack_hw(xs),
                .threadsize = thrsz,
                .varying = xs->total_in != 0,
-               .diff_fine = xs->need_fine_derivatives,
+               .lodpixmask = xs->need_fine_derivatives,
                /* unknown bit, seems unnecessary */
                .unk24 = true,
                .pixlodenable = xs->need_pixlod,
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.cc 
b/src/gallium/drivers/freedreno/a6xx/fd6_program.cc
index 99c7c94ea27..8b061fa23bd 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.cc
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.cc
@@ -895,7 +895,7 @@ setup_stateobj(struct fd_ringbuffer *ring, struct 
fd_context *ctx,
       ring,
       A6XX_SP_FS_CTRL_REG0_THREADSIZE(fssz) |
          COND(enable_varyings, A6XX_SP_FS_CTRL_REG0_VARYING) | 0x1000000 |
-         COND(fs->need_fine_derivatives, A6XX_SP_FS_CTRL_REG0_DIFF_FINE) |
+         COND(fs->need_fine_derivatives, A6XX_SP_FS_CTRL_REG0_LODPIXMASK) |
          A6XX_SP_FS_CTRL_REG0_FULLREGFOOTPRINT(fs->info.max_reg + 1) |
          A6XX_SP_FS_CTRL_REG0_HALFREGFOOTPRINT(fs->info.max_half_reg + 1) |
          COND(fs->mergedregs, A6XX_SP_FS_CTRL_REG0_MERGEDREGS) |

Reply via email to