If user call glTexImage1D with width = 0 and height = 0(the last level) like this: glTexImage1D(GL_TEXTURE_1D, level, interfomart, 0, 0, format, type, pixel)
It would generate a SIGSEGV fault. As i945_miptree_layout_2d didn't handle this special case. More info are commented in line in this patch. This would fix the oglc divzero(basic.texQOrWEqualsZero) and divzero(basic.texTrivialPrim) test case fail. Signed-off-by: Yuanhan Liu <yuanhan....@linux.intel.com> --- src/mesa/drivers/dri/intel/intel_tex_layout.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_tex_layout.c b/src/mesa/drivers/dri/intel/intel_tex_layout.c index 9d81523..4ec71c2 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_layout.c +++ b/src/mesa/drivers/dri/intel/intel_tex_layout.c @@ -61,6 +61,18 @@ void i945_miptree_layout_2d(struct intel_context *intel, GLuint width = mt->width0; GLuint height = mt->height0; + if (width == 0 && _mesa_get_texture_dimensions(mt->target) == 1) { + /* + * This is the _real_ last level of 1D texture with width equal + * to 0. Just simply set total_height to 0 to indicate this is + * a NULL texture. Or it will get a value of ALIGN(1, aligh_h), + * which equals to 2, as mesa would set the value of _height_ + * to 1 in 1D texture. + */ + mt->total_height = 0; + return; + } + mt->total_width = mt->width0; intel_get_texture_alignment_unit(mt->format, &align_w, &align_h); -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev