diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2014-11-30 01:14:17 -0800 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2014-12-04 15:04:35 -0800 |
commit | 8daf3c53c7df806f7302446acb8a58d391f69779 (patch) | |
tree | 753ff5de419c6ab93481f467686b4d433ec294de /src/mesa/drivers/dri/i965/gen8_depth_state.c | |
parent | 4265148ac62366033cfa6ae37e6a8f8c3e1fa864 (diff) | |
download | external_mesa3d-8daf3c53c7df806f7302446acb8a58d391f69779.zip external_mesa3d-8daf3c53c7df806f7302446acb8a58d391f69779.tar.gz external_mesa3d-8daf3c53c7df806f7302446acb8a58d391f69779.tar.bz2 |
i965: Move PSCDEPTH calculations from draw time to compile time.
The "Pixel Shader Computed Depth Mode" value is entirely based on the
shader program, so we can easily do it at compile time. This avoids the
if+switch on every 3DSTATE_WM (Gen7)/3DSTATE_PS_EXTRA (Gen8+) upload,
and shares a bit more code.
This also simplifies the PMA stall code, making it match the formula
more closely, and drops a BRW_NEW_FRAGMENT_PROGRAM dependency. (Note
that the previous comment was wrong - the code and the documentation
have != PSCDEPTH_OFF, not ==.)
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/gen8_depth_state.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/gen8_depth_state.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/gen8_depth_state.c b/src/mesa/drivers/dri/i965/gen8_depth_state.c index fc0e3fd..e428089 100644 --- a/src/mesa/drivers/dri/i965/gen8_depth_state.c +++ b/src/mesa/drivers/dri/i965/gen8_depth_state.c @@ -225,8 +225,6 @@ static bool pma_fix_enable(const struct brw_context *brw) { const struct gl_context *ctx = &brw->ctx; - /* BRW_NEW_FRAGMENT_PROGRAM */ - const struct gl_fragment_program *fp = brw->fragment_program; /* _NEW_BUFFERS */ struct intel_renderbuffer *depth_irb = intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_DEPTH); @@ -279,12 +277,11 @@ pma_fix_enable(const struct brw_context *brw) */ const bool stencil_writes_enabled = ctx->Stencil._WriteEnabled; - /* BRW_NEW_FRAGMENT_PROGRAM: - * 3DSTATE_PS_EXTRA::Pixel Shader Computed Depth Mode == PSCDEPTH_OFF + /* BRW_NEW_FS_PROG_DATA: + * 3DSTATE_PS_EXTRA::Pixel Shader Computed Depth Mode != PSCDEPTH_OFF */ const bool ps_computes_depth = - (fp->Base.OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH)) && - fp->FragDepthLayout != FRAG_DEPTH_LAYOUT_UNCHANGED; + brw->wm.prog_data->computed_depth_mode != BRW_PSCDEPTH_OFF; /* BRW_NEW_FS_PROG_DATA: 3DSTATE_PS_EXTRA::PixelShaderKillsPixels * BRW_NEW_FS_PROG_DATA: 3DSTATE_PS_EXTRA::oMask Present to RenderTarget @@ -372,8 +369,7 @@ const struct brw_tracked_state gen8_pma_fix = { _NEW_DEPTH | _NEW_MULTISAMPLE | _NEW_STENCIL, - .brw = BRW_NEW_FRAGMENT_PROGRAM | - BRW_NEW_FS_PROG_DATA, + .brw = BRW_NEW_FS_PROG_DATA, }, .emit = gen8_emit_pma_stall_workaround }; |