diff options
author | Fredrik Höglund <fredrik@kde.org> | 2017-03-30 20:18:21 +0200 |
---|---|---|
committer | Fredrik Höglund <fredrik@kde.org> | 2017-03-30 23:53:16 +0200 |
commit | 1a8e4fad2942801ae4f39fcf85f74c38f3e4948f (patch) | |
tree | 2b7d8a46b18adb66ff1f94ac49948b5d2404ca36 | |
parent | b989da2893782c5ba0f8dc9d583fdf9f2043ab14 (diff) |
radv: use push descriptors in metaradv-push-descriptor2
WIP
-rw-r--r-- | src/amd/vulkan/radv_meta_blit.c | 51 | ||||
-rw-r--r-- | src/amd/vulkan/radv_meta_blit2d.c | 111 |
2 files changed, 63 insertions, 99 deletions
diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c index 228aefaf4b..95953eb721 100644 --- a/src/amd/vulkan/radv_meta_blit.c +++ b/src/amd/vulkan/radv_meta_blit.c @@ -307,31 +307,6 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, }, &cmd_buffer->pool->alloc, &sampler); - VkDescriptorSet set; - radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer, - device->meta_state.blit.ds_layout, - &set); - - radv_UpdateDescriptorSets(radv_device_to_handle(device), - 1, /* writeCount */ - (VkWriteDescriptorSet[]) { - { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = set, - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = (VkDescriptorImageInfo[]) { - { - .sampler = sampler, - .imageView = radv_image_view_to_handle(src_iview), - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }, - } - } - }, 0, NULL); - VkFramebuffer fb; radv_CreateFramebuffer(radv_device_to_handle(device), &(VkFramebufferCreateInfo) { @@ -439,10 +414,27 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); } - radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer), - VK_PIPELINE_BIND_POINT_GRAPHICS, - device->meta_state.blit.pipeline_layout, 0, 1, - &set, 0, NULL); + radv_CmdPushDescriptorSetKHR(radv_cmd_buffer_to_handle(cmd_buffer), + VK_PIPELINE_BIND_POINT_GRAPHICS, + device->meta_state.blit.pipeline_layout, + 0, /* set */ + 1, /* descriptorWriteCount */ + (VkWriteDescriptorSet[]) { + { + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstBinding = 0, + .dstArrayElement = 0, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + .pImageInfo = (VkDescriptorImageInfo[]) { + { + .sampler = sampler, + .imageView = radv_image_view_to_handle(src_iview), + .imageLayout = VK_IMAGE_LAYOUT_GENERAL, + } + } + } + }); radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkViewport) { .x = dest_offset_0.x, @@ -471,7 +463,6 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, /* TODO: above comment is not valid for at least descriptor sets/pools, * as we may not free them till after execution finishes. Check others. */ - radv_temp_descriptor_set_destroy(cmd_buffer->device, set); radv_DestroySampler(radv_device_to_handle(device), sampler, &cmd_buffer->pool->alloc); radv_DestroyFramebuffer(radv_device_to_handle(device), fb, diff --git a/src/amd/vulkan/radv_meta_blit2d.c b/src/amd/vulkan/radv_meta_blit2d.c index e6848de7e9..78b6ac9c20 100644 --- a/src/amd/vulkan/radv_meta_blit2d.c +++ b/src/amd/vulkan/radv_meta_blit2d.c @@ -102,90 +102,65 @@ create_bview(struct radv_cmd_buffer *cmd_buffer, } -struct blit2d_src_temps { - struct radv_image_view iview; - - VkDescriptorSet set; - struct radv_buffer_view bview; -}; - static void blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *src_img, struct radv_meta_blit2d_buffer *src_buf, - struct blit2d_src_temps *tmp, enum blit2d_src_type src_type, VkFormat depth_format) { struct radv_device *device = cmd_buffer->device; - VkDevice vk_device = radv_device_to_handle(cmd_buffer->device); if (src_type == BLIT2D_SRC_TYPE_BUFFER) { - create_bview(cmd_buffer, src_buf, &tmp->bview, depth_format); - - radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer, - device->meta_state.blit2d.ds_layouts[src_type], - &tmp->set); - - radv_UpdateDescriptorSets(vk_device, - 1, /* writeCount */ - (VkWriteDescriptorSet[]) { - { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = tmp->set, - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, - .pTexelBufferView = (VkBufferView[]) { radv_buffer_view_to_handle(&tmp->bview) } - } - }, 0, NULL); + struct radv_buffer_view bview; + create_bview(cmd_buffer, src_buf, &bview, depth_format); + + radv_CmdPushDescriptorSetKHR(radv_cmd_buffer_to_handle(cmd_buffer), + VK_PIPELINE_BIND_POINT_GRAPHICS, + device->meta_state.blit2d.p_layouts[src_type], + 0, /* set */ + 1, /* writeDescriptorCount */ + (VkWriteDescriptorSet[]) { + { + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstBinding = 0, + .dstArrayElement = 0, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, + .pTexelBufferView = (VkBufferView[]) { radv_buffer_view_to_handle(&bview) } + } + }); radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer), device->meta_state.blit2d.p_layouts[src_type], VK_SHADER_STAGE_FRAGMENT_BIT, 0, 4, &src_buf->pitch); } else { - create_iview(cmd_buffer, src_img, VK_IMAGE_USAGE_SAMPLED_BIT, &tmp->iview, + struct radv_image_view iview; + create_iview(cmd_buffer, src_img, VK_IMAGE_USAGE_SAMPLED_BIT, &iview, depth_format); - radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer, - device->meta_state.blit2d.ds_layouts[src_type], - &tmp->set); - - radv_UpdateDescriptorSets(vk_device, - 1, /* writeCount */ - (VkWriteDescriptorSet[]) { - { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = tmp->set, - .dstBinding = 0, - .dstArrayElement = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, - .pImageInfo = (VkDescriptorImageInfo[]) { - { - .sampler = VK_NULL_HANDLE, - .imageView = radv_image_view_to_handle(&tmp->iview), - .imageLayout = VK_IMAGE_LAYOUT_GENERAL, - }, - } - } - }, 0, NULL); - + radv_CmdPushDescriptorSetKHR(radv_cmd_buffer_to_handle(cmd_buffer), + VK_PIPELINE_BIND_POINT_GRAPHICS, + device->meta_state.blit2d.p_layouts[src_type], + 0, /* set */ + 1, /* writeDescriptorCount */ + (VkWriteDescriptorSet[]) { + { + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstBinding = 0, + .dstArrayElement = 0, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, + .pImageInfo = (VkDescriptorImageInfo[]) { + { + .sampler = VK_NULL_HANDLE, + .imageView = radv_image_view_to_handle(&iview), + .imageLayout = VK_IMAGE_LAYOUT_GENERAL, + }, + } + } + }); } - - radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer), - VK_PIPELINE_BIND_POINT_GRAPHICS, - device->meta_state.blit2d.p_layouts[src_type], 0, 1, - &tmp->set, 0, NULL); -} - -static void -blit2d_unbind_src(struct radv_cmd_buffer *cmd_buffer, - struct blit2d_src_temps *tmp, - enum blit2d_src_type src_type) -{ - radv_temp_descriptor_set_destroy(cmd_buffer->device, tmp->set); } struct blit2d_dst_temps { @@ -288,8 +263,7 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, depth_format = vk_format_stencil_only(dst->image->vk_format); else if (dst->aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT) depth_format = vk_format_depth_only(dst->image->vk_format); - struct blit2d_src_temps src_temps; - blit2d_bind_src(cmd_buffer, src_img, src_buf, &src_temps, src_type, depth_format); + blit2d_bind_src(cmd_buffer, src_img, src_buf, src_type, depth_format); uint32_t offset = 0; struct blit2d_dst_temps dst_temps; @@ -430,7 +404,6 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, /* At the point where we emit the draw call, all data from the * descriptor sets, etc. has been used. We are free to delete it. */ - blit2d_unbind_src(cmd_buffer, &src_temps, src_type); blit2d_unbind_dst(cmd_buffer, &dst_temps); } } |