From 4eba67285fb6b5d2dd4927e8dc4b3e2945435309 Mon Sep 17 00:00:00 2001 From: Chad Versace Date: Fri, 20 Jul 2012 14:56:16 -0700 Subject: [PATCH] intel: Refactor creation of hiz and mcs miptrees Move the logic for creating the ancillary hiz and mcs miptress for winsys and non-texture renderbuffers from intel_alloc_renderbuffer_storage to intel_miptree_create_for_renderbuffer. Let's try to isolate complex miptree logic to intel_mipmap_tree.c. Without this refactor, code duplication would be required along the intel_process_dri2_buffer codepath in order to create the mcs miptree. Reviewed-by: Eric Anholt Reviewed-by: Paul Berry Signed-off-by: Chad Versace --- src/mesa/drivers/dri/intel/intel_fbo.c | 16 ---------------- src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c index cea57e6..e6e6408 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -274,22 +274,6 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer if (!irb->mt) return false; - if (intel->vtbl.is_hiz_depth_format(intel, rb->Format)) { - bool ok = intel_miptree_alloc_hiz(intel, irb->mt, rb->NumSamples); - if (!ok) { - intel_miptree_release(&irb->mt); - return false; - } - } - - if (irb->mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS) { - bool ok = intel_miptree_alloc_mcs(intel, irb->mt, rb->NumSamples); - if (!ok) { - intel_miptree_release(&irb->mt); - return false; - } - } - return true; } diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index 9f349d0..b6ecbca 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -334,6 +334,7 @@ intel_miptree_create_for_renderbuffer(struct intel_context *intel, struct intel_mipmap_tree *mt; uint32_t depth = 1; enum intel_msaa_layout msaa_layout = INTEL_MSAA_LAYOUT_NONE; + bool ok; if (num_samples > 1) { /* Adjust width/height/depth for MSAA */ @@ -397,8 +398,26 @@ intel_miptree_create_for_renderbuffer(struct intel_context *intel, mt = intel_miptree_create(intel, GL_TEXTURE_2D, format, 0, 0, width, height, depth, true, num_samples, msaa_layout); + if (!mt) + goto fail; + + if (intel->vtbl.is_hiz_depth_format(intel, format)) { + ok = intel_miptree_alloc_hiz(intel, mt, num_samples); + if (!ok) + goto fail; + } + + if (mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS) { + ok = intel_miptree_alloc_mcs(intel, mt, num_samples); + if (!ok) + goto fail; + } return mt; + +fail: + intel_miptree_release(&mt); + return NULL; } void -- 2.7.4