struct brw_context::hiz contains state needed to perform HiZ meta-ops and indicates if a HiZ operation is currently in progress.
Signed-off-by: Chad Versace <c...@chad-versace.us> --- src/mesa/drivers/dri/i965/brw_context.h | 35 +++++++++++++++++++++++++++++++ src/mesa/drivers/dri/i965/brw_hiz.c | 20 +++++++++++++++++ src/mesa/drivers/dri/i965/brw_hiz.h | 8 +++++++ src/mesa/drivers/dri/i965/brw_vtbl.c | 1 + 4 files changed, 64 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 6772029..177aa67 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -898,6 +898,41 @@ struct brw_context enum state_struct_type type; } *state_batch_list; int state_batch_count; + + /** + * \brief State needed to execute HiZ meta-ops + * + * All fields except \c op are initialized by brw_hiz_init(). + */ + struct brw_hiz_state { + /** + * \brief Indicates which HiZ operation is in progress. + * + * See the following sections of the Sandy Bridge PRM, Volume 1, Part2: + * - 7.5.3.1 Depth Buffer Clear + * - 7.5.3.2 Depth Buffer Resolve + * - 7.5.3.3 Hierarchical Depth Buffer Resolve + */ + enum brw_hiz_op { + BRW_HIZ_OP_NONE = 0, + BRW_HIZ_OP_DEPTH_CLEAR, + BRW_HIZ_OP_DEPTH_RESOLVE, + BRW_HIZ_OP_HIZ_RESOLVE, + } op; + + /** \brief Shader state */ + struct { + GLuint program; + GLuint position_vbo; + GLint position_location; + } shader; + + /** \brief VAO for the rectangle primitive's vertices. */ + GLuint vao; + + GLuint fbo; + struct gl_renderbuffer *depth_rb; + } hiz; }; diff --git a/src/mesa/drivers/dri/i965/brw_hiz.c b/src/mesa/drivers/dri/i965/brw_hiz.c index 297b654..4e8baa0 100644 --- a/src/mesa/drivers/dri/i965/brw_hiz.c +++ b/src/mesa/drivers/dri/i965/brw_hiz.c @@ -21,6 +21,11 @@ * IN THE SOFTWARE. */ +#include "mesa/main/arrayobj.h" +#include "mesa/main/bufferobj.h" +#include "mesa/main/fbobject.h" +#include "mesa/main/shaderapi.h" + #include "brw_hiz.h" void @@ -38,3 +43,18 @@ brw_hiz_resolve_hizbuffer(struct intel_context *intel, /* stub */ abort(); } + +void +brw_hiz_destroy(struct brw_context *brw) +{ + if (brw->hiz.fbo == 0) { + /* brw->hiz was never initialized. */ + return; + } + + _mesa_DeleteFramebuffersEXT(1, &brw->hiz.fbo); + _mesa_DeleteRenderbuffersEXT(1, &brw->hiz.depth_rb->Name); + _mesa_DeleteProgram(brw->hiz.shader.program); + _mesa_DeleteVertexArraysAPPLE(1, &brw->hiz.vao); + _mesa_DeleteBuffersARB(1, &brw->hiz.shader.position_vbo); +} diff --git a/src/mesa/drivers/dri/i965/brw_hiz.h b/src/mesa/drivers/dri/i965/brw_hiz.h index 1fec0f7..9962d50 100644 --- a/src/mesa/drivers/dri/i965/brw_hiz.h +++ b/src/mesa/drivers/dri/i965/brw_hiz.h @@ -33,3 +33,11 @@ brw_hiz_resolve_depthbuffer(struct intel_context *intel, void brw_hiz_resolve_hizbuffer(struct intel_context *intel, struct intel_region *depth_region); + +/** + * \brief Destroy brw->hiz + * + * Called by brw_destroy() during context destruction. + */ +void +brw_hiz_destroy(struct brw_context *brw); diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c index 135887b..4338d80 100644 --- a/src/mesa/drivers/dri/i965/brw_vtbl.c +++ b/src/mesa/drivers/dri/i965/brw_vtbl.c @@ -70,6 +70,7 @@ static void brw_destroy_context( struct intel_context *intel ) brw_destroy_state(brw); brw_draw_destroy( brw ); brw_clear_validated_bos(brw); + brw_hiz_destroy(brw); ralloc_free(brw->wm.compile_data); dri_bo_release(&brw->curbe.curbe_bo); -- 1.7.6.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev