On 03/11/2014 06:51 PM, Anuj Phogat wrote:
This patch is to verify a bug fix in mesa commit 079bff5. This commit
allowed GL_DEPTH_COMPONENT and GL_DEPTH_STENCIL combinations in
glTexImage{123}D functions.

Signed-off-by: Anuj Phogat <[email protected]>
---
  tests/texturing/teximage-errors.c | 73 ++++++++++++++++++++++++++++++++++++++-
  1 file changed, 72 insertions(+), 1 deletion(-)

diff --git a/tests/texturing/teximage-errors.c 
b/tests/texturing/teximage-errors.c
index 39b7e9b..c01c5e0 100644
--- a/tests/texturing/teximage-errors.c
+++ b/tests/texturing/teximage-errors.c
@@ -36,7 +36,37 @@ PIGLIT_GL_TEST_CONFIG_BEGIN

  PIGLIT_GL_TEST_CONFIG_END

+struct format_desc {
+   GLenum internalformat;
+   GLenum format;
+   GLenum type;
+};

+static const struct format_desc formats_allowed[] = {
+   {GL_DEPTH_COMPONENT16, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},
+   {GL_DEPTH_COMPONENT24, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},
+   {GL_DEPTH_COMPONENT32F, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},
+
+   {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_FLOAT},
+   {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_FLOAT},
+   {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT},
+
+   {GL_DEPTH24_STENCIL8, GL_DEPTH_COMPONENT, GL_FLOAT},
+   {GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT, GL_FLOAT},

So for that combination, do the texture's stencil values get set to zero?

+   {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8},
+   {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}};
+
+static const struct format_desc formats_not_allowed[] = {
+   {GL_DEPTH_COMPONENT16, GL_STENCIL_INDEX, GL_INT},
+   {GL_DEPTH_COMPONENT24, GL_STENCIL_INDEX, GL_INT},
+   {GL_DEPTH_COMPONENT32F, GL_STENCIL_INDEX, GL_INT},
+
+   {GL_DEPTH24_STENCIL8, GL_STENCIL_INDEX, GL_INT},
+   {GL_DEPTH32F_STENCIL8, GL_STENCIL_INDEX, GL_INT},
+
+   {GL_RGBA8, GL_DEPTH_COMPONENT, GL_FLOAT},
+   {GL_RGBA8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}};

  /** Test target params to glTexImage functions */
  static GLboolean
@@ -167,7 +197,34 @@ test_pos_and_sizes(void)
     return GL_TRUE;
  }

-
+/* Test the combinations of depth formats in glTexImage{123}D() */
+static GLboolean

bool


+test_depth_formats(const struct format_desc *test, GLenum expected_error,
+                   GLint n_tests)
+{
+   int i;
+   bool result = true;
+
+   for(i = 0; i < n_tests; i++) {

We usually put a space after "for" and "if"


+      if((test[i].internalformat == GL_DEPTH_COMPONENT32F ||
+          test[i].internalformat == GL_DEPTH32F_STENCIL8) &&
+          !piglit_is_extension_supported("GL_ARB_depth_buffer_float"))
+         continue;
+
+      glTexImage1D(GL_TEXTURE_1D, 0, test[i].internalformat, 16, 0,
+                   test[i].format, test[i].type, NULL);
+      result = piglit_check_gl_error(expected_error) && result;
+
+      glTexImage2D(GL_TEXTURE_2D, 0, test[i].internalformat, 16, 16,
+                   0, test[i].format, test[i].type, NULL);
+      result = piglit_check_gl_error(expected_error) && result;
+
+      glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, test[i].internalformat,
+                   16, 16, 16, 0, test[i].format, test[i].type, NULL);

Do we need to check if the texture array extension is available?


+      result = piglit_check_gl_error(expected_error) && result;
+   }
+   return result;
+}
  enum piglit_result
  piglit_display(void)
  {
@@ -175,6 +232,20 @@ piglit_display(void)
     pass = test_targets() && pass;
     pass = test_pos_and_sizes() && pass;

+  /*  From OpenGL 3.3 spec, page 141:
+   *    "Textures with a base internal format of DEPTH_COMPONENT or
+   *     DEPTH_STENCIL require either depth component data or depth/stencil
+   *     component data. Textures with other base internal formats require
+   *     RGBA component data. The error INVALID_OPERATION is generated if
+   *     one of the base internal format and format is DEPTH_COMPONENT or
+   *     DEPTH_STENCIL, and the other is neither of these values."
+   */
+   pass = test_depth_formats(formats_allowed, GL_NO_ERROR,
+                             ARRAY_SIZE(formats_allowed))
+          && pass;
+   pass = test_depth_formats(formats_not_allowed, GL_INVALID_OPERATION,
+                             ARRAY_SIZE(formats_not_allowed))
+          && pass;
     return pass ? PIGLIT_PASS: PIGLIT_FAIL;
  }



Looks OK otherwise.


_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to