[Piglit] [PATCH] for gles v1 extension oes_query_matrix
Brian Paul
brianp at vmware.com
Thu Dec 12 07:36:56 PST 2013
On 12/12/2013 07:42 AM, Huang Jun wrote:
> ---
> tests/all.tests | 4 +
> tests/spec/CMakeLists.txt | 1 +
> tests/spec/oes_query_matrix/CMakeLists.gles1.txt | 7 +
> tests/spec/oes_query_matrix/CMakeLists.txt | 1 +
> tests/spec/oes_query_matrix/oes_query_matrix-api.c | 283 ++++++++++++++++++++
> 5 files changed, 296 insertions(+)
> create mode 100755 tests/spec/oes_query_matrix/CMakeLists.gles1.txt
> create mode 100755 tests/spec/oes_query_matrix/CMakeLists.txt
> create mode 100644 tests/spec/oes_query_matrix/oes_query_matrix-api.c
>
> diff --git a/tests/all.tests b/tests/all.tests
> index cdaf1d5..af129bb 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -2647,6 +2647,10 @@ oes_matrix_get = Group()
> spec['OES_matrix_get'] = oes_matrix_get
> oes_matrix_get['All queries'] = concurrent_test('oes_matrix_get-api')
>
> +oes_query_matrix = Group()
> +spec['OES_query_matrix'] = oes_query_matrix
> +oes_query_matrix['All queries'] = concurrent_test('oes_query_matrix-api')
> +
> oes_fixed_point = Group()
> spec['OES_fixed_point'] = oes_fixed_point
> oes_fixed_point['attribute-arrays'] = concurrent_test('oes_fixed_point-attribute-arrays')
> diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt
> index 1229a03..535b9e2 100644
> --- a/tests/spec/CMakeLists.txt
> +++ b/tests/spec/CMakeLists.txt
> @@ -57,6 +57,7 @@ add_subdirectory (nv_texture_barrier)
> add_subdirectory (oes_compressed_etc1_rgb8_texture)
> add_subdirectory (oes_compressed_paletted_texture)
> add_subdirectory (oes_matrix_get)
> +add_subdirectory (oes_query_matrix)
> add_subdirectory (arb_draw_elements_base_vertex)
> add_subdirectory (arb_fragment_program)
> add_subdirectory (arb_vertex_array_bgra)
> diff --git a/tests/spec/oes_query_matrix/CMakeLists.gles1.txt b/tests/spec/oes_query_matrix/CMakeLists.gles1.txt
> new file mode 100755
> index 0000000..131fda5
> --- /dev/null
> +++ b/tests/spec/oes_query_matrix/CMakeLists.gles1.txt
> @@ -0,0 +1,7 @@
> +link_libraries(
> + piglitutil_${piglit_target_api}
> + )
> +
> +piglit_add_executable(oes_query_matrix-api oes_query_matrix-api.c)
> +
> +# vim: ft=cmake:
> diff --git a/tests/spec/oes_query_matrix/CMakeLists.txt b/tests/spec/oes_query_matrix/CMakeLists.txt
> new file mode 100755
> index 0000000..144a306
> --- /dev/null
> +++ b/tests/spec/oes_query_matrix/CMakeLists.txt
> @@ -0,0 +1 @@
> +piglit_include_target_api()
> diff --git a/tests/spec/oes_query_matrix/oes_query_matrix-api.c b/tests/spec/oes_query_matrix/oes_query_matrix-api.c
> new file mode 100644
> index 0000000..0a45841
> --- /dev/null
> +++ b/tests/spec/oes_query_matrix/oes_query_matrix-api.c
> @@ -0,0 +1,283 @@
> +/*
> + * Copyright © 2013 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.
> + */
> +
> +/**
> + * @file
> + * @brief Test GL_OES_query_matrix with types of operation in OpenGL ES 1.1.
> + *
> + * It uses the GL_FIXED data type.
> + *
> + */
> +
> +#include "piglit-util-gl-common.h"
> +#include "piglit-util-egl.h"
> +//#include "common.h"
> +//#include "egl-util.h"//GLUtils::getProcAddress
Any reason to keep those comment lines?
> +
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> + config.supports_gl_es_version = 11;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +
> +
> +
> +static PFNGLQUERYMATRIXXOESPROC glQueryMatrixxOES;
> +static bool pass = true;
> +static char sOut[256]={0}, sTmp[256]={0};
> +
> +bool verifyQuery(GLfloat* matrix, GLbitfield status)
This function should be static. Can matrix be const-qualified?
> +{
> + GLfloat (*m)[4]=(void *)matrix;// GLfloat m[4]
We use 8-space tabs for indentation in Piglit. See the HACKING file for
more style guidelines. In fact, you may want to run your code through
the 'indent' command seen in HACKING.
> + GLint i,j,k;
Space after commas.
> + bool functionPass=true;
space before/after =
> + GLbitfield querystatus;
> + GLfixed fMan[16];
> + GLint iExp[16];
> + GLfloat fQueryresult, fLimite, fDiff;
fLimite -> fLimit
> + sOut[0]='\0';
> + strcat(sOut, sTmp);
> + querystatus = glQueryMatrixxOES(fMan, iExp );
> + functionPass = piglit_check_gl_error(GL_NO_ERROR) && functionPass;
> + snprintf(sTmp, sizeof(sTmp), "0x%x,0x%x, VerifyQuery:\n",
> + status,querystatus);
> + strcat(sOut, sTmp);
> +
> + for (i = 0; i < 4; i++) {
> + for (j = 0; j < 4; j++)
> + {
Brace on same line as for.
> + k=j*4+i;
Spaces around operators.
> + strcat(sOut, "\t\t");
> + fQueryresult = 1.0*fMan[k]* (exp2 (iExp[k])/(1<<16));
> + fLimite = 0.01*( fabs( fQueryresult)+1);
> + fDiff = m[i][j] - fQueryresult;
> + if ((querystatus & (1<<k)) != 0 && (status & (1<<k) )!= 0)
> + strcat(sOut, "sameNA");
> +
> + else if ( (fDiff <= fLimite) && (fDiff>= -fLimite))
abs(fDiff) <= fLimit ?
> + {
Brace on prev line.
> + strcat(sOut, "sameValue");
> + }
> + else
> + {
} else {
> + if( ! (fDiff<=fLimite))
if (!(fDiff <= fLimit))
> + {
> + snprintf(sTmp, sizeof(sTmp),
> + "should:%f<%f",(float)fDiff,(float)fLimite);
> + strcat(sOut, sTmp);
> + }
> + else if (! (fDiff>=(-fLimite)))
> + {
> + snprintf(sTmp, sizeof(sTmp),
> + "should:%f>%f",(float)fDiff,(float)(-fLimite));
> + strcat(sOut, sTmp);
> + }
> + else
> + {
> + snprintf(sTmp, sizeof(sTmp),
> + "should:%f=%f,%i=%i",
> + fQueryresult, m[i][j],querystatus & (1<<k),
> + status & (1<<k));
> + strcat(sOut, sTmp);
> + }
> + functionPass = false;
> + }
> + }
> +
> + strcat(sOut, "\n");
> + }
> + strcat(sOut, "\n");
> + sTmp[0] = '\0';
> + return functionPass ? PIGLIT_PASS : PIGLIT_FAIL;
The return type of the function is bool, not piglit_result
> +}
The code in that function is a bit hard to follow without any comments.
Also, maybe it should be structured so that the floating point matrix is
first constructed from the mantisa & exponent arrays first. Then,
compare that matrix to the expected result.
> +
> +
> +/* new window size or exposure */
> +static void
> +tests()
static bool
tests(void)
{
> +{
> +
> + GLint maxexp;
> + GLfixed maxman ;
> + GLfloat basedm[16] = {
> + 1, 0, 0, 0 ,
> + 0, 1, 0, 0,
> + 0, 0, 1, 0,
> + 0, 0, 0, 1},
> +
> + transformedm1[16] = {
> + 6.666626, 0, 0, 0,
> + 0, 5, 0, 0,
> + 0, 0, -1.181793,-10.908936,
> + 0, 0, -1,0},
> +
> + transformedm2[16] = {
> + 0.444443, 0, 0, 0,
> + 0, 0.333328, 0, 0,
> + 0, 0, -0.666656, 0.333328,
> + 0, 0, 0, 1},
> + transformedm3[16] = {
> + 2, 0, 0,0,
> + 0, 3, 0, 0,
> + 0, 0, 0.500000, 0,
> + 0, 0, 0, 1},
> + transformedm4[16] = {
> + 2, 0, 0, 2,
> + 0, 3, 0, 6,
> + 0, 0, 0.500000, -3,
> + 0, 0, 0, 1},
> + transformedm5[16] = {
> + 1.999939, -0.002892, 0.005826, 0,
> + 0.002926, 2.999878, -0.017427, 0,
> + -0.002905, 0.002913, 0.499977, 0,
> + 0, 0, 0, 1},
> + transformedm6[16] ={
> + 2, 0, 0, 0 ,
> + 0, 0, 0, 0,
> + 0, 0, 3.4E38, 0,
> + 0, 0, 0, 1},
> + transformedm7[16] ={
> + 1, 0, 0, 2,
> + 0, 1, 0, 0,
> + 0, 0, 1, 3.4E38,
> + 0, 0, 0, 1},
> + transformedm8[16] ={
> + 1, 0, 0, 2,
> + 0, 1, 0, 0,
> + 0, 0, 1, 3.4E38,
> + 0, 0, 0, 1},
> + transformedm9[16] ={
> + 2, 0, 0, 2,
> + 0, 0, 0, 0,
> + 0, 0, 3.4E38, 3.4E38,
> + 0, 0, 0, 1};
Can all those arrays be marked const?
> +
> + GLfloat ar = (GLfloat) 3 / (GLfloat) 4;
3.0f / 4.0f ?
> +
> +
A single blank line would be enough.
> + glMatrixMode(GL_PROJECTION);
> + glLoadIdentity();
> + glPushMatrix();
> +
> + snprintf(sTmp, sizeof(sTmp), "Identity:\n");
> + pass = pass && !verifyQuery(basedm,0);
Se usually do "pass = test() && pass"
Maybe use piglit_report_subtest_result() for each test?
> +
> +
> + glFrustumf(-ar, ar, -1, 1, 5.0, 60.0);
> + snprintf(sTmp, sizeof(sTmp), "Frustum:\n");
> + pass = pass && !verifyQuery(transformedm1,0);
> +
> +
> + glPopMatrix();
> + pass = pass && !verifyQuery(basedm,0);
> + glOrthof(-3.0*ar, 3.0*ar, -3.0, 3.0, -2.0, 1.0);
> +
> + pass = pass && !verifyQuery(transformedm2,0);
> +
> + glMatrixMode(GL_MODELVIEW);
> + glLoadIdentity();
> + glScalef(2.0,3.0,0.5);
> +
> + pass = pass && !verifyQuery(transformedm3,0);
> + snprintf(sTmp, sizeof(sTmp), "Push,Translate:\n");
> + glPushMatrix();
> + glTranslatef(1.0, 2.0, -6.0);
> +
> + pass = pass && !verifyQuery(transformedm4,0);
> +
> + snprintf(sTmp, sizeof(sTmp), "pop:%5Cn");
> + glPopMatrix();
> + pass = pass && !verifyQuery(transformedm3,0);
> +
> + snprintf(sTmp, sizeof(sTmp), "Rotate:\n");
> + glRotatef(0.5,1.0,1.0,0.5);
> +
> + pass = pass && !verifyQuery(transformedm5,0);
> +
> + snprintf(sTmp, sizeof(sTmp), "overflow by max of GLfixed:\n");
> + glLoadIdentity();
> + maxexp= (1<<(8*sizeof(GLint)-1))^(GLint)(-1);
> + maxman = (1<<(8*sizeof(GLfixed)-1))^ (GLfixed)(-1);
> + glTranslatef(1.0, 2.0, 1.0*maxman* (exp2 (maxexp)/(1<<16)));
> +
> + pass = pass && !verifyQuery(basedm,0xf000);
> +
> + snprintf(sTmp, sizeof(sTmp), "invalid bits still:\n");
> + glScalef(2.0,3.0,0.5);
> +
> + pass = pass && !verifyQuery(transformedm3,0xf000);
> +
> + snprintf(sTmp, sizeof(sTmp),
> + "revalid bits. glScalef with max and min of GLfloat:\n");
> + glLoadIdentity();
> + glScalef(2.0,3.4E-38,3.4E38);
> + pass = pass && !verifyQuery(transformedm6,0);
> +
> + snprintf(sTmp, sizeof(sTmp),
> + "glTranslatef with max and min of GLfloat:\n");
> + glLoadIdentity();
> + glTranslatef(2.0,3.4E-38,3.4E38);
> + pass = pass && !verifyQuery(transformedm7,0);
> +
> + snprintf(sTmp, sizeof(sTmp),
> + "glRotatef a circle:\n");
> + glRotatef(360, 0, 0, 0);
> + pass = pass && !verifyQuery(transformedm7,0);
> +
> + snprintf(sTmp, sizeof(sTmp),
> + "glRotatef with max and min of GLfloat:\n");
> + glRotatef(360, 2.0,3.4E-38,3.4E38);
> + pass = pass && !verifyQuery(transformedm8,0);
> +
> + snprintf(sTmp, sizeof(sTmp),
> + "glScalef again with max and min of GLfloat:\n");
> + glScalef(2.0,3.4E-38,3.4E38);
> + pass = pass && !verifyQuery(transformedm9,0);
> +
> + if (pass != true )
> + fprintf(stderr, "%s\nVerify Query Fail\n", sOut);
> + return;
Let's return pass here
> +}
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> + /* UNREACHED */
> + return PIGLIT_FAIL;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> + piglit_require_extension("GL_OES_query_matrix");
> + glQueryMatrixxOES = (PFNGLQUERYMATRIXXOESPROC)
> + eglGetProcAddress("glQueryMatrixxOES");
> + if (!glQueryMatrixxOES)
> + piglit_report_result(PIGLIT_FAIL);
> +
> + tests();
> + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
> +}
> +
> +
>
More information about the Piglit
mailing list