intel: Add resolve functions for renderbuffers
authorChad Versace <chad.versace@linux.intel.com>
Thu, 17 Nov 2011 16:03:48 +0000 (08:03 -0800)
committerChad Versace <chad.versace@linux.intel.com>
Tue, 22 Nov 2011 18:50:50 +0000 (10:50 -0800)
Add the following functions:
   intel_renderbuffer_resolve_hiz
   intel_renderbuffer_resolve_depth

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
src/mesa/drivers/dri/intel/intel_fbo.c
src/mesa/drivers/dri/intel/intel_fbo.h

index 94f74e00c5e8ba8c892798aee36fd0dd6f4833e7..13486f7de83bea449790d5d9dbb890ad13a29eaf 100644 (file)
@@ -1436,6 +1436,69 @@ intel_blit_framebuffer(struct gl_context *ctx,
                               mask, filter);
 }
 
+void
+intel_renderbuffer_set_needs_hiz_resolve(struct intel_renderbuffer *irb)
+{
+   if (irb->mt) {
+      intel_miptree_slice_set_needs_hiz_resolve(irb->mt,
+                                                irb->mt_level,
+                                                irb->mt_layer);
+   } else if (irb->wrapped_depth) {
+      intel_renderbuffer_set_needs_hiz_resolve(
+           intel_renderbuffer(irb->wrapped_depth));
+   } else {
+      return;
+   }
+}
+
+void
+intel_renderbuffer_set_needs_depth_resolve(struct intel_renderbuffer *irb)
+{
+   if (irb->mt) {
+      intel_miptree_slice_set_needs_depth_resolve(irb->mt,
+                                                  irb->mt_level,
+                                                  irb->mt_layer);
+   } else if (irb->wrapped_depth) {
+      intel_renderbuffer_set_needs_depth_resolve(
+           intel_renderbuffer(irb->wrapped_depth));
+   } else {
+      return;
+   }
+}
+
+bool
+intel_renderbuffer_resolve_hiz(struct intel_context *intel,
+                              struct intel_renderbuffer *irb)
+{
+   if (irb->mt)
+      return intel_miptree_slice_resolve_hiz(intel,
+                                             irb->mt,
+                                             irb->mt_level,
+                                             irb->mt_layer);
+   if (irb->wrapped_depth)
+      return intel_renderbuffer_resolve_hiz(intel,
+                                           intel_renderbuffer(irb->wrapped_depth));
+
+   return false;
+}
+
+bool
+intel_renderbuffer_resolve_depth(struct intel_context *intel,
+                                struct intel_renderbuffer *irb)
+{
+   if (irb->mt)
+      return intel_miptree_slice_resolve_depth(intel,
+                                               irb->mt,
+                                               irb->mt_level,
+                                               irb->mt_layer);
+
+   if (irb->wrapped_depth)
+      return intel_renderbuffer_resolve_depth(intel,
+                                              intel_renderbuffer(irb->wrapped_depth));
+
+   return false;
+}
+
 /**
  * Do one-time context initializations related to GL_EXT_framebuffer_object.
  * Hook in device driver functions.
index 6da370dbd2643068badd643ec4d4c06b09491d77..bb943099fd3fc79b474850f8dd414c63bf1f8570 100644 (file)
@@ -185,4 +185,35 @@ intel_renderbuffer_tile_offsets(struct intel_renderbuffer *irb,
 struct intel_region*
 intel_get_rb_region(struct gl_framebuffer *fb, GLuint attIndex);
 
+void
+intel_renderbuffer_set_needs_hiz_resolve(struct intel_renderbuffer *irb);
+
+void
+intel_renderbuffer_set_needs_depth_resolve(struct intel_renderbuffer *irb);
+
+
+/**
+ * \brief Perform a HiZ resolve on the renderbuffer.
+ *
+ * It is safe to call this function on a renderbuffer without HiZ. In that
+ * case, the function is a no-op.
+ *
+ * \return false if no resolve was needed
+ */
+bool
+intel_renderbuffer_resolve_hiz(struct intel_context *intel,
+                              struct intel_renderbuffer *irb);
+
+/**
+ * \brief Perform a depth resolve on the renderbuffer.
+ *
+ * It is safe to call this function on a renderbuffer without HiZ. In that
+ * case, the function is a no-op.
+ *
+ * \return false if no resolve was needed
+ */
+bool
+intel_renderbuffer_resolve_depth(struct intel_context *intel,
+                                struct intel_renderbuffer *irb);
+
 #endif /* INTEL_FBO_H */