[Piglit] [PATCH] getteximage-simple: Stress an i965 blitter path

Nanley Chery nanleychery at gmail.com
Wed May 30 22:21:06 UTC 2018


On Wed, May 30, 2018 at 05:44:26PM -0400, Ilia Mirkin wrote:
> Not all hardware supports 32K-wide textures. I believe GL's minimum
> requirement is in the 4K range -- not 100% sure. There's a query for
> it that you can use.
> 

Thanks for the heads up about the minimum requirement of the max texture
size. The minimum in GL 1.0 is 64 pixels, for GL 4.5 it's 16384 pixels.
This test allocates a texture that is 8192 pixels wide. Maybe using the
query is the best way to go about this. I'll take a closer look.

-Nanley

> On Wed, May 30, 2018 at 4:39 PM, Nanley Chery <nanleychery at gmail.com> wrote:
> > Change the dimension of the texture to test how i965 handles having a
> > row pitch too large for the BLT engine.
> > ---
> >  tests/texturing/getteximage-simple.c | 23 +++++++++++++++++------
> >  1 file changed, 17 insertions(+), 6 deletions(-)
> >
> > diff --git a/tests/texturing/getteximage-simple.c b/tests/texturing/getteximage-simple.c
> > index 273f2b36c..9a3678acf 100644
> > --- a/tests/texturing/getteximage-simple.c
> > +++ b/tests/texturing/getteximage-simple.c
> > @@ -8,6 +8,10 @@
> >   * texture images is executed before the readback.
> >   *
> >   * This used to crash for R300+bufmgr.
> > + *
> > + * This also used to stress test the blit methods in i965. The BLT engine only
> > + * supports pitch sizes up to but not including 32768 bytes. BLORP supports
> > + * even larger sizes.
> >   */
> >
> >  #include "piglit-util-gl.h"
> > @@ -21,19 +25,26 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
> >
> >  PIGLIT_GL_TEST_CONFIG_END
> >
> > -static GLubyte data[4096]; /* 64*16*4 */
> > +#define BYTES_PER_PIXEL 4
> > +#define WIDTH (32768 / BYTES_PER_PIXEL)
> > +#define HEIGHT 2 // Ensure that the pitch is used without using too much memory
> > +#define IMAGE_SIZE (WIDTH * BYTES_PER_PIXEL * HEIGHT)
> > +
> > +static GLubyte data[IMAGE_SIZE];
> >
> >  static int test_getteximage(void)
> >  {
> > -       GLubyte compare[4096];
> > +       GLubyte compare[IMAGE_SIZE];
> >         int i;
> >
> >         glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, compare);
> >
> > -       for(i = 0; i < 4096; ++i) {
> > +       for(i = 0; i < IMAGE_SIZE; ++i) {
> >                 if (data[i] != compare[i]) {
> >                         printf("GetTexImage() returns incorrect data in byte %i\n", i);
> > -                       printf("    corresponding to (%i,%i) channel %i\n", i / 64, (i / 4) % 16, i % 4);
> > +                       printf("    corresponding to (%i,%i) channel %i\n",
> > +                              i / WIDTH, (i / BYTES_PER_PIXEL) % HEIGHT,
> > +                              i % BYTES_PER_PIXEL);
> >                         printf("    expected: %i\n", data[i]);
> >                         printf("    got: %i\n", compare[i]);
> >                         return 0;
> > @@ -75,14 +86,14 @@ void piglit_init(int argc, char **argv)
> >         GLuint tex;
> >         int i;
> >
> > -       for(i = 0; i < 4096; ++i)
> > +       for(i = 0; i < IMAGE_SIZE; ++i)
> >                 data[i] = rand() & 0xff;
> >
> >         glGenTextures(1, &tex);
> >         glBindTexture(GL_TEXTURE_2D, tex);
> >         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
> >         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
> > -       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
> > +       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WIDTH, HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
> >
> >         piglit_gen_ortho_projection(0.0, 1.0, 0.0, 1.0, -2.0, 6.0, GL_FALSE);
> >  }
> > --
> > 2.17.0
> >
> > _______________________________________________
> > Piglit mailing list
> > Piglit at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list