i965: Emit a NULL surface for buffer textures with no buffer
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 13 Oct 2021 21:31:57 +0000 (16:31 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 15 Oct 2021 03:50:58 +0000 (03:50 +0000)
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 <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13351>

src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 5caeda5..c750bc7 100644 (file)
@@ -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);