iris: Pin surface state buffers after possibly updating the clear color
On Gen8, updating the clear color will end up allocating new SURFACE_STATE entries. These might end up living in a different BO than the original copies, which means that we have to pin _after_ updating the clear color, not before. Found by inspection. Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com> Reviewed-by: Nanley Chery <nanley.g.chery@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9257>
This commit is contained in:
parent
60573b443b
commit
b9133e48a6
|
@ -4819,16 +4819,6 @@ use_surface(struct iris_context *ice,
|
|||
struct iris_resource *res = (void *) p_surf->texture;
|
||||
uint32_t offset = 0;
|
||||
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(p_surf->texture),
|
||||
writeable, access);
|
||||
if (GEN_GEN == 8 && is_read_surface) {
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state_read.ref.res), false,
|
||||
IRIS_DOMAIN_NONE);
|
||||
} else {
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state.ref.res), false,
|
||||
IRIS_DOMAIN_NONE);
|
||||
}
|
||||
|
||||
if (res->aux.bo) {
|
||||
iris_use_pinned_bo(batch, res->aux.bo, writeable, access);
|
||||
if (res->aux.clear_color_bo)
|
||||
|
@ -4846,6 +4836,16 @@ use_surface(struct iris_context *ice,
|
|||
}
|
||||
}
|
||||
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(p_surf->texture),
|
||||
writeable, access);
|
||||
if (GEN_GEN == 8 && is_read_surface) {
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state_read.ref.res), false,
|
||||
IRIS_DOMAIN_NONE);
|
||||
} else {
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(surf->surface_state.ref.res), false,
|
||||
IRIS_DOMAIN_NONE);
|
||||
}
|
||||
|
||||
offset = (GEN_GEN == 8 && is_read_surface)
|
||||
? surf->surface_state_read.ref.offset
|
||||
: surf->surface_state.ref.offset;
|
||||
|
@ -4862,10 +4862,6 @@ use_sampler_view(struct iris_context *ice,
|
|||
enum isl_aux_usage aux_usage =
|
||||
iris_resource_texture_aux_usage(ice, isv->res, isv->view.format);
|
||||
|
||||
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);
|
||||
|
||||
if (isv->res->aux.bo) {
|
||||
iris_use_pinned_bo(batch, isv->res->aux.bo,
|
||||
false, IRIS_DOMAIN_OTHER_READ);
|
||||
|
@ -4880,6 +4876,10 @@ 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->res, isv->res->aux.sampler_usages,
|
||||
aux_usage);
|
||||
|
|
Loading…
Reference in New Issue