Danylo Piliaiev <danylo.pilia...@gmail.com> writes: > Test for the regression which happened when GL_TEXTURE_BUFFER was > allowed to have incompatible format. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106465 > > Signed-off-by: Danylo Piliaiev <danylo.pilia...@globallogic.com> > --- > .../arb_shader_image_load_store/invalid.c | 54 +++++++++++++++++-- > 1 file changed, 49 insertions(+), 5 deletions(-) > > diff --git a/tests/spec/arb_shader_image_load_store/invalid.c > b/tests/spec/arb_shader_image_load_store/invalid.c > index ed4b6c064..adab56ffc 100644 > --- a/tests/spec/arb_shader_image_load_store/invalid.c > +++ b/tests/spec/arb_shader_image_load_store/invalid.c > @@ -172,12 +172,45 @@ init_level(const struct image_info img, unsigned level, > GLenum format, unsigned w, unsigned h) > { > uint32_t pixels[4 * N]; > - > init_pixels(img, pixels, 1, 1, 1, 1); > - glBindTexture(GL_TEXTURE_2D, get_texture(0)); > - glTexImage2D(GL_TEXTURE_2D, level, format, > - w, h, 0, img.format->pixel_format, > - image_base_type(img.format), pixels); > + > + glBindTexture(img.target->target, get_texture(0)); > + > + switch (img.target->target) { > + case GL_TEXTURE_2D: { > + glTexImage2D(GL_TEXTURE_2D, level, format, > + w, h, 0, img.format->pixel_format, > + image_base_type(img.format), pixels); > + break; > + } > + case GL_TEXTURE_BUFFER: { > + const struct image_extent grid = > image_optimal_extent(img.size); > + GLuint packed_tex; > + > + assert(level == 0); > + > + glBindBuffer(GL_PIXEL_PACK_BUFFER, get_buffer(0)); > + glBufferData(GL_PIXEL_PACK_BUFFER, > + img.size.x * image_pixel_size(img.format) / 8, > + NULL, GL_STATIC_DRAW); > + > + glGenTextures(1, &packed_tex); > + glBindTexture(GL_TEXTURE_2D, packed_tex); > + > + glTexImage2D(GL_TEXTURE_2D, 0, format, > + grid.x, grid.y, 0, img.format->pixel_format, > + image_base_type(img.format), pixels); > + glGetTexImage(GL_TEXTURE_2D, 0, img.format->pixel_format, > + img.format->pixel_type, NULL); > + glDeleteTextures(1, &packed_tex); > + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); > + > + glTexBuffer(GL_TEXTURE_BUFFER, format, get_buffer(0)); > + break;
Can't you call upload_image() instead of reimplementing these hacks here in order to pack the pixels into a PBO? Texture buffers only have one level anyway so it shouldn't hurt to recreate the whole texture. > + } > + default: > + abort(); > + } > > return piglit_check_gl_error(GL_NO_ERROR); > } > @@ -346,6 +379,8 @@ piglit_init(int argc, char **argv) > for (op = image_ops; op->name; ++op) { > const struct image_info def_img = image_info( > GL_TEXTURE_2D, op->formats[0].format, W, H); > + const struct image_info def_img_buffer = image_info( > + GL_TEXTURE_BUFFER, op->formats[0].format, W, H); > > /* > * According to the spec, an access is considered > @@ -399,6 +434,15 @@ piglit_init(int argc, char **argv) > invalidate_incompatible_format, false), > "%s/incompatible format test", op->name); > > + /* Test for the regression which happened when > + * GL_TEXTURE_BUFFER was allowed to have incompatible format. > + */ > + subtest(&status, true, > + run_test(op, def_img_buffer, def_img_buffer, > + invalidate_incompatible_format, false), > + "%s/incompatible format test/image%s", > + op->name, def_img_buffer.target->name); > + > /* > * " * the texture bound to the image unit has layers, > * and the selected layer or cube map face doesn't > -- > 2.17.1
signature.asc
Description: PGP signature
_______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit