[Piglit] [PATCH v2] miptree: test ability to use upside down miptree

Emil Velikov emil.l.velikov at gmail.com
Tue Dec 11 15:01:29 UTC 2018


Hi Andrii,

Pardon for joining so late. The patch looks ok, although a few bits I'm unsure
about - see the "Note" below.

There's a bunch of cosmetic suggestions as well - I won't read too much into
them though.

On Mon, 3 Dec 2018 at 15:07, <asimiklit.work at gmail.com> wrote:

[snip]
> +#define TW 64
> +#define TH 64
#define LEVELS 7 // aka log2(min(TW,TH)) + 1 ?
Then swap nlevels with LEVELS throughout the file.

static const GLubyte fancy_pixel = [255, 128, 64, 32];

> +static void
> +get_rect_bounds(int pos, int *x, int *y, int *w, int *h)
> +{
> +       *x = pos * (piglit_width / 3) + 5;
> +       *y = 5;
> +       *w = piglit_width / 3 - 10;
> +       *h = piglit_height - 10;
> +}
Note: The variable "pos" is always 0. If that's intentional - I'd just
drop and simplify.
Alternatively


> +       const GLfloat expected[4] = { oneby255 * 255.0,
> +                                                                                       oneby255 * 128.0,
> +                                                                                       oneby255 * 64.0,
> +                                                                                       oneby255 * 32.0 };
Use fancy_pixel for expected[]


[snip]
> +       for(level = 1; level < nlevels && pass; ++level)
> +       {
Style nits: space after "for", "{" should be trailing on previous
line, post increment

> +               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, level);
> +               glClear(GL_COLOR_BUFFER_BIT);
> +               /* If we the draw_rect function doesn't cause crash/assertion
> +               * it means everything is okay and test will be marked
> +               * as pass
> +               */
> +               draw_rect(pos);
> +               /** Just in case we check it
> +                */
> +               pass = pass && probe_pos(pos, expected);

Note: In piglit we try to run all the tests, even if one fails. Some tests could
be doing it wrong though :-(

Personally I would drop the "&& pass" from the loop condition and use:
    pass = foo() && pass;

[snip]
> +       for (i = 0; i < TH; i++) {
> +               for (j = 0; j < TW; j++) {
> +                       img[i][j][0] = 255;
> +                       img[i][j][1] = 128;
> +                       img[i][j][2] = 64;
> +                       img[i][j][3] = 32;

for (i = 0; i < TH; i++)
    for (j = 0; j < TW; j++)
        img[i][j] = fancy_pixel;


[snip]

> +       w = TW;
> +       h = TH;
> +       for (nlevels = 0; w > 0 && h > 0; nlevels++) {
> +               w /= 2;
> +               h /= 2;
> +       }
> +       w = TW;
> +       h = TH;
> +       for (i = 0; w > 0 && h > 0; i++) {
> +               glTexImage2D(GL_TEXTURE_2D, nlevels - 1 - i, GL_RGBA, w, h, 0,
> +                            GL_RGBA, GL_UNSIGNED_BYTE, img);
> +               w /= 2;
> +               h /= 2;
> +       }
> +
With the LEVELS, all the above becomes:

       for (i = 0; i < LEVELS; i++) {
               glTexImage2D(GL_TEXTURE_2D, nlevels - 1 - i, GL_RGBA, w, h, 0,
                            GL_RGBA, GL_UNSIGNED_BYTE, img);
               w /= 2;
               h /= 2;
       }


HTH
Emil


More information about the Piglit mailing list