From: Anthony Pesch <ape...@nvidia.com> The ranges-2 test was failing due to glTexBufferRange returning GL_INVALID_VALUE when the offset parameter wasn't GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT byte aligned.
From the OpenGL 4.6 Core spec: An INVALID_VALUE error is generated if offset is not an integer multiple of the value of TEXTURE_BUFFER_OFFSET_ALIGNMENT. --- .../spec/arb_texture_buffer_range/ranges-2.c | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tests/spec/arb_texture_buffer_range/ranges-2.c b/tests/spec/arb_texture_buffer_range/ranges-2.c index 3477e4b52..b9cd543b0 100644 --- a/tests/spec/arb_texture_buffer_range/ranges-2.c +++ b/tests/spec/arb_texture_buffer_range/ranges-2.c @@ -91,22 +91,25 @@ float data[] = { 0, 0, 0.5, 0, }; +int aligned_size = 0; +int chunk_size = 24 * sizeof(float); +int num_chunks = 4; + enum piglit_result piglit_display(void) { int i; - int chunk_size = 24 * sizeof(float); bool pass = true; glClearColor(0.2, 0.2, 0.2, 0.2); glClear(GL_COLOR_BUFFER_BIT); - for (i = 0; i < sizeof(data) / chunk_size; i++) { + for (i = 0; i < num_chunks; i++) { glTexBufferRange(GL_TEXTURE_BUFFER, GL_RGBA32F, - tbo, i * chunk_size, chunk_size); + tbo, i * aligned_size, chunk_size); glDrawArrays(GL_TRIANGLES, 0, 6); } - for (i = 0; i < sizeof(data) / chunk_size; i++) { + for (i = 0; i < num_chunks; i++) { float c[4] = { data[i * 24 + 2], data[i * 24 + 3], @@ -128,8 +131,14 @@ piglit_display(void) { void piglit_init(int argc, char **argv) { + GLint align, i; + uint8_t *chunk; + piglit_require_extension("GL_ARB_texture_buffer_range"); + glGetIntegerv(GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, &align); + aligned_size = chunk_size % align == 0 ? chunk_size : align; + prog = piglit_build_simple_program(vs_source, fs_source); glUseProgram(prog); @@ -138,7 +147,12 @@ piglit_init(int argc, char **argv) { glGenBuffers(1, &tbo); glBindBuffer(GL_ARRAY_BUFFER, tbo); - glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, aligned_size * num_chunks, NULL, GL_STATIC_DRAW); + + for (i = 0, chunk = data; i < num_chunks; i++) { + glBufferSubData(GL_ARRAY_BUFFER, aligned_size * i, chunk_size, chunk); + chunk += chunk_size; + } glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_BUFFER, tex); -- 2.19.2 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit