[Piglit] [PATCH 2/2] teximage-errors: Test the combinations of depth and depth-stencil formats
Anuj Phogat
anuj.phogat at gmail.com
Wed Mar 12 11:56:17 PDT 2014
On Wed, Mar 12, 2014 at 6:24 AM, Brian Paul <brianp at vmware.com> wrote:
> 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 <anuj.phogat at gmail.com>
>> ---
>> 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?
From OpenGL 3.3 spec, page 140:
"If the base internal format is DEPTH_STENCIL and format is not DEPTH_-
STENCIL, then the values of the stencil index texture components are
undefined."
>
>
> + {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?
Yes. I'll add a check before glTexImage3D() call.
>
>
> + 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.
>
After fixing your comments, should I consider this r-b you?
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20140312/bf7745a8/attachment.html>
More information about the Piglit
mailing list