Mesa (master): nvc0: only force early fragment tests if requested by shader

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Fri Apr 13 22:16:06 UTC 2012


Module: Mesa
Branch: master
Commit: 36158c199448ce038d9fe913d972f29a655aecab
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=36158c199448ce038d9fe913d972f29a655aecab

Author: Christoph Bumiller <e0425955 at student.tuwien.ac.at>
Date:   Thu Mar  1 21:23:06 2012 +0100

nvc0: only force early fragment tests if requested by shader

---

 src/gallium/drivers/nvc0/nvc0_3d.xml.h         |    2 +-
 src/gallium/drivers/nvc0/nvc0_context.h        |    2 +-
 src/gallium/drivers/nvc0/nvc0_program.c        |    4 ----
 src/gallium/drivers/nvc0/nvc0_shader_state.c   |    5 +++++
 src/gallium/drivers/nvc0/nvc0_state_validate.c |    8 --------
 5 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/nvc0/nvc0_3d.xml.h b/src/gallium/drivers/nvc0/nvc0_3d.xml.h
index 18d2786..05f9673 100644
--- a/src/gallium/drivers/nvc0/nvc0_3d.xml.h
+++ b/src/gallium/drivers/nvc0/nvc0_3d.xml.h
@@ -84,7 +84,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NVC0_3D_LINE_WIDTH_SEPARATE				0x0000020c
 
-#define NVC0_3D_EARLY_FRAGMENT_TESTS				0x00000210
+#define NVC0_3D_FORCE_EARLY_FRAGMENT_TESTS			0x00000210
 
 #define NVC0_3D_MEM_BARRIER					0x0000021c
 #define NVC0_3D_MEM_BARRIER_UNK0				0x00000001
diff --git a/src/gallium/drivers/nvc0/nvc0_context.h b/src/gallium/drivers/nvc0/nvc0_context.h
index 4b35330..7342a6e 100644
--- a/src/gallium/drivers/nvc0/nvc0_context.h
+++ b/src/gallium/drivers/nvc0/nvc0_context.h
@@ -78,7 +78,7 @@ struct nvc0_context {
    struct {
       boolean flushed;
       boolean rasterizer_discard;
-      boolean early_z;
+      boolean early_z_forced;
       boolean prim_restart;
       uint32_t instance_elts; /* bitmask of per-instance elements */
       uint32_t instance_base;
diff --git a/src/gallium/drivers/nvc0/nvc0_program.c b/src/gallium/drivers/nvc0/nvc0_program.c
index b403e2e..e867461 100644
--- a/src/gallium/drivers/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nvc0/nvc0_program.c
@@ -479,10 +479,6 @@ nvc0_fp_gen_header(struct nvc0_program *fp, struct nv50_ir_prog_info *info)
    }
 
    fp->fp.early_z = info->prop.fp.earlyFragTests;
-   if (fp->fp.early_z == FALSE && fp->code_size >= 0x400)
-      fp->fp.early_z = !(info->prop.fp.writesDepth ||
-                         info->prop.fp.usesDiscard ||
-                         (info->io.globalAccess & 2));
 
    return 0;
 }
diff --git a/src/gallium/drivers/nvc0/nvc0_shader_state.c b/src/gallium/drivers/nvc0/nvc0_shader_state.c
index 9d68884..6cbaaf9 100644
--- a/src/gallium/drivers/nvc0/nvc0_shader_state.c
+++ b/src/gallium/drivers/nvc0/nvc0_shader_state.c
@@ -110,6 +110,11 @@ nvc0_fragprog_validate(struct nvc0_context *nvc0)
          return;
    nvc0_program_update_context_state(nvc0, fp, 4);
 
+   if (fp->fp.early_z != nvc0->state.early_z_forced) {
+      nvc0->state.early_z_forced = fp->fp.early_z;
+      IMMED_NVC0(push, NVC0_3D(FORCE_EARLY_FRAGMENT_TESTS), fp->fp.early_z);
+   }
+
    BEGIN_NVC0(push, NVC0_3D(SP_SELECT(5)), 2);
    PUSH_DATA (push, 0x51);
    PUSH_DATA (push, fp->code_base);
diff --git a/src/gallium/drivers/nvc0/nvc0_state_validate.c b/src/gallium/drivers/nvc0/nvc0_state_validate.c
index f235ba5..4211fcd 100644
--- a/src/gallium/drivers/nvc0/nvc0_state_validate.c
+++ b/src/gallium/drivers/nvc0/nvc0_state_validate.c
@@ -442,16 +442,8 @@ static void
 nvc0_validate_derived_1(struct nvc0_context *nvc0)
 {
    struct nouveau_pushbuf *push = nvc0->base.pushbuf;
-   boolean early_z;
    boolean rasterizer_discard;
 
-   early_z = nvc0->fragprog->fp.early_z && !nvc0->zsa->pipe.alpha.enabled;
-
-   if (early_z != nvc0->state.early_z) {
-      nvc0->state.early_z = early_z;
-      IMMED_NVC0(push, NVC0_3D(EARLY_FRAGMENT_TESTS), early_z);
-   }
-
    rasterizer_discard = (!nvc0->fragprog || !nvc0->fragprog->hdr[18]) &&
       !nvc0->zsa->pipe.depth.enabled && !nvc0->zsa->pipe.stencil[0].enabled;
    rasterizer_discard = rasterizer_discard ||




More information about the mesa-commit mailing list