st/mesa: verify that vertex buffer offset isn't negative
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Fri, 5 Jul 2019 12:51:23 +0000 (14:51 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 15 Jul 2019 19:22:25 +0000 (15:22 -0400)
commita9655f36fe9088816973c19df9399268ef6bfcd8
tree3cda1835f0978917b7308bc0c40e4cdec5f1b636
parentce04fbf67c9ded75a206c9560a3869df76a46839
st/mesa: verify that vertex buffer offset isn't negative

For drivers supporting PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET the buffer_offset value
will be interpreted as an signed int.

An example of application code causing a negative offset:

            float b[] = { ... }; // 3 float for pos, 3 for color
            glBufferData(GL_ARRAY_BUFFER, ..., b, ...);
            glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), 0);
            glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), &b[3]);
                                                                                ^
                                                                    should be 3 * sizeof(float)

The offset is a ptr so when interpreted as a signed int it can be negative.

This commit adds a verification that (int) buffer_offset is not negative - this would
indicate an application bug. Since it's too late to emit a GL_INVALID_VALUE error,
we replace the negative offset by 0 and emit a debug message.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom_array.c
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h