No, I do not believe this commit has made it. Courtney
On Wed, Feb 26, 2014 at 11:44 AM, Ian Romanick <i...@freedesktop.org> wrote: > On 02/17/2014 09:43 AM, Courtney Goeltzenleuchter wrote: > >> Thanks for the feedback. >> >> I've updated the patch to integrate Ian's comments. >> > > Did the updated patch ever land? > > Courtney >> >> >> On Fri, Feb 14, 2014 at 2:00 PM, Ian Romanick <i...@freedesktop.org >> <mailto:i...@freedesktop.org>> wrote: >> >> On 02/14/2014 07:52 AM, Courtney Goeltzenleuchter wrote: >> > Decompressing ETC2 textures was causing intermitent segfault >> > by copying resulting 4x4 texel block to the destination texture >> > regardless of the size of the destination texture. Issue found >> > via application crash in GLBenchmark 3.0's Manhattan test. >> >> So... the problem is that every ETC texture is (physically) a multiple >> of 4 width, but we may have allocated a decompression buffer that was >> the logical width of the texture. I think the code needs more of a >> comment explaining that. Otherwise, when someone comes back to it in >> a >> year (or uses it as a model for some other texture compression code), >> they won't understand why the code is the way it is. >> >> With that, this patch is >> >> Reviewed-by: Ian Romanick <ian.d.roman...@intel.com >> <mailto:ian.d.roman...@intel.com>> >> >> >> One additional suggestion below that you can take or leave. >> >> > Signed-off-by: Courtney Goeltzenleuchter <court...@lunarg.com> >> >> Also add: >> >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=74988 >> Cc: "9.2 10.0 10.1" <mesa-sta...@lists.freedesktop.org >> <mailto:mesa-sta...@lists.freedesktop.org>> >> >> >> > --- >> > src/mesa/main/texcompress_etc.c | 49 >> +++++++++++++++++++++-------------------- >> > 1 file changed, 25 insertions(+), 24 deletions(-) >> > >> > diff --git a/src/mesa/main/texcompress_etc.c >> b/src/mesa/main/texcompress_etc.c >> > index e3862be..f9234b0 100644 >> > --- a/src/mesa/main/texcompress_etc.c >> > +++ b/src/mesa/main/texcompress_etc.c >> > @@ -684,9 +684,10 @@ etc2_unpack_rgb8(uint8_t *dst_row, >> > etc2_rgb8_parse_block(&block, src, >> > false /* punchthrough_alpha */); >> > >> >> Alternately, the code below could be: >> >> const unsigned h = MIN2(bh, height - y); >> const unsigned w = MIN2(bw, width - x); >> >> ... >> >> for (j = 0; j < h; j++) { >> >> ... >> >> for (i = 0; i < w; i++) { >> >> >> > - for (j = 0; j < bh; j++) { >> > + /* be sure to stay within the bounds of the texture */ >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_rgb8_fetch_texel(&block, i, j, dst, >> > false /* punchthrough_alpha >> */); >> > dst[3] = 255; >> > @@ -721,9 +722,9 @@ etc2_unpack_srgb8(uint8_t *dst_row, >> > etc2_rgb8_parse_block(&block, src, >> > false /* punchthrough_alpha */); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_rgb8_fetch_texel(&block, i, j, dst, >> > false /* punchthrough_alpha >> */); >> > /* Convert to MESA_FORMAT_B8G8R8A8_SRGB */ >> > @@ -764,9 +765,9 @@ etc2_unpack_rgba8(uint8_t *dst_row, >> > for (x = 0; x < width; x+= bw) { >> > etc2_rgba8_parse_block(&block, src); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_rgba8_fetch_texel(&block, i, j, dst); >> > dst += comps; >> > } >> > @@ -801,9 +802,9 @@ etc2_unpack_srgb8_alpha8(uint8_t *dst_row, >> > for (x = 0; x < width; x+= bw) { >> > etc2_rgba8_parse_block(&block, src); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_rgba8_fetch_texel(&block, i, j, dst); >> > >> > /* Convert to MESA_FORMAT_B8G8R8A8_SRGB */ >> > @@ -843,9 +844,9 @@ etc2_unpack_r11(uint8_t *dst_row, >> > for (x = 0; x < width; x+= bw) { >> > etc2_r11_parse_block(&block, src); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps * comp_size; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_r11_fetch_texel(&block, i, j, dst); >> > dst += comps * comp_size; >> > } >> > @@ -879,10 +880,10 @@ etc2_unpack_rg11(uint8_t *dst_row, >> > /* red component */ >> > etc2_r11_parse_block(&block, src); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + >> > x * comps * comp_size; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_r11_fetch_texel(&block, i, j, dst); >> > dst += comps * comp_size; >> > } >> > @@ -890,10 +891,10 @@ etc2_unpack_rg11(uint8_t *dst_row, >> > /* green component */ >> > etc2_r11_parse_block(&block, src + 8); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + >> > x * comps * comp_size; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_r11_fetch_texel(&block, i, j, dst + >> comp_size); >> > dst += comps * comp_size; >> > } >> > @@ -926,10 +927,10 @@ etc2_unpack_signed_r11(uint8_t *dst_row, >> > for (x = 0; x < width; x+= bw) { >> > etc2_r11_parse_block(&block, src); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + >> > x * comps * comp_size; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_signed_r11_fetch_texel(&block, i, j, dst); >> > dst += comps * comp_size; >> > } >> > @@ -963,10 +964,10 @@ etc2_unpack_signed_rg11(uint8_t *dst_row, >> > /* red component */ >> > etc2_r11_parse_block(&block, src); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + >> > x * comps * comp_size; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_signed_r11_fetch_texel(&block, i, j, dst); >> > dst += comps * comp_size; >> > } >> > @@ -974,10 +975,10 @@ etc2_unpack_signed_rg11(uint8_t *dst_row, >> > /* green component */ >> > etc2_r11_parse_block(&block, src + 8); >> > >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + >> > x * comps * comp_size; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_signed_r11_fetch_texel(&block, i, j, dst + >> comp_size); >> > dst += comps * comp_size; >> > } >> > @@ -1007,9 +1008,9 @@ >> etc2_unpack_rgb8_punchthrough_alpha1(uint8_t *dst_row, >> > for (x = 0; x < width; x+= bw) { >> > etc2_rgb8_parse_block(&block, src, >> > true /* punchthrough_alpha */); >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_rgb8_fetch_texel(&block, i, j, dst, >> > true /* punchthrough_alpha >> */); >> > dst += comps; >> > @@ -1042,9 +1043,9 @@ >> etc2_unpack_srgb8_punchthrough_alpha1(uint8_t *dst_row, >> > for (x = 0; x < width; x+= bw) { >> > etc2_rgb8_parse_block(&block, src, >> > true /* punchthrough_alpha */); >> > - for (j = 0; j < bh; j++) { >> > + for (j = 0; j < bh && (j+y) < height; j++) { >> > uint8_t *dst = dst_row + (y + j) * dst_stride + x * >> comps; >> > - for (i = 0; i < bw; i++) { >> > + for (i = 0; i < bw && (i+x) < width; i++) { >> > etc2_rgb8_fetch_texel(&block, i, j, dst, >> > true /* punchthrough_alpha >> */); >> > /* Convert to MESA_FORMAT_B8G8R8A8_SRGB */ >> > >> >> >> >> >> -- >> Courtney Goeltzenleuchter >> LunarG >> >> > -- Courtney Goeltzenleuchter LunarG
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev