iris: Add and use use_surface_state

This helper simplifies some repeated logic.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14806>
This commit is contained in:
Nanley Chery 2021-09-15 07:37:38 -07:00 committed by Marge Bot
parent 89ebdd67c4
commit eb51fd0414

View file

@ -4878,6 +4878,18 @@ update_clear_value(struct iris_context *ice,
#endif
}
static uint32_t
use_surface_state(struct iris_batch *batch,
struct iris_surface_state *surf_state,
enum isl_aux_usage aux_usage)
{
iris_use_pinned_bo(batch, iris_resource_bo(surf_state->ref.res), false,
IRIS_DOMAIN_NONE);
return surf_state->ref.offset +
surf_state_offset_for_aux(surf_state->aux_usages, aux_usage);
}
/**
* Add a surface to the validation list, as well as the buffer containing
* the corresponding SURFACE_STATE.
@ -4895,7 +4907,6 @@ use_surface(struct iris_context *ice,
{
struct iris_surface *surf = (void *) p_surf;
struct iris_resource *res = (void *) p_surf->texture;
uint32_t offset = 0;
if (GFX_VER == 8 && is_read_surface && !surf->surface_state_read.ref.res) {
upload_surface_states(ice->state.surface_uploader,
@ -4926,22 +4937,10 @@ use_surface(struct iris_context *ice,
iris_use_pinned_bo(batch, res->bo, writeable, access);
if (GFX_VER == 8 && is_read_surface) {
iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state_read.ref.res), false,
IRIS_DOMAIN_NONE);
return use_surface_state(batch, &surf->surface_state_read, aux_usage);
} else {
iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state.ref.res), false,
IRIS_DOMAIN_NONE);
return use_surface_state(batch, &surf->surface_state, aux_usage);
}
offset = (GFX_VER == 8 && is_read_surface)
? surf->surface_state_read.ref.offset
: surf->surface_state.ref.offset;
return offset +
surf_state_offset_for_aux((GFX_VER == 8 && is_read_surface)
? surf->surface_state_read.aux_usages
: surf->surface_state.aux_usages,
aux_usage);
}
static uint32_t
@ -4973,11 +4972,8 @@ use_sampler_view(struct iris_context *ice,
}
iris_use_pinned_bo(batch, isv->res->bo, false, IRIS_DOMAIN_OTHER_READ);
iris_use_pinned_bo(batch, iris_resource_bo(isv->surface_state.ref.res), false,
IRIS_DOMAIN_NONE);
return isv->surface_state.ref.offset +
surf_state_offset_for_aux(isv->surface_state.aux_usages, aux_usage);
return use_surface_state(batch, &isv->surface_state, aux_usage);
}
static uint32_t
@ -5011,8 +5007,6 @@ use_image(struct iris_batch *batch, struct iris_context *ice,
bool write = iv->base.shader_access & PIPE_IMAGE_ACCESS_WRITE;
iris_use_pinned_bo(batch, res->bo, write, IRIS_DOMAIN_NONE);
iris_use_pinned_bo(batch, iris_resource_bo(iv->surface_state.ref.res),
false, IRIS_DOMAIN_NONE);
if (res->aux.bo)
iris_use_pinned_bo(batch, res->aux.bo, write, IRIS_DOMAIN_NONE);
@ -5020,8 +5014,7 @@ use_image(struct iris_batch *batch, struct iris_context *ice,
enum isl_aux_usage aux_usage =
iris_image_view_aux_usage(ice, &iv->base, info);
return iv->surface_state.ref.offset +
surf_state_offset_for_aux(iv->surface_state.aux_usages, aux_usage);
return use_surface_state(batch, &iv->surface_state, aux_usage);
}
#define push_bt_entry(addr) \