diff --git a/.pick_status.json b/.pick_status.json index 076185313d1..b3a8c1d44a6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -814,7 +814,7 @@ "description": "anv: properly flag image/imageviews for ISL protection", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index 5b9f750725a..ebe8062a136 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -251,6 +251,9 @@ anv_image_choose_isl_surf_usage(struct anv_physical_device *device, VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT)) isl_usage |= ISL_SURF_USAGE_2D_3D_COMPATIBLE_BIT; + if (vk_create_flags & VK_IMAGE_CREATE_PROTECTED_BIT) + isl_usage |= ISL_SURF_USAGE_PROTECTED_BIT; + /* Even if we're only using it for transfer operations, clears to depth and * stencil images happen as depth and stencil so they need the right ISL * usage bits or else things will fall apart. @@ -3237,6 +3240,9 @@ anv_image_fill_surface_state(struct anv_device *device, struct isl_view view = *view_in; view.usage |= view_usage; + /* Propagate the protection flag of the image to the view. */ + view_usage |= surface->isl.usage & ISL_SURF_USAGE_PROTECTED_BIT; + if (view_usage == ISL_SURF_USAGE_RENDER_TARGET_BIT) view.swizzle = anv_swizzle_for_render(view.swizzle);