On Mon, 2019-01-14 at 10:27 -0600, Jason Ekstrand wrote: > On Mon, Jan 14, 2019 at 1:16 AM Iago Toral <ito...@igalia.com> wrote: > > On Fri, 2019-01-11 at 12:31 -0600, Jason Ekstrand wrote: > > > On Fri, Jan 11, 2019 at 3:21 AM Iago Toral <ito...@igalia.com> > > > wrote: > > > > On Mon, 2019-01-07 at 09:39 -0600, Jason Ekstrand wrote: > > > > > > > > > --- > > > > > > > > > src/intel/vulkan/anv_device.c | 28 ++++++ > > > > > > > > > src/intel/vulkan/anv_extensions.py | 1 + > > > > > > > > > src/intel/vulkan/anv_pass.c | 37 +++++++- > > > > > > > > > src/intel/vulkan/anv_private.h | 3 + > > > > > > > > > src/intel/vulkan/genX_cmd_buffer.c | 136 > > > > > > > > > +++++++++++++++++++++++++++++ > > > > > > > > > 5 files changed, 204 insertions(+), 1 deletion(-) > > > > > > > > > > > > > > > > > > diff --git a/src/intel/vulkan/anv_device.c > > > > > > > > > b/src/intel/vulkan/anv_device.c > > > > > > > > > index 2a3919d2949..3761846bb7f 100644 > > > > > > > > > --- a/src/intel/vulkan/anv_device.c > > > > > > > > > +++ b/src/intel/vulkan/anv_device.c > > > > > > > > > @@ -1138,6 +1138,34 @@ void anv_GetPhysicalDeviceProperties2( > > > > > > > > > break; > > > > > > > > > } > > > > > > > > > > > > > > > > > > + case > > > > > > > > > > > > > VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERT > > > > IES_KH > > > > > > > > > R: { > > > > > > > > > + VkPhysicalDeviceDepthStencilResolvePropertiesKHR > > > > *props = > > > > > > > > > + > > > > (VkPhysicalDeviceDepthStencilResolvePropertiesKHR *)ext; > > > > > > > > > + > > > > > > > > > + /* We support all of the depth resolve modes */ > > > > > > > > > + props->supportedDepthResolveModes = > > > > > > > > > + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR | > > > > > > > > > + VK_RESOLVE_MODE_AVERAGE_BIT_KHR | > > > > > > > > > + VK_RESOLVE_MODE_MIN_BIT_KHR | > > > > > > > > > + VK_RESOLVE_MODE_MAX_BIT_KHR; > > > > > > > > > + > > > > > > > > > + /* Average doesn't make sense for stencil so we > > > > don't > > > > > > > > > support that */ > > > > > > > > > + props->supportedStencilResolveModes = > > > > > > > > > + VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR; > > > > > > > > > + if (pdevice->info.gen >= 8) { > > > > > > > > > + /* The advanced stencil resolve modes currently > > > > require > > > > > > > > > stencil > > > > > > > > > + * sampling be supported by the hardware. > > > > > > > > > + */ > > > > > > > > > + props->supportedStencilResolveModes |= > > > > > > > > > + VK_RESOLVE_MODE_MIN_BIT_KHR | > > > > > > > > > + VK_RESOLVE_MODE_MAX_BIT_KHR; > > > > > > > > > + } > > > > > > > > > + > > > > > > > > > + props->independentResolveNone = VK_TRUE; > > > > > > > > > + props->independentResolve = VK_TRUE; > > > > > > > > > + break; > > > > > > > > > + } > > > > > > > > > + > > > > > > > > > case > > > > VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR: > > > > > > > > > { > > > > > > > > > VkPhysicalDeviceDriverPropertiesKHR *driver_props = > > > > > > > > > (VkPhysicalDeviceDriverPropertiesKHR *) ext; > > > > > > > > > diff --git a/src/intel/vulkan/anv_extensions.py > > > > > > > > > b/src/intel/vulkan/anv_extensions.py > > > > > > > > > index 388845003aa..2ea4cab0e97 100644 > > > > > > > > > --- a/src/intel/vulkan/anv_extensions.py > > > > > > > > > +++ b/src/intel/vulkan/anv_extensions.py > > > > > > > > > @@ -76,6 +76,7 @@ EXTENSIONS = [ > > > > > > > > > Extension('VK_KHR_bind_memory2', 1, > > > > True), > > > > > > > > > Extension('VK_KHR_create_renderpass2', 1, > > > > True), > > > > > > > > > Extension('VK_KHR_dedicated_allocation', 1, > > > > True), > > > > > > > > > + Extension('VK_KHR_depth_stencil_resolve', 1, > > > > True), > > > > > > > > > Extension('VK_KHR_descriptor_update_template', 1, > > > > True), > > > > > > > > > Extension('VK_KHR_device_group', 1, > > > > True), > > > > > > > > > Extension('VK_KHR_device_group_creation', 1, > > > > True), > > > > > > > > > diff --git a/src/intel/vulkan/anv_pass.c > > > > > > > > > b/src/intel/vulkan/anv_pass.c > > > > > > > > > index 7b17cc06935..196cf3ff8fd 100644 > > > > > > > > > --- a/src/intel/vulkan/anv_pass.c > > > > > > > > > +++ b/src/intel/vulkan/anv_pass.c > > > > > > > > > @@ -74,6 +74,10 @@ anv_render_pass_compile(struct > > > > anv_render_pass > > > > > > > > > *pass) > > > > > > > > > subpass->depth_stencil_attachment->attachment == > > > > > > > > > VK_ATTACHMENT_UNUSED) > > > > > > > > > subpass->depth_stencil_attachment = NULL; > > > > > > > > > > > > > > > > > > + if (subpass->ds_resolve_attachment && > > > > > > > > > + subpass->ds_resolve_attachment->attachment == > > > > > > > > > VK_ATTACHMENT_UNUSED) > > > > > > > > > + subpass->ds_resolve_attachment = NULL; > > > > > > > > > + > > > > > > > > > > > > > > > > This is a nitpick, but since we setup subpass- > > > > >ds_resolve_attachment in > > > > > > > > anv_CreateRenderPass2KHR(), should't we just do this sanitation > > > > there? > > > > > > Maybe? It's an interesting philosophical question. The original > > > idea behind the compile step was to make stuff like this unified > > > between the two create paths. That said, this only happens in > > > the CreateRenderPass2KHR path so should it go there? I don't > > > know. I'm inclined to leave it as-is if that's ok. > > > > Sure, that's fine. > > > > > > > for (uint32_t j = 0; j < subpass->attachment_count; > > > > j++) { > > > > > > > > > struct anv_subpass_attachment *subpass_att = > > > > &subpass- > > > > > > > > > >attachments[j]; > > > > > > > > > if (subpass_att->attachment == > > > > VK_ATTACHMENT_UNUSED) > > > > > > > > > @@ -116,6 +120,16 @@ anv_render_pass_compile(struct > > > > anv_render_pass > > > > > > > > > *pass) > > > > > > > > > color_att->usage |= > > > > VK_IMAGE_USAGE_TRANSFER_SRC_BIT; > > > > > > > > > } > > > > > > > > > } > > > > > > > > > + > > > > > > > > > + if (subpass->ds_resolve_attachment) { > > > > > > > > > + struct anv_subpass_attachment *ds_att = > > > > > > > > > + subpass->depth_stencil_attachment; > > > > > > > > > + UNUSED struct anv_subpass_attachment *resolve_att = > > > > > > > > > + subpass->ds_resolve_attachment; > > > > > > > > > + > > > > > > > > > + assert(resolve_att->usage == > > > > > > > > > VK_IMAGE_USAGE_TRANSFER_DST_BIT); > > > > > > > > > + ds_att->usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; > > > > > > > > > + } > > > > > > > > > } > > > > > > > > > > > > > > > > > > /* From the Vulkan 1.0.39 spec: > > > > > > > > > @@ -342,10 +356,15 @@ VkResult anv_CreateRenderPass( > > > > > > > > > static unsigned > > > > > > > > > num_subpass_attachments2(const VkSubpassDescription2KHR > > > > *desc) > > > > > > > > > { > > > > > > > > > + const VkSubpassDescriptionDepthStencilResolveKHR > > > > *ds_resolve = > > > > > > > > > + vk_find_struct_const(desc->pNext, > > > > > > > > > + > > > > SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE > > > > > > > > > _KHR); > > > > > > > > > + > > > > > > > > > return desc->inputAttachmentCount + > > > > > > > > > desc->colorAttachmentCount + > > > > > > > > > (desc->pResolveAttachments ? desc- > > > > >colorAttachmentCount : > > > > > > > > > 0) + > > > > > > > > > - (desc->pDepthStencilAttachment != NULL); > > > > > > > > > + (desc->pDepthStencilAttachment != NULL) + > > > > > > > > > + (ds_resolve && ds_resolve- > > > > > > > > > >pDepthStencilResolveAttachment); > > > > > > > > > > > > > > > > If my suggestion below makes sense I guess could simplify this > > > > a bit > > > > > > > > and just add one if ds_resolve exists. > > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > VkResult anv_CreateRenderPass2KHR( > > > > > > > > > @@ -460,6 +479,22 @@ VkResult anv_CreateRenderPass2KHR( > > > > > > > > > .layout = desc->pDepthStencilAttachment- > > > > >layout, > > > > > > > > > }; > > > > > > > > > } > > > > > > > > > + > > > > > > > > > + const VkSubpassDescriptionDepthStencilResolveKHR > > > > *ds_resolve = > > > > > > > > > + vk_find_struct_const(desc->pNext, > > > > > > > > > + > > > > SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESO > > > > > > > > > LVE_KHR); > > > > > > > > > + > > > > > > > > > + if (ds_resolve && ds_resolve- > > > > >pDepthStencilResolveAttachment) > > > > > > > > > { > > > > > > > > > > > > > > > > Not that it matters much in practice I guess, but I understand > > > > that > > > > > > > > having a VkSubpassDescriptionDepthStencilResolveKHR without a > > > > valid > > > > > > > > pDepthStencilResolveAttachment is an application bug, right? In > > > > that > > > > > > > > case maybe something like this would make more sense?: > > > > > > I just double-checked the spec and pDepthStencilResolveAttachment > > > is allowed to be NULL. Thanks for making me double-check though! > > > > Well, that's weird... I guess it is for consistency with > > pResolveAttachments, although since this comes in an optional > > struct it is kind of odd that they allow for it to be NULL. Anyway, > > it is what the spec says, so this is fine. > > Thanks! Merged. > > Also, I really am going to get back to fp16 review... Hopefully this > week!
Great, FYI, I am rebasing the series on top of Curro's regioning lowering pass from master and will hopefully send a v3 with that today or tomorrow. Iago > > > > if (ds_resolve) { > > > > > > > > assert(ds_resolve->pDepthStencilResolveAttachment); > > > > > > > > ... > > > > > > > > } > > > > > > > > > > > > > > > > > + subpass->ds_resolve_attachment = > > > > subpass_attachments++; > > > > > > > > > + > > > > > > > > > + *subpass->ds_resolve_attachment = (struct > > > > > > > > > anv_subpass_attachment) { > > > > > > > > > + .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, > > > > > > > > > + .attachment = ds_resolve- > > > > > > > > > >pDepthStencilResolveAttachment->attachment, > > > > > > > > > + .layout = ds_resolve- > > > > > > > > > >pDepthStencilResolveAttachment->layout, > > > > > > > > > + }; > > > > > > > > > + subpass->depth_resolve_mode = ds_resolve- > > > > >depthResolveMode; > > > > > > > > > + subpass->stencil_resolve_mode = ds_resolve- > > > > > > > > > >stencilResolveMode; > > > > > > > > > + } > > > > > > > > > } > > > > > > > > > > > > > > > > > > for (uint32_t i = 0; i < pCreateInfo->dependencyCount; > > > > i++) > > > > > > > > > diff --git a/src/intel/vulkan/anv_private.h > > > > > > > > > b/src/intel/vulkan/anv_private.h > > > > > > > > > index 6992db277fc..e16de7a7a45 100644 > > > > > > > > > --- a/src/intel/vulkan/anv_private.h > > > > > > > > > +++ b/src/intel/vulkan/anv_private.h > > > > > > > > > @@ -3215,6 +3215,9 @@ struct anv_subpass { > > > > > > > > > struct anv_subpass_attachment * > > > > resolve_attachments; > > > > > > > > > > > > > > > > > > struct anv_subpass_attachment > > > > > > > > > * depth_stencil_attachment; > > > > > > > > > + struct anv_subpass_attachment > > > > > > > > > * ds_resolve_attachment; > > > > > > > > > + VkResolveModeFlagBitsKHR > > > > depth_resolve_mode; > > > > > > > > > + VkResolveModeFlagBitsKHR > > > > stencil_resolve_mode > > > > > > > > > ; > > > > > > > > > > > > > > > > > > uint32_t view_mask; > > > > > > > > > > > > > > > > > > diff --git a/src/intel/vulkan/genX_cmd_buffer.c > > > > > > > > > b/src/intel/vulkan/genX_cmd_buffer.c > > > > > > > > > index b0b56472e57..7aadafd687e 100644 > > > > > > > > > --- a/src/intel/vulkan/genX_cmd_buffer.c > > > > > > > > > +++ b/src/intel/vulkan/genX_cmd_buffer.c > > > > > > > > > @@ -3876,6 +3876,23 @@ cmd_buffer_begin_subpass(struct > > > > anv_cmd_buffer > > > > > > > > > *cmd_buffer, > > > > > > > > > cmd_buffer_emit_depth_stencil(cmd_buffer); > > > > > > > > > } > > > > > > > > > > > > > > > > > > +static enum blorp_filter > > > > > > > > > +vk_to_blorp_resolve_mode(VkResolveModeFlagBitsKHR vk_mode) > > > > > > > > > +{ > > > > > > > > > + switch (vk_mode) { > > > > > > > > > + case VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR: > > > > > > > > > + return BLORP_FILTER_SAMPLE_0; > > > > > > > > > + case VK_RESOLVE_MODE_AVERAGE_BIT_KHR: > > > > > > > > > + return BLORP_FILTER_AVERAGE; > > > > > > > > > + case VK_RESOLVE_MODE_MIN_BIT_KHR: > > > > > > > > > + return BLORP_FILTER_MIN_SAMPLE; > > > > > > > > > + case VK_RESOLVE_MODE_MAX_BIT_KHR: > > > > > > > > > + return BLORP_FILTER_MAX_SAMPLE; > > > > > > > > > + default: > > > > > > > > > + return BLORP_FILTER_NONE; > > > > > > > > > + } > > > > > > > > > +} > > > > > > > > > + > > > > > > > > > static void > > > > > > > > > cmd_buffer_end_subpass(struct anv_cmd_buffer *cmd_buffer) > > > > > > > > > { > > > > > > > > > @@ -3943,6 +3960,125 @@ cmd_buffer_end_subpass(struct > > > > anv_cmd_buffer > > > > > > > > > *cmd_buffer) > > > > > > > > > } > > > > > > > > > } > > > > > > > > > > > > > > > > > > + if (subpass->ds_resolve_attachment) { > > > > > > > > > + /* We are about to do some MSAA resolves. We need to > > > > flush so > > > > > > > > > that the > > > > > > > > > + * result of writes to the MSAA color attachments show > > > > up in > > > > > > > > > > > > > > > > This is not a color resolve path, I guess this was a > > > > copy&paste. > > > > > > Yup. Fixed. > > > > > > > > the sampler > > > > > > > > > + * when we blit to the single-sampled resolve target. > > > > > > > > > + */ > > > > > > > > > + cmd_buffer->state.pending_pipe_bits |= > > > > > > > > > + ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT | > > > > > > > > > + ANV_PIPE_DEPTH_CACHE_FLUSH_BIT; > > > > > > > > > + > > > > > > > > > + uint32_t src_att = subpass->depth_stencil_attachment- > > > > > > > > > >attachment; > > > > > > > > > + uint32_t dst_att = subpass->ds_resolve_attachment- > > > > >attachment; > > > > > > > > > + > > > > > > > > > + assert(src_att < cmd_buffer->state.pass- > > > > >attachment_count); > > > > > > > > > + assert(dst_att < cmd_buffer->state.pass- > > > > >attachment_count); > > > > > > > > > + > > > > > > > > > + if (cmd_buffer- > > > > > > > > > >state.attachments[dst_att].pending_clear_aspects) { > > > > > > > > > + /* From the Vulkan 1.0 spec: > > > > > > > > > + * > > > > > > > > > + * If the first use of an attachment in a render > > > > pass is > > > > > > > > > as a > > > > > > > > > + * resolve attachment, then the loadOp is > > > > effectively > > > > > > > > > ignored > > > > > > > > > + * as the resolve is guaranteed to overwrite all > > > > pixels > > > > > > > > > in the > > > > > > > > > + * render area. > > > > > > > > > + */ > > > > > > > > > + cmd_buffer- > > > > > > > > > >state.attachments[dst_att].pending_clear_aspects = 0; > > > > > > > > > + } > > > > > > > > > + > > > > > > > > > + struct anv_image_view *src_iview = fb- > > > > >attachments[src_att]; > > > > > > > > > + struct anv_image_view *dst_iview = fb- > > > > >attachments[dst_att]; > > > > > > > > > + > > > > > > > > > + const VkRect2D render_area = cmd_buffer- > > > > >state.render_area; > > > > > > > > > + > > > > > > > > > + if ((src_iview->image->aspects & > > > > VK_IMAGE_ASPECT_DEPTH_BIT) && > > > > > > > > > + subpass->depth_resolve_mode != > > > > VK_RESOLVE_MODE_NONE_KHR) { > > > > > > > > > + > > > > > > > > > + struct anv_attachment_state *src_state = > > > > > > > > > + &cmd_state->attachments[src_att]; > > > > > > > > > + struct anv_attachment_state *dst_state = > > > > > > > > > + &cmd_state->attachments[dst_att]; > > > > > > > > > + > > > > > > > > > + /* MSAA resolves sample from the source > > > > > > > > > attachment. Transition the > > > > > > > > > + * depth attachment first to get rid of any HiZ > > > > that we may > > > > > > > > > not be > > > > > > > > > + * able to handle. > > > > > > > > > + */ > > > > > > > > > + transition_depth_buffer(cmd_buffer, src_iview- > > > > >image, > > > > > > > > > + src_state->current_layout, > > > > > > > > > + > > > > VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OP > > > > > > > > > TIMAL); > > > > > > > > > + src_state->aux_usage = > > > > > > > > > + anv_layout_to_aux_usage(&cmd_buffer->device- > > > > >info, > > > > > > > > > src_iview->image, > > > > > > > > > + > > > > VK_IMAGE_ASPECT_DEPTH_BIT, > > > > > > > > > + > > > > > > > > > _OPTIMAL); > > > > > > > > > + src_state->current_layout = > > > > > > > > > VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; > > > > > > > > > + > > > > > > > > > + /* MSAA resolves write to the resolve attachment as > > > > if it > > > > > > > > > were any > > > > > > > > > + * other transfer op. Transition the resolve > > > > attachment > > > > > > > > > accordingly. > > > > > > > > > + */ > > > > > > > > > + VkImageLayout dst_initial_layout = dst_state- > > > > > > > > > >current_layout; > > > > > > > > > + > > > > > > > > > + /* If our render area is the entire size of the > > > > image, > > > > > > > > > we're going to > > > > > > > > > + * blow it all away so we can claim the initial > > > > layout is > > > > > > > > > UNDEFINED > > > > > > > > > + * and we'll get a HiZ ambiguate instead of a > > > > resolve. > > > > > > > > > + */ > > > > > > > > > + if (dst_iview->image->type != VK_IMAGE_TYPE_3D && > > > > > > > > > + render_area.offset.x == 0 && > > > > render_area.offset.y == 0 > > > > > > > > > && > > > > > > > > > + render_area.extent.width == dst_iview- > > > > >extent.width && > > > > > > > > > + render_area.extent.height == dst_iview- > > > > >extent.height) > > > > > > > > > + dst_initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; > > > > > > > > > + > > > > > > > > > + transition_depth_buffer(cmd_buffer, dst_iview- > > > > >image, > > > > > > > > > + dst_initial_layout, > > > > > > > > > + > > > > VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMA > > > > > > > > > L); > > > > > > > > > + dst_state->aux_usage = > > > > > > > > > + anv_layout_to_aux_usage(&cmd_buffer->device- > > > > >info, > > > > > > > > > dst_iview->image, > > > > > > > > > + > > > > VK_IMAGE_ASPECT_DEPTH_BIT, > > > > > > > > > + > > > > VK_IMAGE_LAYOUT_TRANSFER_DST_OPT > > > > > > > > > IMAL); > > > > > > > > > + dst_state->current_layout = > > > > > > > > > VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; > > > > > > > > > + > > > > > > > > > + enum blorp_filter filter = > > > > > > > > > + vk_to_blorp_resolve_mode(subpass- > > > > >depth_resolve_mode); > > > > > > > > > + > > > > > > > > > + anv_image_msaa_resolve(cmd_buffer, > > > > > > > > > + src_iview->image, src_state- > > > > > > > > > >aux_usage, > > > > > > > > > + src_iview- > > > > >planes[0].isl.base_level, > > > > > > > > > + src_iview- > > > > > > > > > >planes[0].isl.base_array_layer, > > > > > > > > > + dst_iview->image, dst_state- > > > > > > > > > >aux_usage, > > > > > > > > > + dst_iview- > > > > >planes[0].isl.base_level, > > > > > > > > > + dst_iview- > > > > > > > > > >planes[0].isl.base_array_layer, > > > > > > > > > + VK_IMAGE_ASPECT_DEPTH_BIT, > > > > > > > > > + render_area.offset.x, > > > > > > > > > render_area.offset.y, > > > > > > > > > + render_area.offset.x, > > > > > > > > > render_area.offset.y, > > > > > > > > > + render_area.extent.width, > > > > > > > > > + render_area.extent.height, > > > > > > > > > + fb->layers, filter); > > > > > > > > > + } > > > > > > > > > + > > > > > > > > > + if ((src_iview->image->aspects & > > > > VK_IMAGE_ASPECT_STENCIL_BIT) > > > > > > > > > && > > > > > > > > > + subpass->stencil_resolve_mode != > > > > VK_RESOLVE_MODE_NONE_KHR) > > > > > > > > > { > > > > > > > > > + > > > > > > > > > + enum isl_aux_usage src_aux_usage = > > > > ISL_AUX_USAGE_NONE; > > > > > > > > > + enum isl_aux_usage dst_aux_usage = > > > > ISL_AUX_USAGE_NONE; > > > > > > > > > + > > > > > > > > > + enum blorp_filter filter = > > > > > > > > > + vk_to_blorp_resolve_mode(subpass- > > > > >stencil_resolve_mode); > > > > > > > > > + > > > > > > > > > + anv_image_msaa_resolve(cmd_buffer, > > > > > > > > > + src_iview->image, > > > > src_aux_usage, > > > > > > > > > + src_iview- > > > > >planes[0].isl.base_level, > > > > > > > > > + src_iview- > > > > > > > > > >planes[0].isl.base_array_layer, > > > > > > > > > + dst_iview->image, > > > > dst_aux_usage, > > > > > > > > > + dst_iview- > > > > >planes[0].isl.base_level, > > > > > > > > > + dst_iview- > > > > > > > > > >planes[0].isl.base_array_layer, > > > > > > > > > + VK_IMAGE_ASPECT_STENCIL_BIT, > > > > > > > > > + render_area.offset.x, > > > > > > > > > render_area.offset.y, > > > > > > > > > + render_area.offset.x, > > > > > > > > > render_area.offset.y, > > > > > > > > > + render_area.extent.width, > > > > > > > > > + render_area.extent.height, > > > > > > > > > + fb->layers, filter); > > > > > > > > > + } > > > > > > > > > + } > > > > > > > > > + > > > > > > > > > for (uint32_t i = 0; i < subpass->attachment_count; ++i) > > > > { > > > > > > > > > const uint32_t a = subpass->attachments[i].attachment; > > > > > > > > > if (a == VK_ATTACHMENT_UNUSED) > > > > > > > > > > > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev