X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fgen7_misc_state.c;h=1a9e645084c5a8c924cc41980939c7d8ca26c0e2;hb=8c47ccb13a198f4d38c772df1de457de34dde23e;hp=cc74570ee372646e635ff37c909f0af810d7764c;hpb=aedcd466bb9d899e892f9d47f96fbca5e5647133;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/gen7_misc_state.c b/src/mesa/drivers/dri/i965/gen7_misc_state.c index cc74570ee37..1a9e645084c 100644 --- a/src/mesa/drivers/dri/i965/gen7_misc_state.c +++ b/src/mesa/drivers/dri/i965/gen7_misc_state.c @@ -57,7 +57,7 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, return; } - intel_emit_depth_stall_flushes(brw); + brw_emit_depth_stall_flushes(brw); irb = intel_get_renderbuffer(fb, BUFFER_DEPTH); if (!irb) @@ -83,7 +83,7 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, break; case GL_TEXTURE_3D: assert(mt); - depth = MAX2(mt->logical_depth0, 1); + depth = mt->surf.logical_level0_px.depth; /* fallthrough */ default: surftype = translate_tex_target(gl_target); @@ -95,8 +95,8 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, lod = irb ? irb->mt_level - irb->mt->first_level : 0; if (mt) { - width = mt->logical_width0; - height = mt->logical_height0; + width = mt->surf.logical_level0_px.width; + height = mt->surf.logical_level0_px.height; } /* _NEW_DEPTH, _NEW_STENCIL, _NEW_BUFFERS */ @@ -105,11 +105,11 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, OUT_BATCH(GEN7_3DSTATE_DEPTH_BUFFER << 16 | (7 - 2)); /* 3DSTATE_DEPTH_BUFFER dw1 */ - OUT_BATCH((depth_mt ? depth_mt->pitch - 1 : 0) | + OUT_BATCH((depth_mt ? depth_mt->surf.row_pitch - 1 : 0) | (depthbuffer_format << 18) | ((hiz ? 1 : 0) << 22) | - ((stencil_mt != NULL && ctx->Stencil._WriteEnabled) << 27) | - ((ctx->Depth.Mask != 0) << 28) | + ((stencil_mt != NULL && brw->stencil_write_enabled) << 27) | + (brw_depth_writes_enabled(brw) << 28) | (surftype << 29)); /* 3DSTATE_DEPTH_BUFFER dw2 */ @@ -145,12 +145,13 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, OUT_BATCH(0); ADVANCE_BATCH(); } else { - struct intel_mipmap_tree *hiz_mt = depth_mt->hiz_buf->mt; + assert(depth_mt); + BEGIN_BATCH(3); OUT_BATCH(GEN7_3DSTATE_HIER_DEPTH_BUFFER << 16 | (3 - 2)); OUT_BATCH((mocs << 25) | - (hiz_mt->pitch - 1)); - OUT_RELOC(hiz_mt->bo, + (depth_mt->hiz_buf->pitch - 1)); + OUT_RELOC(depth_mt->hiz_buf->bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0); @@ -164,23 +165,14 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, OUT_BATCH(0); ADVANCE_BATCH(); } else { + stencil_mt->r8stencil_needs_update = true; const int enabled = brw->is_haswell ? HSW_STENCIL_ENABLED : 0; BEGIN_BATCH(3); OUT_BATCH(GEN7_3DSTATE_STENCIL_BUFFER << 16 | (3 - 2)); - /* The stencil buffer has quirky pitch requirements. From the - * Sandybridge PRM, Volume 2 Part 1, page 329 (3DSTATE_STENCIL_BUFFER - * dword 1 bits 16:0 - Surface Pitch): - * - * The pitch must be set to 2x the value computed based on width, as - * the stencil buffer is stored with two rows interleaved. - * - * While the Ivybridge PRM lacks this comment, the BSpec contains the - * same text, and experiments indicate that this is necessary. - */ OUT_BATCH(enabled | mocs << 25 | - (2 * stencil_mt->pitch - 1)); + (stencil_mt->surf.row_pitch - 1)); OUT_RELOC(stencil_mt->bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0); @@ -189,7 +181,12 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, BEGIN_BATCH(3); OUT_BATCH(GEN7_3DSTATE_CLEAR_PARAMS << 16 | (3 - 2)); - OUT_BATCH(depth_mt ? depth_mt->depth_clear_value : 0); + if (depth_mt) { + OUT_BATCH(brw_convert_depth_value(depth_mt->format, + depth_mt->fast_clear_color.f32[0])); + } else { + OUT_BATCH(0); + } OUT_BATCH(1); ADVANCE_BATCH(); @@ -204,7 +201,8 @@ const struct brw_tracked_state gen7_depthbuffer = { .mesa = _NEW_BUFFERS | _NEW_DEPTH | _NEW_STENCIL, - .brw = BRW_NEW_BATCH, + .brw = BRW_NEW_BATCH | + BRW_NEW_BLORP, }, .emit = brw_emit_depthbuffer, };