diff options
author | Chad Versace <[email protected]> | 2011-05-23 13:48:04 -0700 |
---|---|---|
committer | Chad Versace <[email protected]> | 2011-05-25 07:41:32 -0700 |
commit | 7c0e6d9bbc11f7802c81df048eb721b5e15e8ece (patch) | |
tree | b54d57574dbdbd6a9db1d55821fe3b34a7306dce /src/mesa/drivers/dri/intel/intel_fbo.h | |
parent | a9e65097855468529242f9076bd6ef2a6c8062c1 (diff) |
intel: Add hiz_region to intel_renderbuffer
A hiz surface must be supplied to the hardware when rendering to a depth
buffer with hiz. There are three potential places to store that surface:
1. Allocate a larger intel_region for the depthbuffer, and let the
region's tail be the hiz surface.
2. Allocate a separate intel_region for hiz, and store it as
brw_context state.
3. Allocate a separate intel_region for hiz, and store it in
intel_renderbuffer.
We choose method 3.
Method 1 has not been chosen due to future complications it might cause
when requesting a DRI drawable's depth buffer attachment from X.
Method 2 has not been chosen because storing the hiz region apart from
the depth region makes lazy hiz/depth resolves difficult to implement.
Reviewed-by: Eric Anholt <[email protected]>
Signed-off-by: Chad Versace <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/intel/intel_fbo.h')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_fbo.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.h b/src/mesa/drivers/dri/intel/intel_fbo.h index 028f657d12d..212dd9aadc8 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.h +++ b/src/mesa/drivers/dri/intel/intel_fbo.h @@ -28,6 +28,7 @@ #ifndef INTEL_FBO_H #define INTEL_FBO_H +#include <stdbool.h> #include "main/formats.h" #include "intel_screen.h" @@ -40,6 +41,9 @@ struct intel_renderbuffer { struct gl_renderbuffer Base; struct intel_region *region; + + /** Only used by depth renderbuffers for which HiZ is enabled. */ + struct intel_region *hiz_region; }; @@ -80,6 +84,29 @@ intel_get_renderbuffer(struct gl_framebuffer *fb, int attIndex) return NULL; } +/** + * If the framebuffer has a depth buffer attached, then return its HiZ region. + * The HiZ region may be null. + */ +static INLINE struct intel_region* +intel_framebuffer_get_hiz_region(struct gl_framebuffer *fb) +{ + struct intel_renderbuffer *rb = NULL; + if (fb) + rb = intel_get_renderbuffer(fb, BUFFER_DEPTH); + + if (rb) + return rb->hiz_region; + else + return NULL; +} + +static INLINE bool +intel_framebuffer_has_hiz(struct gl_framebuffer *fb) +{ + return intel_framebuffer_get_hiz_region(fb) != NULL; +} + extern void intel_renderbuffer_set_region(struct intel_context *intel, |