[virglrenderer-devel] [PATCH] vrend: specify correct offset in resource copy fallback path

Gurchetan Singh gurchetansingh at chromium.org
Fri Mar 16 21:20:31 UTC 2018


There's another issue with this function.  I'll send out a v4 patch soon.

On Thu, Mar 15, 2018 at 5:05 PM, Gurchetan Singh
<gurchetansingh at chromium.org> wrote:
> glGetTexImage returns the entire texture, and we always copy from
> the beginning of the texture. Instead, we should start copying
> from the offset specified by the bounding box.
>
> Fixes:
>     dEQP-GLES3.functional.texture.shadow.2d_array.*.*depth*
>
> Example test cases:
>     dEQP-GLES3.functional.texture.shadow.2d_array.linear.not_equal_depth_component32f
>     dEQP-GLES3.functional.texture.shadow.2d_array.nearest_mipmap_nearest.less_or_equal_depth_component16
>     dEQP-GLES3.functional.texture.shadow.2d_array.nearest_mipmap_nearest.greater_or_equal_depth_component16
>
> v2: Cubemap textures seem to suffer from the same issue:
>
> Fixes:
>    dEQP-GLES3.functional.texture.shadow.cube.nearest.*
>
> Example test cases:
>     dEQP-GLES3.functional.texture.shadow.cube.nearest.less_or_equal_depth_component16
>     dEQP-GLES3.functional.texture.shadow.cube.nearest.less_or_equal_depth24_stencil8
>
> v3: Make sure we still make only 1 glTexSubImage3D call in the non-cubemap case
> ---
>  src/vrend_renderer.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
> index 68bc932..3496ebf 100644
> --- a/src/vrend_renderer.c
> +++ b/src/vrend_renderer.c
> @@ -5737,8 +5737,10 @@ static void vrend_resource_copy_fallback(struct vrend_context *ctx,
>     }
>
>     glBindTexture(dst_res->target, dst_res->id);
> -   slice_offset = 0;
> -   for (i = 0; i < cube_slice; i++) {
> +   slice_offset = dstz * slice_size;
> +   cube_slice = (src_res->target == GL_TEXTURE_CUBE_MAP) ? dstz + src_box->depth : cube_slice;
> +   i = (src_res->target == GL_TEXTURE_CUBE_MAP) ? dstz : 0;
> +   for (; i < cube_slice; i++) {
>        GLenum ctarget = dst_res->target == GL_TEXTURE_CUBE_MAP ? GL_TEXTURE_CUBE_MAP_POSITIVE_X + i : dst_res->target;
>        if (compressed) {
>           if (ctarget == GL_TEXTURE_1D) {
> --
> 2.16.2.804.g6dcf76e118-goog
>


More information about the virglrenderer-devel mailing list