On 10.05.2017 09:23, Timothy Arceri wrote:
Noticed by inspection. The assert should have caught this already but seems to have been incorrectly removed in b8939fd3d1544f.
How on earth is there no piglit test that catches the texturesubimage thing? Do you think you can add one?
--- I'm not overly familiar with this code but this seems to be how it's intended to be used. src/mesa/main/teximage.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 2486704..1dd53ac 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -2669,20 +2669,21 @@ _mesa_update_fbo_texture(struct gl_context *ctx, /** * If the texture object's GenerateMipmap flag is set and we've * changed the texture base level image, regenerate the rest of the * mipmap levels now. */ static inline void check_gen_mipmap(struct gl_context *ctx, GLenum target, struct gl_texture_object *texObj, GLint level) { + assert(target != GL_TEXTURE_CUBE_MAP);
I don't think this is correct. teximage calls this function unconditionally, regardless of texture target.
The other changes look fine, but I'm a bit suspicious as noted above... Cheers, Nicolai
if (texObj->GenerateMipmap && level == texObj->BaseLevel && level < texObj->MaxLevel) { assert(ctx->Driver.GenerateMipmap); ctx->Driver.GenerateMipmap(ctx, target, texObj); } } /** Debug helper: override the user-requested internal format */ @@ -3369,21 +3370,22 @@ texturesubimage(struct gl_context *ctx, GLuint dims, return; } imageStride = _mesa_image_image_stride(&ctx->Unpack, width, height, format, type); /* Copy in each face. */ for (i = zoffset; i < zoffset + depth; ++i) { texImage = texObj->Image[i][level]; assert(texImage); - _mesa_texture_sub_image(ctx, 3, texObj, texImage, texObj->Target, + _mesa_texture_sub_image(ctx, 3, texObj, texImage, + GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, level, xoffset, yoffset, 0, width, height, 1, format, type, pixels, true); pixels = (GLubyte *) pixels + imageStride; } } else { texImage = _mesa_select_tex_image(texObj, texObj->Target, level); assert(texImage); @@ -4758,23 +4760,23 @@ _mesa_CompressedTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, "glCompressedTextureSubImage3D(cube map incomplete)"); return; } /* Copy in each face. */ for (i = 0; i < 6; ++i) { texImage = texObj->Image[i][level]; assert(texImage); compressed_texture_sub_image(ctx, 3, texObj, texImage, - texObj->Target, level, xoffset, yoffset, - zoffset, width, height, 1, format, - imageSize, pixels); + GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, + level, xoffset, yoffset, zoffset, width, + height, 1, format, imageSize, pixels); /* Compressed images don't have a client format */ image_stride = _mesa_format_image_size(texImage->TexFormat, texImage->Width, texImage->Height, 1); pixels += image_stride; imageSize -= image_stride; } }
-- Lerne, wie die Welt wirklich ist, Aber vergiss niemals, wie sie sein sollte. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev