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