From afacde35531b74ccb250c65d298678b6993a339d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 14 Nov 2017 09:36:23 -0700 Subject: [PATCH] svga: fix 1-element cube map array issue As with 1D and 2D array textures, if there's only one array element (one cubemap in this case) we have to issue different shader code. This fixes a number of Piglit cubemap array tests. Reviewed-by: Charmaine Lee --- src/gallium/drivers/svga/svga_shader.c | 12 ++++++++---- src/gallium/drivers/svga/svga_tgsi_vgpu10.c | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/svga/svga_shader.c b/src/gallium/drivers/svga/svga_shader.c index ebf1131d51d..1eb8b229747 100644 --- a/src/gallium/drivers/svga/svga_shader.c +++ b/src/gallium/drivers/svga/svga_shader.c @@ -208,16 +208,20 @@ svga_init_shader_key_common(const struct svga_context *svga, assert(view->texture); assert(view->texture->target < (1 << 4)); /* texture_target:4 */ - /* 1D/2D array textures with one slice are treated as non-arrays - * by the SVGA3D device. Set the is_array flag only if we know that - * we have more than 1 element. This will be used to select shader - * instruction/resource types during shader translation. + /* 1D/2D array textures with one slice and cube map array textures + * with one cube are treated as non-arrays by the SVGA3D device. + * Set the is_array flag only if we know that we have more than 1 + * element. This will be used to select shader instruction/resource + * types during shader translation. */ switch (view->texture->target) { case PIPE_TEXTURE_1D_ARRAY: case PIPE_TEXTURE_2D_ARRAY: key->tex[i].is_array = view->texture->array_size > 1; break; + case PIPE_TEXTURE_CUBE_ARRAY: + key->tex[i].is_array = view->texture->array_size > 6; + break; default: ; /* nothing / silence compiler warning */ } diff --git a/src/gallium/drivers/svga/svga_tgsi_vgpu10.c b/src/gallium/drivers/svga/svga_tgsi_vgpu10.c index 03ea67cad65..85074187155 100644 --- a/src/gallium/drivers/svga/svga_tgsi_vgpu10.c +++ b/src/gallium/drivers/svga/svga_tgsi_vgpu10.c @@ -3197,7 +3197,8 @@ tgsi_texture_to_resource_dimension(enum tgsi_texture_type target, : VGPU10_RESOURCE_DIMENSION_TEXTURE2DMS; case TGSI_TEXTURE_CUBE_ARRAY: case TGSI_TEXTURE_SHADOWCUBE_ARRAY: - return VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY; + return is_array ? VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY + : VGPU10_RESOURCE_DIMENSION_TEXTURECUBE; default: assert(!"Unexpected resource type"); return VGPU10_RESOURCE_DIMENSION_TEXTURE2D; -- 2.30.2