Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> --- src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 9 ++++++--- src/mesa/drivers/dri/intel/intel_mipmap_tree.h | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index 61ff2db..7ab147c 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -201,6 +201,7 @@ intel_miptree_create(struct intel_context *intel, GLenum base_format; bool wraps_etc1 = false; bool wraps_etc2 = false; + gl_format etc2_format; GLuint total_width, total_height; if (format == MESA_FORMAT_ETC1_RGB8) { @@ -209,6 +210,7 @@ intel_miptree_create(struct intel_context *intel, } if (format == MESA_FORMAT_ETC2_RGB8) { + etc2_format = format; format = MESA_FORMAT_RGBX8888_REV; wraps_etc2 = true; } @@ -265,6 +267,7 @@ intel_miptree_create(struct intel_context *intel, mt->wraps_etc1 = wraps_etc1; mt->wraps_etc2 = wraps_etc2; + mt->etc2_format = etc2_format; mt->region = intel_region_alloc(intel->intelScreen, tiling, mt->cpp, @@ -1292,8 +1295,8 @@ intel_miptree_map_etc2(struct intel_context *intel, assert(map->mode & GL_MAP_WRITE_BIT); assert(map->mode & GL_MAP_INVALIDATE_RANGE_BIT); - map->stride = _mesa_format_row_stride(MESA_FORMAT_ETC2_RGB8, map->w); - map->buffer = malloc(_mesa_format_image_size(MESA_FORMAT_ETC2_RGB8, + map->stride = _mesa_format_row_stride(mt->etc2_format, map->w); + map->buffer = malloc(_mesa_format_image_size(mt->etc2_format, map->w, map->h, 1)); map->ptr = map->buffer; } @@ -1315,7 +1318,7 @@ intel_miptree_unmap_etc2(struct intel_context *intel, _mesa_unpack_etc2_format(xbgr, mt->region->pitch * mt->region->cpp, map->ptr, map->stride, - map->w, map->h); + map->w, map->h, mt->etc2_format); intel_region_unmap(intel, mt->region); free(map->buffer); diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h index a1121e7..095d45b 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h @@ -197,11 +197,14 @@ struct intel_mipmap_tree * MESA_FORMAT_Z32_FLOAT, otherwise for MESA_FORMAT_S8_Z24 objects it will be * MESA_FORMAT_X8_Z24. * - * For ETC1 textures, this is MESA_FORMAT_RGBX8888_REV if the hardware - * lacks support for ETC1. See @ref wraps_etc1. + * For ETC1 / ETC2 textures, this is MESA_FORMAT_RGBX8888_REV if the hardware + * lacks support for ETC1 / ETC2. See @ref wraps_etc1, wraps_etc2. */ gl_format format; + /** This variable stores the value of ETC2 compressed texture format */ + gl_format etc2_format; + /** * The X offset of each image in the miptree must be aligned to this. See * the "Alignment Unit Size" section of the BSpec. -- 1.7.7.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev