[Mesa-dev] [PATCH 2/2] anv/clear: Clear E5B9G9R9 images as R32_UINT

Jason Ekstrand jason at jlekstrand.net
Tue Aug 9 00:10:44 UTC 2016


On Mon, Aug 8, 2016 at 11:40 AM, Nanley Chery <nanleychery at gmail.com> wrote:

> On Wed, Aug 03, 2016 at 01:06:10PM -0700, Jason Ekstrand wrote:
> > We can't actually clear these images normally because we can't render to
> > them.  Instead, we have to manually unpack the rgb9e5 color value on the
> > CPU and clear it as R32_UINT.  We still have a bit of work to do to clear
> > non-power-of-two images, but this should get all of the power-of-two
> clears
> > working on at least Haswell.
>
> Could you mention which CTS tests this fixes? That would help me to test
> the correctness of this change.
>

The vulkan-cts-1.0-dev branch of the CTS has a bunch of tests to test
clearing.  This fixes 3 of the
dEQP-VK.api.image_clearing.clear_color_image.* tests


>
> >
> > Cc: "12.0" <mesa-stable at lists.freedesktop.org>
> > ---
> >  src/intel/vulkan/anv_meta_clear.c | 16 ++++++++++++++--
> >  1 file changed, 14 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/intel/vulkan/anv_meta_clear.c
> b/src/intel/vulkan/anv_meta_clear.c
> > index fa07ec1..d8b5ce0 100644
> > --- a/src/intel/vulkan/anv_meta_clear.c
> > +++ b/src/intel/vulkan/anv_meta_clear.c
> > @@ -25,6 +25,8 @@
> >  #include "anv_private.h"
> >  #include "nir/nir_builder.h"
> >
> > +#include "gallium/auxiliary/util/u_format_rgb9e5.h"
> > +
> >  /** Vertex attributes for color clears.  */
> >  struct color_clear_vattrs {
> >     struct anv_vue_header vue_header;
> > @@ -760,6 +762,16 @@ anv_cmd_clear_image(struct anv_cmd_buffer
> *cmd_buffer,
> >  {
> >     VkDevice device_h = anv_device_to_handle(cmd_buffer->device);
> >
> > +   VkFormat vk_format = image->vk_format;
> > +   if (vk_format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
> > +      /* We can't actually render to this format so we have to work
> around it
> > +       * by manualy unpacking and using R32_UINT.
>
> s/manualy/manually/
>
> > +       */
> > +      clear_value.color.uint32[0] =
> > +         float3_to_rgb9e5(clear_value.color.float32);
> > +      vk_format = VK_FORMAT_R32_UINT;
> > +   }
> > +
> >     for (uint32_t r = 0; r < range_count; r++) {
> >        const VkImageSubresourceRange *range = &ranges[r];
> >        for (uint32_t l = 0; l < anv_get_levelCount(image, range); ++l) {
> > @@ -773,7 +785,7 @@ anv_cmd_clear_image(struct anv_cmd_buffer
> *cmd_buffer,
> >                    .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
> >                    .image = anv_image_to_handle(image),
> >                    .viewType = anv_meta_get_view_type(image),
> > -                  .format = image->vk_format,
> > +                  .format = vk_format,
> >                    .subresourceRange = {
> >                       .aspectMask = range->aspectMask,
> >                       .baseMipLevel = range->baseMipLevel + l,
> > @@ -800,7 +812,7 @@ anv_cmd_clear_image(struct anv_cmd_buffer
> *cmd_buffer,
> >                 &fb);
> >
> >              VkAttachmentDescription att_desc = {
> > -               .format = iview.vk_format,
> > +               .format = vk_format,
> >                 .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
> >                 .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
> >                 .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160808/c5dad182/attachment-0001.html>


More information about the mesa-dev mailing list