[Piglit] [PATCH] draw-elements: test glMultiDrawElements(GL_UNSIGNED_BYTE)
Nicolai Hähnle
nhaehnle at gmail.com
Sun Feb 19 09:06:38 UTC 2017
Thanks for doing this.
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
On 17.02.2017 13:08, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> this was broken in radeonsi
> ---
> tests/general/draw-elements.c | 34 +++++++++++++++++++++++++++++++---
> 1 file changed, 31 insertions(+), 3 deletions(-)
>
> diff --git a/tests/general/draw-elements.c b/tests/general/draw-elements.c
> index 29436cf..d20e85a 100644
> --- a/tests/general/draw-elements.c
> +++ b/tests/general/draw-elements.c
> @@ -55,22 +55,24 @@ void piglit_init(int argc, char **argv)
> }
>
> piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
>
> piglit_require_gl_version(15);
>
> glShadeModel(GL_FLAT);
> glClearColor(0.2, 0.2, 0.2, 1.0);
> }
>
> -static void test_ubyte_indices(float x1, float y1, float x2, float y2, int index)
> +static void test_ubyte_indices(float x1, float y1, float x2, float y2, int test)
> {
> + bool use_multi = test / 4;
> + int index = test % 4;
> float v[] = {
> x1, y1,
> x1, y2,
> x2, y1,
>
> x1, y1,
> x1, y2,
> x2, y1,
>
> x1, y1,
> @@ -93,25 +95,46 @@ static void test_ubyte_indices(float x1, float y1, float x2, float y2, int index
> 11, 11, 11, 11
> };
> GLuint buf;
>
> glVertexPointer(2, GL_FLOAT, 0, v);
>
> if (!user) {
> glGenBuffers(1, &buf);
> glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buf);
> glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indx), indx, GL_STATIC_DRAW);
> - glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, (void*)(intptr_t)(index*9));
> + if (use_multi) {
> + GLsizei count[] = {3, 3};
> + /* We need 2 draws in order to get non-zero in
> + * pipe_draw_info::start, so make the second draw
> + * a zero-area triangle. */
> + const void *offset[] = {(void*)(intptr_t)(index*9),
> + (void*)(intptr_t)1};
> + glMultiDrawElements(GL_TRIANGLES, count,
> + GL_UNSIGNED_BYTE, offset, 2);
> + } else {
> + glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE,
> + (void*)(intptr_t)(index*9));
> + }
> glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
> glDeleteBuffers(1, &buf);
> } else {
> - glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, indx + index*9);
> + if (use_multi) {
> + GLsizei count[] = {3, 3};
> + /* The second draw is a zero-area triangle. */
> + const void *indices[] = {indx + index*9, indx + 1};
> + glMultiDrawElements(GL_TRIANGLES, count,
> + GL_UNSIGNED_BYTE, indices, 2);
> + } else {
> + glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE,
> + indx + index*9);
> + }
> }
> }
>
> static void test_ushort_indices(float x1, float y1, float x2, float y2, int index)
> {
> float v[] = {
> x1, y1,
> x1, y2,
> x2, y1,
>
> @@ -208,20 +231,25 @@ struct test {
> int flag;
> const char *name;
> };
>
> struct test tests[] = {
> {test_ubyte_indices, 0, {1, 1, 1}, BOTH, "Ubyte indices - offset: 0"},
> {test_ubyte_indices, 1, {1, 1, 1}, BOTH, "Ubyte indices - offset: 1"},
> {test_ubyte_indices, 2, {1, 1, 1}, BOTH, "Ubyte indices - offset: 2"},
> {test_ubyte_indices, 3, {1, 1, 1}, BOTH, "Ubyte indices - offset: 3"},
>
> + {test_ubyte_indices, 4, {1, 1, 1}, BOTH, "Ubyte indices - offset: 0 (glMultiDraw)"},
> + {test_ubyte_indices, 5, {1, 1, 1}, BOTH, "Ubyte indices - offset: 1 (glMultiDraw)"},
> + {test_ubyte_indices, 6, {1, 1, 1}, BOTH, "Ubyte indices - offset: 2 (glMultiDraw)"},
> + {test_ubyte_indices, 7, {1, 1, 1}, BOTH, "Ubyte indices - offset: 3 (glMultiDraw)"},
> +
> {test_ushort_indices, 0, {1, 1, 1}, BOTH, "Ushort indices - offset: 0"},
> {test_ushort_indices, 1, {1, 1, 1}, BOTH, "Ushort indices - offset: 2"},
>
> {test_large_index_count, 1, {1, 1, 1}, USER, "Large index count"},
> {test_large_indexbuf_offset, 0, {1, 1, 1}, VBO, "Large index offset"},
>
> {0}
> };
>
> enum piglit_result
>
More information about the Piglit
mailing list