summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/all.py1
-rw-r--r--tests/spec/arb_direct_state_access/CMakeLists.gl.txt1
-rw-r--r--tests/spec/arb_direct_state_access/getnamedbufferparameter.c215
3 files changed, 217 insertions, 0 deletions
diff --git a/tests/all.py b/tests/all.py
index f134f03ab..e9b72552c 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -4246,6 +4246,7 @@ with profile.group_manager(
g(['arb_direct_state_access-mapnamedbuffer-pbo-readpixels'], 'mapnamedbuffer-pbo-readpixels')
g(['arb_direct_state_access-unmapnamedbuffer-vbo'], 'unmapnamedbuffer-vbo')
g(['arb_direct_state_access-flushmappednamedbufferrange'], 'flushmappednamedbufferrange')
+ g(['arb_direct_state_access-getnamedbufferparameter'], 'getnamedbufferparameter')
with profile.group_manager(
PiglitGLTest,
diff --git a/tests/spec/arb_direct_state_access/CMakeLists.gl.txt b/tests/spec/arb_direct_state_access/CMakeLists.gl.txt
index 5b166d89b..c7dc55c32 100644
--- a/tests/spec/arb_direct_state_access/CMakeLists.gl.txt
+++ b/tests/spec/arb_direct_state_access/CMakeLists.gl.txt
@@ -22,6 +22,7 @@ piglit_add_executable (arb_direct_state_access-clearnamedbuffersubdata-invalid-s
piglit_add_executable (arb_direct_state_access-mapnamedbuffer-pbo-readpixels mapnamedbuffer-pbo-readpixels.c)
piglit_add_executable (arb_direct_state_access-unmapnamedbuffer-vbo unmapnamedbuffer-vbo.c)
piglit_add_executable (arb_direct_state_access-flushmappednamedbufferrange flushmappednamedbufferrange.c)
+piglit_add_executable (arb_direct_state_access-getnamedbufferparameter getnamedbufferparameter.c)
piglit_add_executable (arb_direct_state_access-dsa-textures dsa-textures.c dsa-utils.c)
piglit_add_executable (arb_direct_state_access-texturesubimage texturesubimage.c)
piglit_add_executable (arb_direct_state_access-bind-texture-unit bind-texture-unit.c)
diff --git a/tests/spec/arb_direct_state_access/getnamedbufferparameter.c b/tests/spec/arb_direct_state_access/getnamedbufferparameter.c
new file mode 100644
index 000000000..82bbfe219
--- /dev/null
+++ b/tests/spec/arb_direct_state_access/getnamedbufferparameter.c
@@ -0,0 +1,215 @@
+/**
+ * Copyright © 2013, 2015 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/**
+ * Adapted to test glGetNamedBufferParameteri[64]v by Laura Ekstrand
+ * <laura@jlekstrand.net>.
+ */
+
+#include "piglit-util-gl.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+ config.supports_gl_compat_version = 10;
+
+ config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+void
+piglit_init(int argc, char **argv)
+{
+ piglit_require_extension("GL_ARB_direct_state_access");
+ piglit_require_extension("GL_ARB_map_buffer_range");
+}
+
+static bool
+storage_test(void)
+{
+ GLuint buffer;
+ bool pass = true;
+ GLint64 data = -2;
+
+ glCreateBuffers(1, &buffer);
+
+ /* Is it mutable? */
+ glGetNamedBufferParameteri64v(buffer, GL_BUFFER_IMMUTABLE_STORAGE,
+ &data);
+ if (data == GL_TRUE) {
+ printf("GL_BUFFER_IMMUTABLE_STORAGE: expected mutable, "
+ "got immutable.\n");
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ glNamedBufferStorage(buffer, 12 * 4 * sizeof(float), NULL,
+ GL_MAP_READ_BIT |
+ GL_MAP_PERSISTENT_BIT |
+ GL_MAP_COHERENT_BIT);
+
+ /* Is it immutable? */
+ glGetNamedBufferParameteri64v(buffer, GL_BUFFER_IMMUTABLE_STORAGE,
+ &data);
+ if (data == GL_FALSE) {
+ printf("GL_BUFFER_IMMUTABLE_STORAGE: expected immutable, "
+ "got mutable.\n");
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ /* What are the storage flags? */
+ glGetNamedBufferParameteri64v(buffer, GL_BUFFER_STORAGE_FLAGS,
+ &data);
+ if (!(data & GL_MAP_READ_BIT)) {
+ printf("GL_BUFFER_STORAGE_FLAGS: No map read bit.\n");
+ pass = false;
+ }
+ if (!(data & GL_MAP_PERSISTENT_BIT)) {
+ printf("GL_BUFFER_STORAGE_FLAGS: No map persistent bit.\n");
+ pass = false;
+ }
+ if (!(data & GL_MAP_COHERENT_BIT)) {
+ printf("GL_BUFFER_STORAGE_FLAGS: No map coherent bit.\n");
+ pass = false;
+ }
+
+ if (data & ~(GL_MAP_READ_BIT |
+ GL_MAP_PERSISTENT_BIT |
+ GL_MAP_COHERENT_BIT)) {
+ printf("GL_BUFFER_STORAGE_FLAGS: Extra bits set.\n");
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ return pass;
+}
+
+enum piglit_result
+piglit_display(void)
+{
+ bool pass = true;
+ GLuint bufname;
+ GLint64 data = -2;
+ GLint dataint = -2;
+
+ int stuff[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+ int size = sizeof(stuff);
+ int offset = 1;
+ int range = 5;
+
+ glCreateBuffers(1, &bufname);
+ glNamedBufferData(bufname, size, stuff, GL_STATIC_READ);
+
+ /* What size is it? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_SIZE, &data);
+ if (data != size) {
+ printf("GL_BUFFER_SIZE: expected %d, got %d.\n",
+ size, (int) data);
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ /* What is the usage? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_USAGE, &data);
+ if (data != GL_STATIC_READ) {
+ printf("GL_BUFFER_USAGE: expected GL_STATIC_READ, got %s.\n",
+ piglit_get_gl_enum_name((int) data));
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+
+ glMapNamedBufferRange(bufname, offset, range,
+ GL_MAP_READ_BIT);
+
+ /* What is the access? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_ACCESS, &data);
+ if (data != GL_READ_ONLY) {
+ printf("GL_BUFFER_ACCESS: expected GL_READ_ONLY, got %s.\n",
+ piglit_get_gl_enum_name((int) data));
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ /* What are the access flags? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_ACCESS_FLAGS, &data);
+ if (!(data & GL_MAP_READ_BIT)) { /* Map read bit not set */
+ printf("GL_BUFFER_ACCESS_FLAGS: expected GL_MAP_READ_BIT, "
+ "but it was not set.\n");
+ pass = false;
+ }
+ if (data & ~GL_MAP_READ_BIT) { /* Other bits set */
+ printf("GL_BUFFER_ACCESS: expected only GL_MAP_READ_BIT, "
+ "but other flags were set.\n");
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ /* Is it mapped? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_MAPPED, &data);
+ if (data != GL_TRUE)
+ {
+ printf("GL_BUFFER_MAPPED: expected GL_TRUE, got GL_FALSE.\n");
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+
+ /* What is the offset? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_MAP_OFFSET,
+ &data);
+ if (data != offset) {
+ printf("GL_BUFFER_MAP_OFFSET: expected %d, got %d.\n",
+ offset, (int) data);
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ /* What is the length? */
+ glGetNamedBufferParameteri64v(bufname, GL_BUFFER_MAP_LENGTH,
+ &data);
+ if (data != range) {
+ printf("GL_BUFFER_MAP_LENGTH: expected %d, got %d.\n",
+ range, (int) data);
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+ glUnmapNamedBuffer(bufname);
+
+ if (piglit_is_extension_supported("GL_ARB_buffer_storage"))
+ pass = storage_test() && pass;
+
+
+ /* Make sure 32-bit version works. */
+ glGetNamedBufferParameteriv(bufname, GL_BUFFER_SIZE, &dataint);
+ if (dataint != size) {
+ printf("GL_BUFFER_SIZE: expected %d, got %d.\n",
+ size, (int) dataint);
+ pass = false;
+ }
+ pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
+
+
+ piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}