intel/blorp: Handle the 512 layers restriction on Sandy Bridge
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -139,6 +139,12 @@ brw_blorp_surface_info_init(struct blorp_context *blorp,
|
|||||||
info->view.array_len -= info->view.base_array_layer;
|
info->view.array_len -= info->view.base_array_layer;
|
||||||
info->z_offset = 0;
|
info->z_offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sandy Bridge has a limit of a maximum of 512 layers for layered
|
||||||
|
* rendering.
|
||||||
|
*/
|
||||||
|
if (is_render_target && blorp->isl_dev->info->gen == 6)
|
||||||
|
info->view.array_len = MIN2(info->view.array_len, 512);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -246,7 +246,6 @@ blorp_clear(struct blorp_batch *batch,
|
|||||||
{
|
{
|
||||||
struct blorp_params params;
|
struct blorp_params params;
|
||||||
blorp_params_init(¶ms);
|
blorp_params_init(¶ms);
|
||||||
params.num_layers = num_layers;
|
|
||||||
|
|
||||||
params.x0 = x0;
|
params.x0 = x0;
|
||||||
params.y0 = y0;
|
params.y0 = y0;
|
||||||
@@ -278,10 +277,20 @@ blorp_clear(struct blorp_batch *batch,
|
|||||||
blorp_params_get_clear_kernel(batch->blorp, ¶ms,
|
blorp_params_get_clear_kernel(batch->blorp, ¶ms,
|
||||||
use_simd16_replicated_data);
|
use_simd16_replicated_data);
|
||||||
|
|
||||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf, level,
|
while (num_layers > 0) {
|
||||||
start_layer, format, true);
|
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf, level,
|
||||||
|
start_layer, format, true);
|
||||||
|
|
||||||
batch->blorp->exec(batch, ¶ms);
|
/* We may be restricted on the number of layers we can bind at any one
|
||||||
|
* time. In particular, Sandy Bridge has a maximum number of layers of
|
||||||
|
* 512 but a maximum 3D texture size is much larger.
|
||||||
|
*/
|
||||||
|
params.num_layers = MIN2(params.dst.view.array_len, num_layers);
|
||||||
|
batch->blorp->exec(batch, ¶ms);
|
||||||
|
|
||||||
|
start_layer += params.num_layers;
|
||||||
|
num_layers -= params.num_layers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user