mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
llvmpipe: implement support for cube map arrays
This just covers the resource side of things, not the actual sampling. Here things are trivial as cube map arrays are identical to 2d arrays in all respects. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
d308f57fe7
commit
ea05cfaaca
5 changed files with 16 additions and 4 deletions
|
|
@ -347,7 +347,8 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
|||
target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
target == PIPE_TEXTURE_RECT ||
|
||||
target == PIPE_TEXTURE_3D ||
|
||||
target == PIPE_TEXTURE_CUBE);
|
||||
target == PIPE_TEXTURE_CUBE ||
|
||||
target == PIPE_TEXTURE_CUBE_ARRAY);
|
||||
|
||||
if (sample_count > 1)
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -844,7 +844,8 @@ lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
|
|||
}
|
||||
|
||||
if (res->target == PIPE_TEXTURE_1D_ARRAY ||
|
||||
res->target == PIPE_TEXTURE_2D_ARRAY) {
|
||||
res->target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
res->target == PIPE_TEXTURE_CUBE_ARRAY) {
|
||||
/*
|
||||
* For array textures, we don't have first_layer, instead
|
||||
* adjust last_layer (stored as depth) plus the mip level offsets
|
||||
|
|
@ -856,6 +857,9 @@ lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
|
|||
jit_tex->mip_offsets[j] += view->u.tex.first_layer *
|
||||
lp_tex->img_stride[j];
|
||||
}
|
||||
if (res->target == PIPE_TEXTURE_CUBE_ARRAY) {
|
||||
assert(jit_tex->depth % 6 == 0);
|
||||
}
|
||||
assert(view->u.tex.first_layer <= view->u.tex.last_layer);
|
||||
assert(view->u.tex.last_layer < res->array_size);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -246,12 +246,16 @@ prepare_shader_sampling(
|
|||
img_stride[j] = lp_tex->img_stride[j];
|
||||
}
|
||||
if (res->target == PIPE_TEXTURE_1D_ARRAY ||
|
||||
res->target == PIPE_TEXTURE_2D_ARRAY) {
|
||||
res->target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
res->target == PIPE_TEXTURE_CUBE_ARRAY) {
|
||||
num_layers = view->u.tex.last_layer - view->u.tex.first_layer + 1;
|
||||
for (j = first_level; j <= last_level; j++) {
|
||||
mip_offsets[j] += view->u.tex.first_layer *
|
||||
lp_tex->img_stride[j];
|
||||
}
|
||||
if (res->target == PIPE_TEXTURE_CUBE_ARRAY) {
|
||||
assert(num_layers % 6 == 0);
|
||||
}
|
||||
assert(view->u.tex.first_layer <= view->u.tex.last_layer);
|
||||
assert(view->u.tex.last_layer < res->array_size);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,7 +137,8 @@ llvmpipe_texture_layout(struct llvmpipe_screen *screen,
|
|||
else if (lpr->base.target == PIPE_TEXTURE_3D)
|
||||
num_slices = depth;
|
||||
else if (lpr->base.target == PIPE_TEXTURE_1D_ARRAY ||
|
||||
lpr->base.target == PIPE_TEXTURE_2D_ARRAY)
|
||||
lpr->base.target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
lpr->base.target == PIPE_TEXTURE_CUBE_ARRAY)
|
||||
num_slices = layers;
|
||||
else
|
||||
num_slices = 1;
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ llvmpipe_resource_is_texture(const struct pipe_resource *resource)
|
|||
case PIPE_TEXTURE_RECT:
|
||||
case PIPE_TEXTURE_3D:
|
||||
case PIPE_TEXTURE_CUBE:
|
||||
case PIPE_TEXTURE_CUBE_ARRAY:
|
||||
return TRUE;
|
||||
default:
|
||||
assert(0);
|
||||
|
|
@ -165,6 +166,7 @@ llvmpipe_resource_is_1d(const struct pipe_resource *resource)
|
|||
case PIPE_TEXTURE_RECT:
|
||||
case PIPE_TEXTURE_3D:
|
||||
case PIPE_TEXTURE_CUBE:
|
||||
case PIPE_TEXTURE_CUBE_ARRAY:
|
||||
return FALSE;
|
||||
default:
|
||||
assert(0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue