diff options
author | Ben Widawsky <[email protected]> | 2017-05-30 17:23:58 +0530 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-07-12 21:15:46 -0700 |
commit | 34e1ccbfbe851ecf4ebbfc86d70da384d176d994 (patch) | |
tree | 2ab774db9928ae6ad6d951445c4aaede0125186d /src/mesa/drivers | |
parent | aadd37298c704982036f64e58903c80cd7dac93b (diff) |
i965/miptree: Allocate mt earlier in update winsys
Later commits require intel_update_image_buffer() to have control over
the miptree creation. However, intel_update_winsys_renderbuffer_miptree()
currently creates it based on the given buffer object. This patch moves
the creation to the caller side.
Signed-off-by: Ben Widawsky <[email protected]>
Acked-by: Daniel Stone <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Reviewed-by: Topi Pohjolainen <[email protected]>
Reviewed-by: Chad Versace <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 37 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 16 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 2 |
3 files changed, 37 insertions, 18 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 9d108fe31d8..c1a429bfcbe 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1504,10 +1504,26 @@ intel_process_dri2_buffer(struct brw_context *brw, return; } - if (!intel_update_winsys_renderbuffer_miptree(brw, rb, bo, + struct intel_mipmap_tree *mt = + intel_miptree_create_for_bo(brw, + bo, + intel_rb_format(rb), + 0, + drawable->w, + drawable->h, + 1, + buffer->pitch, + MIPTREE_LAYOUT_FOR_SCANOUT); + if (!mt) { + brw_bo_unreference(bo); + return; + } + + if (!intel_update_winsys_renderbuffer_miptree(brw, rb, mt, drawable->w, drawable->h, buffer->pitch)) { brw_bo_unreference(bo); + intel_miptree_release(&mt); return; } @@ -1565,10 +1581,25 @@ intel_update_image_buffer(struct brw_context *intel, if (last_mt && last_mt->bo == buffer->bo) return; - if (!intel_update_winsys_renderbuffer_miptree(intel, rb, buffer->bo, + struct intel_mipmap_tree *mt = + intel_miptree_create_for_bo(intel, + buffer->bo, + intel_rb_format(rb), + 0, + buffer->width, + buffer->height, + 1, + buffer->pitch, + MIPTREE_LAYOUT_FOR_SCANOUT); + if (!mt) + return; + + if (!intel_update_winsys_renderbuffer_miptree(intel, rb, mt, buffer->width, buffer->height, - buffer->pitch)) + buffer->pitch)) { + intel_miptree_release(&mt); return; + } if (_mesa_is_front_buffer_drawing(fb) && buffer_type == __DRI_IMAGE_BUFFER_FRONT && diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index c018c7f6a87..f1ac074fb50 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -1115,11 +1115,10 @@ intel_miptree_create_for_dri_image(struct brw_context *brw, bool intel_update_winsys_renderbuffer_miptree(struct brw_context *intel, struct intel_renderbuffer *irb, - struct brw_bo *bo, + struct intel_mipmap_tree *singlesample_mt, uint32_t width, uint32_t height, uint32_t pitch) { - struct intel_mipmap_tree *singlesample_mt = NULL; struct intel_mipmap_tree *multisample_mt = NULL; struct gl_renderbuffer *rb = &irb->Base.Base; mesa_format format = rb->Format; @@ -1131,17 +1130,7 @@ intel_update_winsys_renderbuffer_miptree(struct brw_context *intel, assert(_mesa_get_format_base_format(format) == GL_RGB || _mesa_get_format_base_format(format) == GL_RGBA); - singlesample_mt = intel_miptree_create_for_bo(intel, - bo, - format, - 0, - width, - height, - 1, - pitch, - MIPTREE_LAYOUT_FOR_SCANOUT); - if (!singlesample_mt) - goto fail; + assert(singlesample_mt); if (num_samples == 0) { intel_miptree_release(&irb->mt); @@ -1171,7 +1160,6 @@ intel_update_winsys_renderbuffer_miptree(struct brw_context *intel, return true; fail: - intel_miptree_release(&irb->singlesample_mt); intel_miptree_release(&irb->mt); return false; } diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h index c588f255d1b..4cc5c3539ff 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h @@ -694,7 +694,7 @@ intel_miptree_create_for_dri_image(struct brw_context *brw, bool intel_update_winsys_renderbuffer_miptree(struct brw_context *intel, struct intel_renderbuffer *irb, - struct brw_bo *bo, + struct intel_mipmap_tree *singlesample_mt, uint32_t width, uint32_t height, uint32_t pitch); |