From 12b464b2b8bf011c9c3ead06926b3688100fd62a Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 13 Oct 2021 16:31:57 -0500 Subject: [PATCH] i965: Emit a NULL surface for buffer textures with no buffer This is a preexisting bug but it was uncovered by 231653ea3506 ("intel/isl: Add a max_buffer_size limit to isl_device") which added an assert(num_elements > 0) for typed buffers. Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Kenneth Graunke Part-of: (cherry picked from commit 393fda2d341f65cba6e160d4704983370ae041f9) --- .pick_status.json | 2 +- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 06defcabfdb..19c1a789eaf 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -346,7 +346,7 @@ "description": "i965: Emit a NULL surface for buffer textures with no buffer", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index 5caeda5239a..c750bc71936 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -680,6 +680,11 @@ buffer_texture_range_size(struct brw_context *brw, brw->ctx.Const.MaxTextureBufferSize * texel_size); } +static void +emit_null_surface_state(struct brw_context *brw, + const struct gl_framebuffer *fb, + uint32_t *out_offset); + void brw_update_buffer_texture_surface(struct gl_context *ctx, unsigned unit, @@ -695,6 +700,11 @@ brw_update_buffer_texture_surface(struct gl_context *ctx, const enum isl_format isl_format = brw_isl_format_for_mesa_format(format); int texel_size = _mesa_get_format_bytes(format); + if (tObj->BufferObject == NULL) { + emit_null_surface_state(brw, NULL, surf_offset); + return; + } + if (intel_obj) bo = brw_bufferobj_buffer(brw, intel_obj, tObj->BufferOffset, size, false);