All the requested changes have been fixed locally. Thanks Tim!

On 03/29/2017 02:14 AM, Timothy Arceri wrote:

<snip/>

+
+    return PIGLIT_PASS;
+}
+
+static enum piglit_result
+check_MakeImageHandleNonResident_invalid_operations(void *data)
+{
+    GLuint64 handle;
+    GLuint tex;
+
+    if
(!piglit_is_extension_supported("GL_ARB_shader_image_load_store"))
+        return PIGLIT_SKIP;
+
+    /* The ARB_bindless_texture spec says:
+     *
+     * "The error INVALID_OPERATION is generated by
+     *  MakeImageHandleNonResidentARB if <handle> is not a valid image
+     *  handle, or if <handle> is not resident in the current GL
context."
+     */
+
+    /* Invalid handle */
+    glMakeImageHandleNonResidentARB(42);
+    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+        return PIGLIT_FAIL;
+
+    tex = piglit_rgbw_texture(GL_RGBA32F, 16, 16, GL_FALSE, GL_FALSE,
+                  GL_UNSIGNED_NORMALIZED);
+    glBindTexture(GL_TEXTURE_2D, 0);
+
+    handle = glGetImageHandleARB(tex, 0, GL_FALSE, 0, GL_RGBA32F);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    /* Handle not resident. */
+    glMakeImageHandleNonResidentARB(handle);
+    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+        return PIGLIT_FAIL;


Again like the texture test maybe add the handle then remove it twice?

What do you mean?


I mean you test that an error is generated when the handle was never
made resident, you should probably test that it still errors when we
make it resident then non-resident again:

    glMakeImageHandleResidentARB(handle, GL_READ_WRITE);
    glMakeImageHandleNonResidentARB(handle);
    if (!piglit_check_gl_error(GL_NO_ERROR))
        return PIGLIT_FAIL;

    glMakeImageHandleNonResidentARB(handle);
    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
        return PIGLIT_FAIL;




+
+    pass &= !ret;
+
+    return pass ? PIGLIT_PASS : PIGLIT_FAIL;
+}
+
+static enum piglit_result
+delete_texture_sampler_while_handle_is_allocated(void *data)
+{
+    GLuint texture, sampler;
+    GLuint64 handle;
+
+    /* The ARB_bindless_texture spec says:
+     *
+     * "(5) Is there a way to release a texture or image handle
after it
+     *  is created?"
+     *
+     * "RESOLVED:  No API is provided to release or delete handles
once
+     *  they are created.  Texture and image handles are automatically
+     *  reclaimed when the underlying texture or sampler objects are
finally
+     *  deleted.  This deletion will happen only when no handle using
the
+     *  texture or sampler object is resident on any context."
+     */
+
+    /* Test #1: Create a texture handle and remove it. */
+    texture = piglit_rgbw_texture(GL_RGBA32F, 16, 16, GL_FALSE,
GL_FALSE,
+                      GL_UNSIGNED_NORMALIZED);
+    glBindTexture(GL_TEXTURE_2D, 0);
+
+    handle = glGetTextureHandleARB(texture);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    glDeleteTextures(1, &texture);
+
+    /* Texture handle should have been removed. */
+    glMakeTextureHandleResidentARB(handle);
+    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+        return PIGLIT_FAIL;
+
+    /* Test #2: Create a texture/sampler handle and remove the
sampler. */
+    texture = piglit_rgbw_texture(GL_RGBA32F, 16, 16, GL_FALSE,
GL_FALSE,
+                      GL_UNSIGNED_NORMALIZED);
+    glBindTexture(GL_TEXTURE_2D, 0);
+
+    /* Texture and sampler have to be consistent. */
+    glGenSamplers(1, &sampler);
+    glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+    handle = glGetTextureSamplerHandleARB(texture, sampler);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    glDeleteSamplers(1, &sampler);
+
+    /* Texture handle should have been removed. */
+    glMakeTextureHandleResidentARB(handle);
+    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+        return PIGLIT_FAIL;
+
+    return PIGLIT_PASS;
+}
+
+static enum piglit_result
+delete_texture_sampler_while_handle_is_resident(void *data)
+{
+    GLuint texture, sampler;
+    GLuint64 handle;
+    GLboolean ret;
+
+    /* The ARB_bindless_texture_spec says:
+     *
+     * "(7) What happens if you try to delete a texture or sampler
object
+     *  with a handle that is resident in another context?"
+     *
+     * "RESOLVED:  Deleting the texture will remove the texture from
the
+     *  name space and make all handles using the texture
non-resident in
+     *  the current context.  However, texture or image handles for a
+     *  deleted texture are not deleted until the underlying
texture or
+     *  sampler object itself is deleted.  That deletion won't happen
+     *  until the object is not bound anywhere and there are no
handles
+     *  using the object that are resident in any context."
+     */
+
+    /* Test #1: Create a texture handle, make it resident and remove
the
+     * texture. */
+    texture = piglit_rgbw_texture(GL_RGBA, 16, 16, GL_FALSE, GL_FALSE,
+                      GL_UNSIGNED_NORMALIZED);
+    glBindTexture(GL_TEXTURE_2D, 0);
+
+    handle = glGetTextureHandleARB(texture);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    glMakeTextureHandleResidentARB(handle);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    glDeleteTextures(1, &texture);
+
+    /* Texture handle should have been removed. */
+    glIsTextureHandleResidentARB(handle);
+    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+        return PIGLIT_FAIL;
+
+    /* Test #2: Create a texture/sampler handle, make it resident and
+     * remove the sampler. */
+    texture = piglit_rgbw_texture(GL_RGBA32F, 16, 16, GL_FALSE,
GL_FALSE,
+                      GL_UNSIGNED_NORMALIZED);
+    glBindTexture(GL_TEXTURE_2D, 0);
+
+    /* Texture and sampler have to be consistent. */
+    glGenSamplers(1, &sampler);
+    glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+    handle = glGetTextureSamplerHandleARB(texture, sampler);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    glMakeTextureHandleResidentARB(handle);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    glDeleteSamplers(1, &sampler);
+
+    /* Texture handle should still be resident. */
+    ret = glIsTextureHandleResidentARB(handle);
+    if (!piglit_check_gl_error(GL_NO_ERROR))
+        return PIGLIT_FAIL;
+
+    if (!ret)
+        return PIGLIT_FAIL;

Should you now do:


    glDeleteTextures(1, &texture);

    /* Texture handle should have been removed. */
    glIsTextureHandleResidentARB(handle);
    if (!piglit_check_gl_error(GL_INVALID_OPERATION))
        return PIGLIT_FAIL;

?

Not necessarily, it's similar to test #1.


I disagree. If you don't test that the handle is removed when deleting
the texture you don't even know that the reference was removed by
glDeleteSamplers(1, &sampler);

Also this is calling glGetTextureSamplerHandleARB(texture, sampler) not
glGetTextureHandleARB() or glGetTextureSamplerHandleARB() which have
been tested elsewhere including test #1.

The only way to make sure glGetTextureSamplerHandleARB() doesn't do
something funny that results in the handle hanging around is to delete
both the sampler and texture.




+
+    return PIGLIT_PASS;
+}
+


<snip/>

diff --git a/tests/spec/arb_bindless_texture/limit.c
b/tests/spec/arb_bindless_texture/limit.c
new file mode 100644
index 000000000..960027597
--- /dev/null
+++ b/tests/spec/arb_bindless_texture/limit.c
@@ -0,0 +1,302 @@
+/*

There should be a copyright here???

No. The original file doesn't have one.

That looks like a mistake to me. It should have one, its referenced by
the license itself:

"The above copyright notice and this permission notice (including
 the next paragraph) shall be included in all copies or substantial
portions of the Software."



+ * 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.
+ *
+ * Authors:
+ *  Marek Olšák <[email protected]>
+ *  Samuel Pitoiset <[email protected]>
+ */
+
+/**
+ * Test that samplers accessed using texture handles are not counted
against
+ * the texture limits.
+ * Derived from Marek's max-samplers test.
+ */

<snip/>
_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to