mesa/st: accept NULL and empty buffer objects
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Wed, 6 Mar 2019 11:18:28 +0000 (12:18 +0100)
committerErik Faye-Lund <erik.faye-lund@collabora.com>
Mon, 29 Apr 2019 10:28:38 +0000 (10:28 +0000)
It's prefectly legal and well-defined to render using a non-existing
or empty buffer object. The data coming out of the buffer object isn't
well defined unless we have the robustness flag set on the context, but
that's a different matter, and up to the shader hardware; it's the same
as out-of-bounds reads.

Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom_array.c

index 21e00ff17b97627aa721d7f5f0f11ca7208e3d91..a726d06cd4ab6489d3bf740bf0191c4267d351c1 100644 (file)
@@ -405,14 +405,9 @@ st_setup_arrays(struct st_context *st,
       const unsigned bufidx = (*num_vbuffers)++;
 
       if (_mesa_is_bufferobj(binding->BufferObj)) {
-         struct st_buffer_object *stobj = st_buffer_object(binding->BufferObj);
-         if (!stobj || !stobj->buffer) {
-            st->vertex_array_out_of_memory = true;
-            return; /* out-of-memory error probably */
-         }
-
          /* Set the binding */
-         vbuffer[bufidx].buffer.resource = stobj->buffer;
+         struct st_buffer_object *stobj = st_buffer_object(binding->BufferObj);
+         vbuffer[bufidx].buffer.resource = stobj ? stobj->buffer : NULL;
          vbuffer[bufidx].is_user_buffer = false;
          vbuffer[bufidx].buffer_offset = _mesa_draw_binding_offset(binding);
       } else {