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 <charmainel@vmware.com>
This commit is contained in:
Brian Paul 2017-11-14 09:36:23 -07:00
parent 767c1eb436
commit afacde3553
2 changed files with 10 additions and 5 deletions

View File

@ -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 */
}

View File

@ -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;