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. CC: Eric Anholt <e...@anholt.net> CC: Paul Berry <stereotype...@gmail.com> Signed-off-by: Chad Versace <chad.vers...@linux.intel.com> --- 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 a410df6..68e878e 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -236,22 +236,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 56e936e..b402099 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 > 0) { /* 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 == NULL) + 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 -- 1.7.11.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev