mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-25 15:40:46 +02:00
blorp: Set view usage to ISL_SURF_USAGE_STORAGE_BIT for compute
Suggested-by: Kenneth Graunke <kenneth@whitecape.org> Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11564>
This commit is contained in:
parent
dd35b9fa34
commit
44ba094b1d
4 changed files with 33 additions and 23 deletions
|
|
@ -77,12 +77,13 @@ blorp_batch_finish(struct blorp_batch *batch)
|
|||
}
|
||||
|
||||
void
|
||||
brw_blorp_surface_info_init(struct blorp_context *blorp,
|
||||
brw_blorp_surface_info_init(struct blorp_batch *batch,
|
||||
struct brw_blorp_surface_info *info,
|
||||
const struct blorp_surf *surf,
|
||||
unsigned int level, float layer,
|
||||
enum isl_format format, bool is_render_target)
|
||||
enum isl_format format, bool is_dest)
|
||||
{
|
||||
struct blorp_context *blorp = batch->blorp;
|
||||
memset(info, 0, sizeof(*info));
|
||||
assert(level < surf->surf->levels);
|
||||
assert(layer < MAX2(surf->surf->logical_level0_px.depth >> level,
|
||||
|
|
@ -105,9 +106,18 @@ brw_blorp_surface_info_init(struct blorp_context *blorp,
|
|||
info->clear_color = surf->clear_color;
|
||||
info->clear_color_addr = surf->clear_color_addr;
|
||||
|
||||
isl_surf_usage_flags_t view_usage;
|
||||
if (is_dest) {
|
||||
if (batch->flags & BLORP_BATCH_USE_COMPUTE)
|
||||
view_usage = ISL_SURF_USAGE_STORAGE_BIT;
|
||||
else
|
||||
view_usage = ISL_SURF_USAGE_RENDER_TARGET_BIT;
|
||||
} else {
|
||||
view_usage = ISL_SURF_USAGE_TEXTURE_BIT;
|
||||
}
|
||||
|
||||
info->view = (struct isl_view) {
|
||||
.usage = is_render_target ? ISL_SURF_USAGE_RENDER_TARGET_BIT :
|
||||
ISL_SURF_USAGE_TEXTURE_BIT,
|
||||
.usage = view_usage,
|
||||
.format = format,
|
||||
.base_level = level,
|
||||
.levels = 1,
|
||||
|
|
@ -117,7 +127,7 @@ brw_blorp_surface_info_init(struct blorp_context *blorp,
|
|||
info->view.array_len = MAX2(info->surf.logical_level0_px.depth,
|
||||
info->surf.logical_level0_px.array_len);
|
||||
|
||||
if (!is_render_target &&
|
||||
if (!is_dest &&
|
||||
(info->surf.dim == ISL_SURF_DIM_3D ||
|
||||
info->surf.msaa_layout == ISL_MSAA_LAYOUT_ARRAY)) {
|
||||
/* 3-D textures don't support base_array layer and neither do 2-D
|
||||
|
|
@ -138,7 +148,7 @@ brw_blorp_surface_info_init(struct blorp_context *blorp,
|
|||
/* Sandy Bridge and earlier have a limit of a maximum of 512 layers for
|
||||
* layered rendering.
|
||||
*/
|
||||
if (is_render_target && blorp->isl_dev->info->ver <= 6)
|
||||
if (is_dest && blorp->isl_dev->info->ver <= 6)
|
||||
info->view.array_len = MIN2(info->view.array_len, 512);
|
||||
|
||||
if (surf->tile_x_sa || surf->tile_y_sa) {
|
||||
|
|
@ -422,7 +432,7 @@ blorp_hiz_op(struct blorp_batch *batch, struct blorp_surf *surf,
|
|||
for (uint32_t a = 0; a < num_layers; a++) {
|
||||
const uint32_t layer = start_layer + a;
|
||||
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.depth, surf, level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.depth, surf, level,
|
||||
layer, surf->surf->format, true);
|
||||
|
||||
/* Align the rectangle primitive to 8x4 pixels.
|
||||
|
|
|
|||
|
|
@ -2353,9 +2353,9 @@ blorp_blit(struct blorp_batch *batch,
|
|||
}
|
||||
}
|
||||
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.src, src_surf, src_level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.src, src_surf, src_level,
|
||||
src_layer, src_format, false);
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, dst_surf, dst_level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, dst_surf, dst_level,
|
||||
dst_layer, dst_format, true);
|
||||
|
||||
params.src.view.swizzle = src_swizzle;
|
||||
|
|
@ -2657,9 +2657,9 @@ blorp_copy(struct blorp_batch *batch,
|
|||
|
||||
blorp_params_init(¶ms);
|
||||
params.snapshot_type = INTEL_SNAPSHOT_COPY;
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.src, src_surf, src_level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.src, src_surf, src_level,
|
||||
src_layer, ISL_FORMAT_UNSUPPORTED, false);
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, dst_surf, dst_level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, dst_surf, dst_level,
|
||||
dst_layer, ISL_FORMAT_UNSUPPORTED, true);
|
||||
|
||||
struct brw_blorp_blit_prog_key wm_prog_key = {
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@ blorp_fast_clear(struct blorp_batch *batch,
|
|||
if (!blorp_params_get_clear_kernel(batch, ¶ms, true, false))
|
||||
return;
|
||||
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf, level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, surf, level,
|
||||
start_layer, format, true);
|
||||
params.num_samples = params.dst.surf.samples;
|
||||
|
||||
|
|
@ -459,7 +459,7 @@ blorp_clear(struct blorp_batch *batch,
|
|||
return;
|
||||
|
||||
while (num_layers > 0) {
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf, level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, surf, level,
|
||||
start_layer, format, true);
|
||||
params.dst.view.swizzle = swizzle;
|
||||
|
||||
|
|
@ -635,7 +635,7 @@ blorp_clear_stencil_as_rgba(struct blorp_batch *batch,
|
|||
for (uint32_t a = 0; a < num_layers; a++) {
|
||||
uint32_t layer = start_layer + a;
|
||||
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf, level,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, surf, level,
|
||||
layer, ISL_FORMAT_UNSUPPORTED, true);
|
||||
|
||||
if (surf->surf->samples > 1)
|
||||
|
|
@ -704,7 +704,7 @@ blorp_clear_depth_stencil(struct blorp_batch *batch,
|
|||
params.num_layers = num_layers;
|
||||
|
||||
if (stencil_mask) {
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.stencil, stencil,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.stencil, stencil,
|
||||
level, start_layer,
|
||||
ISL_FORMAT_UNSUPPORTED, true);
|
||||
params.stencil_mask = stencil_mask;
|
||||
|
|
@ -726,7 +726,7 @@ blorp_clear_depth_stencil(struct blorp_batch *batch,
|
|||
}
|
||||
|
||||
if (clear_depth) {
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.depth, depth,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.depth, depth,
|
||||
level, start_layer,
|
||||
ISL_FORMAT_UNSUPPORTED, true);
|
||||
params.z = depth_value;
|
||||
|
|
@ -918,7 +918,7 @@ blorp_hiz_clear_depth_stencil(struct blorp_batch *batch,
|
|||
for (uint32_t l = 0; l < num_layers; l++) {
|
||||
const uint32_t layer = start_layer + l;
|
||||
if (clear_stencil) {
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.stencil, stencil,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.stencil, stencil,
|
||||
level, layer,
|
||||
ISL_FORMAT_UNSUPPORTED, true);
|
||||
params.stencil_mask = 0xff;
|
||||
|
|
@ -930,7 +930,7 @@ blorp_hiz_clear_depth_stencil(struct blorp_batch *batch,
|
|||
/* If we're clearing depth, we must have HiZ */
|
||||
assert(depth && isl_aux_usage_has_hiz(depth->aux_usage));
|
||||
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.depth, depth,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.depth, depth,
|
||||
level, layer,
|
||||
ISL_FORMAT_UNSUPPORTED, true);
|
||||
params.depth.clear_color.f32[0] = depth_value;
|
||||
|
|
@ -1073,7 +1073,7 @@ blorp_ccs_resolve(struct blorp_batch *batch,
|
|||
default:
|
||||
assert(false);
|
||||
}
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, surf,
|
||||
level, start_layer, format, true);
|
||||
|
||||
/* From the Ivy Bridge PRM, Vol2 Part1 11.9 "Render Target Resolve":
|
||||
|
|
@ -1244,9 +1244,9 @@ blorp_mcs_partial_resolve(struct blorp_batch *batch,
|
|||
params.x1 = surf->surf->logical_level0_px.width;
|
||||
params.y1 = surf->surf->logical_level0_px.height;
|
||||
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.src, surf, 0,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.src, surf, 0,
|
||||
start_layer, format, false);
|
||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf, 0,
|
||||
brw_blorp_surface_info_init(batch, ¶ms.dst, surf, 0,
|
||||
start_layer, format, true);
|
||||
|
||||
params.num_samples = params.dst.surf.samples;
|
||||
|
|
|
|||
|
|
@ -68,11 +68,11 @@ struct brw_blorp_surface_info
|
|||
};
|
||||
|
||||
void
|
||||
brw_blorp_surface_info_init(struct blorp_context *blorp,
|
||||
brw_blorp_surface_info_init(struct blorp_batch *batch,
|
||||
struct brw_blorp_surface_info *info,
|
||||
const struct blorp_surf *surf,
|
||||
unsigned int level, float layer,
|
||||
enum isl_format format, bool is_render_target);
|
||||
enum isl_format format, bool is_dest);
|
||||
void
|
||||
blorp_surf_convert_to_single_slice(const struct isl_device *isl_dev,
|
||||
struct brw_blorp_surface_info *info);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue