[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