On Thu, Apr 05, 2018 at 10:51:21AM -0700, Jason Ekstrand wrote: > ping? >
I haven't yet gotten around to seeing how the users of the modifier API would use the newly-exposed CCS surface, but all the changes within anv look good to me. This patch is Acked-by: Nanley Chery <nanley.g.ch...@intel.com> > On Wed, Feb 21, 2018 at 11:17 AM, Jason Ekstrand <ja...@jlekstrand.net> > wrote: > > > v2 (Jason Ekstrand): > > - Return the correct enum values from anv_layout_to_fast_clear_type > > > > v3 (Jason Ekstrand): > > - Always return ANV_FAST_CLEAR_NONE and leave doing the right thing for > > the patch which adds a modifier which supports fast-clears. > > --- > > src/intel/vulkan/anv_formats.c | 9 ++++++++ > > src/intel/vulkan/anv_image.c | 50 ++++++++++++++++++++++++++---- > > ------------ > > 2 files changed, 40 insertions(+), 19 deletions(-) > > > > diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_ > > formats.c > > index 9c52ad5..3c17366 100644 > > --- a/src/intel/vulkan/anv_formats.c > > +++ b/src/intel/vulkan/anv_formats.c > > @@ -671,9 +671,18 @@ get_wsi_format_modifier_properties_list(const struct > > anv_physical_device *physic > > DRM_FORMAT_MOD_LINEAR, > > I915_FORMAT_MOD_X_TILED, > > I915_FORMAT_MOD_Y_TILED, > > + I915_FORMAT_MOD_Y_TILED_CCS, > > }; > > > > for (uint32_t i = 0; i < ARRAY_SIZE(modifiers); i++) { > > + const struct isl_drm_modifier_info *mod_info = > > + isl_drm_modifier_get_info(modifiers[i]); > > + > > + if (mod_info->aux_usage == ISL_AUX_USAGE_CCS_E && > > + !isl_format_supports_ccs_e(&physical_device->info, > > + anv_format->planes[0].isl_format)) > > + continue; > > + > > vk_outarray_append(&out, mod_props) { > > mod_props->modifier = modifiers[i]; > > if (isl_drm_modifier_has_aux(modifiers[i])) > > diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c > > index a2bae7b..9897e58 100644 > > --- a/src/intel/vulkan/anv_image.c > > +++ b/src/intel/vulkan/anv_image.c > > @@ -515,6 +515,7 @@ score_drm_format_mod(uint64_t modifier) > > case DRM_FORMAT_MOD_LINEAR: return 1; > > case I915_FORMAT_MOD_X_TILED: return 2; > > case I915_FORMAT_MOD_Y_TILED: return 3; > > + case I915_FORMAT_MOD_Y_TILED_CCS: return 4; > > default: unreachable("bad DRM format modifier"); > > } > > } > > @@ -746,8 +747,14 @@ void anv_GetImageSubresourceLayout( > > VkSubresourceLayout* layout) > > { > > ANV_FROM_HANDLE(anv_image, image, _image); > > - const struct anv_surface *surface = > > - get_surface(image, subresource->aspectMask); > > + > > + const struct anv_surface *surface; > > + if (subresource->aspectMask == VK_IMAGE_ASPECT_PLANE_1_BIT_KHR && > > + image->drm_format_mod != DRM_FORMAT_MOD_INVALID && > > + isl_drm_modifier_has_aux(image->drm_format_mod)) > > + surface = &image->planes[0].aux_surface; > > + else > > + surface = get_surface(image, subresource->aspectMask); > > > > assert(__builtin_popcount(subresource->aspectMask) == 1); > > > > @@ -862,25 +869,20 @@ anv_layout_to_aux_usage(const struct gen_device_info > > * const devinfo, > > } > > > > > > - case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: > > + case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: { > > assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT); > > > > - /* On SKL+, the render buffer can be decompressed by the > > presentation > > - * engine. Support for this feature has not yet landed in the wider > > - * ecosystem. TODO: Update this code when support lands. > > - * > > - * From the BDW PRM, Vol 7, Render Target Resolve: > > - * > > - * If the MCS is enabled on a non-multisampled render target, the > > - * render target must be resolved before being used for other > > - * purposes (display, texture, CPU lock) The clear value from > > - * SURFACE_STATE is written into pixels in the render target > > - * indicated as clear in the MCS. > > - * > > - * Pre-SKL, the render buffer must be resolved before being used for > > - * presentation. We can infer that the auxiliary buffer is not used. > > + /* When handing the image off to the presentation engine, we need to > > + * ensure that things are properly resolved. For images with no > > + * modifier, we assume that they follow the old rules and always > > need > > + * a full resolve because the PE doesn't understand any form of > > + * compression. For images with modifiers, we use the aux usage > > from > > + * the modifier. > > */ > > - return ISL_AUX_USAGE_NONE; > > + const struct isl_drm_modifier_info *mod_info = > > + isl_drm_modifier_get_info(image->drm_format_mod); > > + return mod_info ? mod_info->aux_usage : ISL_AUX_USAGE_NONE; > > + } > > > > > > /* Rendering Layouts */ > > @@ -960,8 +962,18 @@ anv_layout_to_fast_clear_type(const struct > > gen_device_info * const devinfo, > > case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: > > return ANV_FAST_CLEAR_ANY; > > > > - case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: > > + case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: { > > + assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT); > > +#ifndef NDEBUG > > + /* We do not yet support any modifiers which support clear color so > > we > > + * just always return NONE. One day, this will change. > > + */ > > + const struct isl_drm_modifier_info *mod_info = > > + isl_drm_modifier_get_info(image->drm_format_mod); > > + assert(!mod_info || !mod_info->supports_clear_color); > > +#endif > > return ANV_FAST_CLEAR_NONE; > > + } > > > > default: > > /* If the image has CCS_E enabled all the time then we can use > > -- > > 2.5.0.400.gff86faf > > > > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev