[Piglit] [PATCH 4/4] arb_bindless_texture: fix setting bound/bindless uniforms
Samuel Pitoiset
samuel.pitoiset at gmail.com
Fri May 19 12:52:51 UTC 2017
The initial arb_bindless_texture-uniform wasn't totally correct
after getting a confirmation from Jeff Bolz (NVIDIA).
The spec allows setting a bindless sampler uniform with either
glUniformi1*() or glUniformHandle*(), while a bound sampler
uniform can only be set using glUniform1*().
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
tests/spec/arb_bindless_texture/uniform.c | 157 +++++++++++++++++++++++++++---
1 file changed, 141 insertions(+), 16 deletions(-)
diff --git a/tests/spec/arb_bindless_texture/uniform.c b/tests/spec/arb_bindless_texture/uniform.c
index c4c06df05..3d7b0ad7c 100644
--- a/tests/spec/arb_bindless_texture/uniform.c
+++ b/tests/spec/arb_bindless_texture/uniform.c
@@ -61,6 +61,18 @@ static const char *fs_explicit_bound_sampler =
" color = texture(tex, vec2(0, 0));\n"
"}\n";
+static const char *fs_explicit_bindless_sampler =
+ "#version 330\n"
+ "#extension GL_ARB_bindless_texture: require\n"
+ "\n"
+ "layout (bindless_sampler) uniform sampler2D tex;\n"
+ "out vec4 color;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " color = texture(tex, vec2(0, 0));\n"
+ "}\n";
+
static const char *fs_implicit_bound_sampler =
"#version 330\n"
"#extension GL_ARB_bindless_texture: require\n"
@@ -86,6 +98,19 @@ static const char *fs_explicit_bound_image =
" imageStore(img, ivec2(0, 0), color);\n"
"}\n";
+static const char *fs_explicit_bindless_image =
+ "#version 330\n"
+ "#extension GL_ARB_bindless_texture: require\n"
+ "#extension GL_ARB_shader_image_load_store: enable\n"
+ "\n"
+ "layout (bindless_image) writeonly uniform image2D img;\n"
+ "out vec4 color;\n"
+ "\n"
+ "void main()\n"
+ "{\n"
+ " imageStore(img, ivec2(0, 0), color);\n"
+ "}\n";
+
static const char *fs_implicit_bound_image =
"#version 330\n"
"#extension GL_ARB_bindless_texture: require\n"
@@ -134,7 +159,7 @@ check_UniformHandleui64_with_explicit_bound_sampler(void *data)
}
static enum piglit_result
-check_UniformHandleui64_with_implicit_bound_sampler(void *data)
+check_Uniform_with_explicit_bindless_sampler(void *data)
{
GLuint vs, fs, prog;
GLuint64 handle = 0;
@@ -142,7 +167,7 @@ check_UniformHandleui64_with_implicit_bound_sampler(void *data)
vs = piglit_compile_shader_text(GL_VERTEX_SHADER, passthrough_vs_src);
fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER,
- fs_implicit_bound_sampler);
+ fs_explicit_bindless_sampler);
prog = piglit_link_simple_program(vs, fs);
glUseProgram(prog);
@@ -152,10 +177,12 @@ check_UniformHandleui64_with_implicit_bound_sampler(void *data)
/* The ARB_bindless_texture spec says:
*
- * "When used as uniforms in the default block, the value of sampler
- * variables may be specified with either Uniform1i{v} or
- * UniformHandleui64{v}ARB."
+ * "These modifiers control whether default-block uniforms of the
+ * corresponding types may have their values set via both
+ * UniformHandle* and Uniform1i (bindless_sampler and bindless_image)
+ * or only via Uniform1i (bound_sampler and bound_image)."
*/
+ glUniform1i(loc, 5);
glUniformHandleui64ARB(loc, handle);
glProgramUniformHandleui64vARB(prog, loc, 1, &handle);
if (!piglit_check_gl_error(GL_NO_ERROR))
@@ -165,6 +192,48 @@ check_UniformHandleui64_with_implicit_bound_sampler(void *data)
}
static enum piglit_result
+check_Uniform_with_implicit_bound_sampler(void *data)
+{
+ GLuint vs, fs, prog;
+ GLuint64 handle = 0;
+ GLint loc;
+
+ vs = piglit_compile_shader_text(GL_VERTEX_SHADER, passthrough_vs_src);
+ fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER,
+ fs_implicit_bound_sampler);
+ prog = piglit_link_simple_program(vs, fs);
+ glUseProgram(prog);
+
+ loc = glGetUniformLocation(prog, "tex");
+ if (loc == -1)
+ return PIGLIT_FAIL;
+
+ /* The ARB_bindless_texture spec says:
+ *
+ * "These modifiers control whether default-block uniforms of the
+ * corresponding types may have their values set via both
+ * UniformHandle* and Uniform1i (bindless_sampler and bindless_image)
+ * or only via Uniform1i (bound_sampler and bound_image)."
+ *
+ * "In the absence of these qualifiers, sampler and image uniforms are
+ * considered "bound"."
+ */
+ glUniform1i(loc, 5);
+ if (!piglit_check_gl_error(GL_NO_ERROR))
+ return PIGLIT_FAIL;
+
+ glUniformHandleui64ARB(loc, handle);
+ if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+ return PIGLIT_FAIL;
+
+ glProgramUniformHandleui64vARB(prog, loc, 1, &handle);
+ if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+ return PIGLIT_FAIL;
+
+ return PIGLIT_PASS;
+}
+
+static enum piglit_result
check_UniformHandleui64_with_explicit_bound_image(void *data)
{
GLuint vs, fs, prog;
@@ -199,7 +268,7 @@ check_UniformHandleui64_with_explicit_bound_image(void *data)
}
static enum piglit_result
-check_UniformHandleui64_with_implicit_bound_image(void *data)
+check_Uniform_with_explicit_bindless_image(void *data)
{
GLuint vs, fs, prog;
GLuint64 handle = 0;
@@ -207,7 +276,7 @@ check_UniformHandleui64_with_implicit_bound_image(void *data)
vs = piglit_compile_shader_text(GL_VERTEX_SHADER, passthrough_vs_src);
fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER,
- fs_implicit_bound_image);
+ fs_explicit_bindless_image);
prog = piglit_link_simple_program(vs, fs);
glUseProgram(prog);
@@ -217,10 +286,12 @@ check_UniformHandleui64_with_implicit_bound_image(void *data)
/* The ARB_bindless_texture spec says:
*
- * "When used as uniforms in the default block, the value of sampler
- * variables may be specified with either Uniform1i{v} or
- * UniformHandleui64{v}ARB."
+ * "These modifiers control whether default-block uniforms of the
+ * corresponding types may have their values set via both
+ * UniformHandle* and Uniform1i (bindless_sampler and bindless_image)
+ * or only via Uniform1i (bound_sampler and bound_image)."
*/
+ glUniform1i(loc, 5);
glUniformHandleui64ARB(loc, handle);
glProgramUniformHandleui64vARB(prog, loc, 1, &handle);
if (!piglit_check_gl_error(GL_NO_ERROR))
@@ -230,6 +301,48 @@ check_UniformHandleui64_with_implicit_bound_image(void *data)
}
static enum piglit_result
+check_Uniform_with_implicit_bound_image(void *data)
+{
+ GLuint vs, fs, prog;
+ GLuint64 handle = 0;
+ GLint loc;
+
+ vs = piglit_compile_shader_text(GL_VERTEX_SHADER, passthrough_vs_src);
+ fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER,
+ fs_implicit_bound_image);
+ prog = piglit_link_simple_program(vs, fs);
+ glUseProgram(prog);
+
+ loc = glGetUniformLocation(prog, "img");
+ if (loc == -1)
+ return PIGLIT_FAIL;
+
+ /* The ARB_bindless_texture spec says:
+ *
+ * "These modifiers control whether default-block uniforms of the
+ * corresponding types may have their values set via both
+ * UniformHandle* and Uniform1i (bindless_sampler and bindless_image)
+ * or only via Uniform1i (bound_sampler and bound_image)."
+ *
+ * "In the absence of these qualifiers, sampler and image uniforms are
+ * considered "bound"."
+ */
+ glUniform1i(loc, 5);
+ if (!piglit_check_gl_error(GL_NO_ERROR))
+ return PIGLIT_FAIL;
+
+ glUniformHandleui64ARB(loc, handle);
+ if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+ return PIGLIT_FAIL;
+
+ glProgramUniformHandleui64vARB(prog, loc, 1, &handle);
+ if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+ return PIGLIT_FAIL;
+
+ return PIGLIT_PASS;
+}
+
+static enum piglit_result
use_glGetActiveUniform_with_sampler(void *data)
{
GLuint vs, fs, prog;
@@ -308,9 +421,15 @@ static const struct piglit_subtest subtests[] = {
NULL
},
{
- "Check glUniformHandleui64*ARB() with implicit bound_sampler",
- "check_UniformHandleui64_with_implicit_bound_sampler",
- check_UniformHandleui64_with_implicit_bound_sampler,
+ "Check glUniform*() with explicit bindless_sampler",
+ "check_Uniform_with_explicit_bindless_sampler",
+ check_Uniform_with_explicit_bindless_sampler,
+ NULL
+ },
+ {
+ "Check glUniform*() with implicit bound_sampler",
+ "check_Uniform_with_implicit_bound_sampler",
+ check_Uniform_with_implicit_bound_sampler,
NULL
},
{
@@ -320,9 +439,15 @@ static const struct piglit_subtest subtests[] = {
NULL
},
{
- "Check glUniformHandleui64*ARB() with implicit bound_image",
- "check_UniformHandleui64_with_implicit_bound_image",
- check_UniformHandleui64_with_implicit_bound_image,
+ "Check glUniform*() with explicit bindless_image",
+ "check_Uniform_with_explicit_bindless_image",
+ check_Uniform_with_explicit_bindless_image,
+ NULL
+ },
+ {
+ "Check glUniform*() with implicit bound_image",
+ "check_Uniform_with_implicit_bound_image",
+ check_Uniform_with_implicit_bound_image,
NULL
},
{
--
2.13.0
More information about the Piglit
mailing list