iris: Split clear color and aux BO checks
CCS_E-enabled resources on XeHP have a clear color without an aux BO. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12795>
This commit is contained in:
@@ -4805,23 +4805,23 @@ use_surface(struct iris_context *ice,
|
||||
&surf->surface_state);
|
||||
}
|
||||
|
||||
if (res->aux.bo) {
|
||||
iris_use_pinned_bo(batch, res->aux.bo, writeable, access);
|
||||
if (res->aux.clear_color_bo)
|
||||
iris_use_pinned_bo(batch, res->aux.clear_color_bo, false, access);
|
||||
|
||||
if (memcmp(&res->aux.clear_color, &surf->clear_color,
|
||||
sizeof(surf->clear_color)) != 0) {
|
||||
update_clear_value(ice, batch, res, &surf->surface_state,
|
||||
res->aux.possible_usages, &surf->view);
|
||||
if (GFX_VER == 8) {
|
||||
update_clear_value(ice, batch, res, &surf->surface_state_read,
|
||||
res->aux.possible_usages, &surf->read_view);
|
||||
}
|
||||
surf->clear_color = res->aux.clear_color;
|
||||
if (memcmp(&res->aux.clear_color, &surf->clear_color,
|
||||
sizeof(surf->clear_color)) != 0) {
|
||||
update_clear_value(ice, batch, res, &surf->surface_state,
|
||||
res->aux.possible_usages, &surf->view);
|
||||
if (GFX_VER == 8) {
|
||||
update_clear_value(ice, batch, res, &surf->surface_state_read,
|
||||
res->aux.possible_usages, &surf->read_view);
|
||||
}
|
||||
surf->clear_color = res->aux.clear_color;
|
||||
}
|
||||
|
||||
if (res->aux.clear_color_bo)
|
||||
iris_use_pinned_bo(batch, res->aux.clear_color_bo, false, access);
|
||||
|
||||
if (res->aux.bo)
|
||||
iris_use_pinned_bo(batch, res->aux.bo, writeable, access);
|
||||
|
||||
iris_use_pinned_bo(batch, iris_resource_bo(p_surf->texture),
|
||||
writeable, access);
|
||||
if (GFX_VER == 8 && is_read_surface) {
|
||||
@@ -4851,18 +4851,21 @@ use_sampler_view(struct iris_context *ice,
|
||||
if (!isv->surface_state.ref.res)
|
||||
upload_surface_states(ice->state.surface_uploader, &isv->surface_state);
|
||||
|
||||
if (memcmp(&isv->res->aux.clear_color, &isv->clear_color,
|
||||
sizeof(isv->clear_color)) != 0) {
|
||||
update_clear_value(ice, batch, isv->res, &isv->surface_state,
|
||||
isv->res->aux.sampler_usages, &isv->view);
|
||||
isv->clear_color = isv->res->aux.clear_color;
|
||||
}
|
||||
|
||||
if (isv->res->aux.clear_color_bo) {
|
||||
iris_use_pinned_bo(batch, isv->res->aux.clear_color_bo,
|
||||
false, IRIS_DOMAIN_OTHER_READ);
|
||||
}
|
||||
|
||||
if (isv->res->aux.bo) {
|
||||
iris_use_pinned_bo(batch, isv->res->aux.bo,
|
||||
false, IRIS_DOMAIN_OTHER_READ);
|
||||
if (isv->res->aux.clear_color_bo)
|
||||
iris_use_pinned_bo(batch, isv->res->aux.clear_color_bo,
|
||||
false, IRIS_DOMAIN_OTHER_READ);
|
||||
if (memcmp(&isv->res->aux.clear_color, &isv->clear_color,
|
||||
sizeof(isv->clear_color)) != 0) {
|
||||
update_clear_value(ice, batch, isv->res, &isv->surface_state,
|
||||
isv->res->aux.sampler_usages, &isv->view);
|
||||
isv->clear_color = isv->res->aux.clear_color;
|
||||
}
|
||||
}
|
||||
|
||||
iris_use_pinned_bo(batch, isv->res->bo, false, IRIS_DOMAIN_OTHER_READ);
|
||||
|
||||
Reference in New Issue
Block a user