anv: use main image address to determine ccs compatibility
The BO address is not really a good criteria since we can bind an image at an offset inside a BO. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Fixes:ee6e2bc4a3
("anv: Place images into the aux-map when safe to do so") Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Reviewed-by: José Roberto de Souza <jose.souza@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26335> (cherry picked from commitb09db9d823
)
This commit is contained in:

committed by
Eric Engestrom

parent
d8bb6fb2dc
commit
d0993405a4
@@ -1754,7 +1754,7 @@
|
|||||||
"description": "anv: use main image address to determine ccs compatibility",
|
"description": "anv: use main image address to determine ccs compatibility",
|
||||||
"nominated": true,
|
"nominated": true,
|
||||||
"nomination_type": 1,
|
"nomination_type": 1,
|
||||||
"resolution": 0,
|
"resolution": 1,
|
||||||
"main_sha": null,
|
"main_sha": null,
|
||||||
"because_sha": "ee6e2bc4a31345e50b3c674cdae233a5de5179d1",
|
"because_sha": "ee6e2bc4a31345e50b3c674cdae233a5de5179d1",
|
||||||
"notes": null
|
"notes": null
|
||||||
|
@@ -2302,10 +2302,9 @@ VkResult anv_BindImageMemory2(
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Add the plane to the aux map when applicable. */
|
/* Add the plane to the aux map when applicable. */
|
||||||
if (anv_bo_allows_aux_map(device, bo)) {
|
const struct anv_address main_addr = anv_image_address(
|
||||||
const struct anv_address main_addr =
|
image, &image->planes[p].primary_surface.memory_range);
|
||||||
anv_image_address(image,
|
if (anv_address_allows_aux_map(device, main_addr)) {
|
||||||
&image->planes[p].primary_surface.memory_range);
|
|
||||||
const struct anv_address aux_addr =
|
const struct anv_address aux_addr =
|
||||||
anv_image_address(image,
|
anv_image_address(image,
|
||||||
&image->planes[p].compr_ctrl_memory_range);
|
&image->planes[p].compr_ctrl_memory_range);
|
||||||
|
@@ -4942,6 +4942,24 @@ anv_bo_allows_aux_map(const struct anv_device *device,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
anv_address_allows_aux_map(const struct anv_device *device,
|
||||||
|
struct anv_address addr)
|
||||||
|
{
|
||||||
|
if (device->aux_map_ctx == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* Technically, we really only care about what offset the image is bound
|
||||||
|
* into on the BO, but we don't have that information here. As a heuristic,
|
||||||
|
* rely on the BO offset instead.
|
||||||
|
*/
|
||||||
|
if (((addr.bo ? addr.bo->offset : 0) + addr.offset) %
|
||||||
|
intel_aux_map_get_alignment(device->aux_map_ctx) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
anv_cmd_buffer_mark_image_written(struct anv_cmd_buffer *cmd_buffer,
|
anv_cmd_buffer_mark_image_written(struct anv_cmd_buffer *cmd_buffer,
|
||||||
const struct anv_image *image,
|
const struct anv_image *image,
|
||||||
|
Reference in New Issue
Block a user