diff options
author | Chia-I Wu <olvaffe@gmail.com> | 2013-06-18 12:33:15 +0800 |
---|---|---|
committer | Chia-I Wu <olvaffe@gmail.com> | 2013-06-18 16:23:13 +0800 |
commit | 443dc15cf77edcaa7804c4277f0cce5d7c1d6b25 (patch) | |
tree | 2373d502ca0da8d105400371b41f9fa6a953f912 /src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c | |
parent | eb2021507556633cd6ba64cda26653e3c43e80df (diff) |
ilo: construct depth/stencil command in create_surface()
Add ilo_gpe_init_zs_surface() to construct
3DSTATE_DEPTH_BUFFER
3DSTATE_STENCIL_BUFFER
3DSTATE_HIER_DEPTH_BUFFER
at surface creation time. This allows fast state emission in draw_vbo().
Diffstat (limited to 'src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c')
-rw-r--r-- | src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c index c60fc014005..e5c9db1be02 100644 --- a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c +++ b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen6.c @@ -717,12 +717,25 @@ gen6_pipeline_wm_depth(struct ilo_3d_pipeline *p, { /* 3DSTATE_DEPTH_BUFFER and 3DSTATE_CLEAR_PARAMS */ if (DIRTY(FRAMEBUFFER) || session->batch_bo_changed) { + const struct ilo_zs_surface *zs; + + if (ilo->fb.state.zsbuf) { + const struct ilo_surface_cso *surface = + (const struct ilo_surface_cso *) ilo->fb.state.zsbuf; + + assert(!surface->is_rt); + zs = &surface->u.zs; + } + else { + zs = &ilo->fb.null_zs; + } + if (p->dev->gen == ILO_GEN(6)) { gen6_wa_pipe_control_post_sync(p, false); gen6_wa_pipe_control_wm_depth_flush(p); } - p->gen6_3DSTATE_DEPTH_BUFFER(p->dev, ilo->fb.state.zsbuf, p->cp); + p->gen6_3DSTATE_DEPTH_BUFFER(p->dev, zs, p->cp); /* TODO */ p->gen6_3DSTATE_CLEAR_PARAMS(p->dev, 0, p->cp); |