radv: use push descriptors in meta
Use push descriptors instead of temp descriptor sets. Signed-off-by: Fredrik Höglund <fredrik@kde.org> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:

committed by
Bas Nieuwenhuizen

parent
f95caae504
commit
5ab5d1bee4
@@ -307,31 +307,6 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
|
.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
|
||||||
}, &cmd_buffer->pool->alloc, &sampler);
|
}, &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;
|
VkFramebuffer fb;
|
||||||
radv_CreateFramebuffer(radv_device_to_handle(device),
|
radv_CreateFramebuffer(radv_device_to_handle(device),
|
||||||
&(VkFramebufferCreateInfo) {
|
&(VkFramebufferCreateInfo) {
|
||||||
@@ -439,10 +414,26 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
|
VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
VK_PIPELINE_BIND_POINT_GRAPHICS,
|
device->meta_state.blit.pipeline_layout,
|
||||||
device->meta_state.blit.pipeline_layout, 0, 1,
|
0, /* set */
|
||||||
&set, 0, NULL);
|
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) {
|
radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkViewport) {
|
||||||
.x = dest_offset_0.x,
|
.x = dest_offset_0.x,
|
||||||
@@ -471,7 +462,6 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
/* TODO: above comment is not valid for at least descriptor sets/pools,
|
/* TODO: above comment is not valid for at least descriptor sets/pools,
|
||||||
* as we may not free them till after execution finishes. Check others. */
|
* 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,
|
radv_DestroySampler(radv_device_to_handle(device), sampler,
|
||||||
&cmd_buffer->pool->alloc);
|
&cmd_buffer->pool->alloc);
|
||||||
radv_DestroyFramebuffer(radv_device_to_handle(device), fb,
|
radv_DestroyFramebuffer(radv_device_to_handle(device), fb,
|
||||||
@@ -1299,6 +1289,7 @@ radv_device_init_meta_blit_state(struct radv_device *device)
|
|||||||
|
|
||||||
VkDescriptorSetLayoutCreateInfo ds_layout_info = {
|
VkDescriptorSetLayoutCreateInfo ds_layout_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 1,
|
.bindingCount = 1,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
|
@@ -104,8 +104,6 @@ create_bview(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
|
|
||||||
struct blit2d_src_temps {
|
struct blit2d_src_temps {
|
||||||
struct radv_image_view iview;
|
struct radv_image_view iview;
|
||||||
|
|
||||||
VkDescriptorSet set;
|
|
||||||
struct radv_buffer_view bview;
|
struct radv_buffer_view bview;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -117,28 +115,24 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
enum blit2d_src_type src_type, VkFormat depth_format)
|
enum blit2d_src_type src_type, VkFormat depth_format)
|
||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
|
|
||||||
|
|
||||||
if (src_type == BLIT2D_SRC_TYPE_BUFFER) {
|
if (src_type == BLIT2D_SRC_TYPE_BUFFER) {
|
||||||
create_bview(cmd_buffer, src_buf, &tmp->bview, depth_format);
|
create_bview(cmd_buffer, src_buf, &tmp->bview, depth_format);
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
device->meta_state.blit2d.ds_layouts[src_type],
|
device->meta_state.blit2d.p_layouts[src_type],
|
||||||
&tmp->set);
|
0, /* set */
|
||||||
|
1, /* descriptorWriteCount */
|
||||||
radv_UpdateDescriptorSets(vk_device,
|
|
||||||
1, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
|
.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
|
||||||
.pTexelBufferView = (VkBufferView[]) { radv_buffer_view_to_handle(&tmp->bview) }
|
.pTexelBufferView = (VkBufferView[]) { radv_buffer_view_to_handle(&tmp->bview) }
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
|
radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
|
||||||
device->meta_state.blit2d.p_layouts[src_type],
|
device->meta_state.blit2d.p_layouts[src_type],
|
||||||
@@ -148,16 +142,13 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
create_iview(cmd_buffer, src_img, VK_IMAGE_USAGE_SAMPLED_BIT, &tmp->iview,
|
create_iview(cmd_buffer, src_img, VK_IMAGE_USAGE_SAMPLED_BIT, &tmp->iview,
|
||||||
depth_format);
|
depth_format);
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(cmd_buffer->device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
device->meta_state.blit2d.ds_layouts[src_type],
|
device->meta_state.blit2d.p_layouts[src_type],
|
||||||
&tmp->set);
|
0, /* set */
|
||||||
|
1, /* descriptorWriteCount */
|
||||||
radv_UpdateDescriptorSets(vk_device,
|
|
||||||
1, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -170,22 +161,8 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
struct blit2d_dst_temps {
|
||||||
@@ -430,7 +407,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
|
/* 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.
|
* 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);
|
blit2d_unbind_dst(cmd_buffer, &dst_temps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1228,6 +1204,7 @@ radv_device_init_meta_blit2d_state(struct radv_device *device)
|
|||||||
result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device),
|
result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device),
|
||||||
&(VkDescriptorSetLayoutCreateInfo) {
|
&(VkDescriptorSetLayoutCreateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 1,
|
.bindingCount = 1,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -1255,6 +1232,7 @@ radv_device_init_meta_blit2d_state(struct radv_device *device)
|
|||||||
result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device),
|
result = radv_CreateDescriptorSetLayout(radv_device_to_handle(device),
|
||||||
&(VkDescriptorSetLayoutCreateInfo) {
|
&(VkDescriptorSetLayoutCreateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 1,
|
.bindingCount = 1,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
|
@@ -126,6 +126,7 @@ VkResult radv_device_init_meta_buffer_state(struct radv_device *device)
|
|||||||
|
|
||||||
VkDescriptorSetLayoutCreateInfo fill_ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo fill_ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 1,
|
.bindingCount = 1,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -147,6 +148,7 @@ VkResult radv_device_init_meta_buffer_state(struct radv_device *device)
|
|||||||
|
|
||||||
VkDescriptorSetLayoutCreateInfo copy_ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo copy_ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 2,
|
.bindingCount = 2,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -297,26 +299,26 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
uint64_t block_count = round_up_u64(size, 1024);
|
uint64_t block_count = round_up_u64(size, 1024);
|
||||||
struct radv_meta_saved_compute_state saved_state;
|
struct radv_meta_saved_compute_state saved_state;
|
||||||
VkDescriptorSet ds;
|
|
||||||
|
|
||||||
radv_meta_save_compute(&saved_state, cmd_buffer, 4);
|
radv_meta_save_compute(&saved_state, cmd_buffer, 4);
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
|
||||||
device->meta_state.buffer.fill_ds_layout,
|
|
||||||
&ds);
|
|
||||||
|
|
||||||
struct radv_buffer dst_buffer = {
|
struct radv_buffer dst_buffer = {
|
||||||
.bo = bo,
|
.bo = bo,
|
||||||
.offset = offset,
|
.offset = offset,
|
||||||
.size = size
|
.size = size
|
||||||
};
|
};
|
||||||
|
|
||||||
radv_UpdateDescriptorSets(radv_device_to_handle(device),
|
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
||||||
1, /* writeCount */
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
device->meta_state.buffer.fill_pipeline);
|
||||||
|
|
||||||
|
radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
device->meta_state.buffer.fill_p_layout,
|
||||||
|
0, /* set */
|
||||||
|
1, /* descriptorWriteCount */
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = ds,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -327,16 +329,7 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.range = size
|
.range = size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.buffer.fill_pipeline);
|
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.buffer.fill_p_layout, 0, 1,
|
|
||||||
&ds, 0, NULL);
|
|
||||||
|
|
||||||
radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
|
radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
|
||||||
device->meta_state.buffer.fill_p_layout,
|
device->meta_state.buffer.fill_p_layout,
|
||||||
@@ -345,8 +338,6 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
|
|
||||||
radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1);
|
radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1);
|
||||||
|
|
||||||
radv_temp_descriptor_set_destroy(device, ds);
|
|
||||||
|
|
||||||
radv_meta_restore_compute(&saved_state, cmd_buffer, 4);
|
radv_meta_restore_compute(&saved_state, cmd_buffer, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,14 +350,9 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
uint64_t block_count = round_up_u64(size, 1024);
|
uint64_t block_count = round_up_u64(size, 1024);
|
||||||
struct radv_meta_saved_compute_state saved_state;
|
struct radv_meta_saved_compute_state saved_state;
|
||||||
VkDescriptorSet ds;
|
|
||||||
|
|
||||||
radv_meta_save_compute(&saved_state, cmd_buffer, 0);
|
radv_meta_save_compute(&saved_state, cmd_buffer, 0);
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
|
||||||
device->meta_state.buffer.copy_ds_layout,
|
|
||||||
&ds);
|
|
||||||
|
|
||||||
struct radv_buffer dst_buffer = {
|
struct radv_buffer dst_buffer = {
|
||||||
.bo = dst_bo,
|
.bo = dst_bo,
|
||||||
.offset = dst_offset,
|
.offset = dst_offset,
|
||||||
@@ -379,12 +365,17 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.size = size
|
.size = size
|
||||||
};
|
};
|
||||||
|
|
||||||
radv_UpdateDescriptorSets(radv_device_to_handle(device),
|
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
||||||
2, /* writeCount */
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
device->meta_state.buffer.copy_pipeline);
|
||||||
|
|
||||||
|
radv_meta_push_descriptor_set(cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
device->meta_state.buffer.copy_p_layout,
|
||||||
|
0, /* set */
|
||||||
|
2, /* descriptorWriteCount */
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = ds,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -397,7 +388,6 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = ds,
|
|
||||||
.dstBinding = 1,
|
.dstBinding = 1,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -408,22 +398,10 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.range = size
|
.range = size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.buffer.copy_pipeline);
|
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.buffer.copy_p_layout, 0, 1,
|
|
||||||
&ds, 0, NULL);
|
|
||||||
|
|
||||||
|
|
||||||
radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1);
|
radv_CmdDispatch(radv_cmd_buffer_to_handle(cmd_buffer), block_count, 1, 1);
|
||||||
|
|
||||||
radv_temp_descriptor_set_destroy(device, ds);
|
|
||||||
|
|
||||||
radv_meta_restore_compute(&saved_state, cmd_buffer, 0);
|
radv_meta_restore_compute(&saved_state, cmd_buffer, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -133,6 +133,7 @@ radv_device_init_meta_itob_state(struct radv_device *device)
|
|||||||
*/
|
*/
|
||||||
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 2,
|
.bindingCount = 2,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -328,6 +329,7 @@ radv_device_init_meta_btoi_state(struct radv_device *device)
|
|||||||
*/
|
*/
|
||||||
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 2,
|
.bindingCount = 2,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -517,6 +519,7 @@ radv_device_init_meta_itoi_state(struct radv_device *device)
|
|||||||
*/
|
*/
|
||||||
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 2,
|
.bindingCount = 2,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -670,6 +673,7 @@ radv_device_init_meta_cleari_state(struct radv_device *device)
|
|||||||
*/
|
*/
|
||||||
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 1,
|
.bindingCount = 1,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -883,7 +887,6 @@ create_bview(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct itob_temps {
|
struct itob_temps {
|
||||||
struct radv_image_view src_iview;
|
struct radv_image_view src_iview;
|
||||||
struct radv_buffer_view dst_bview;
|
struct radv_buffer_view dst_bview;
|
||||||
VkDescriptorSet set;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -891,18 +894,15 @@ itob_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct itob_temps *tmp)
|
struct itob_temps *tmp)
|
||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
|
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer,
|
||||||
device->meta_state.itob.img_ds_layout,
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
&tmp->set);
|
device->meta_state.itob.img_p_layout,
|
||||||
|
0, /* set */
|
||||||
radv_UpdateDescriptorSets(vk_device,
|
2, /* descriptorWriteCount */
|
||||||
2, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -917,19 +917,13 @@ itob_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 1,
|
.dstBinding = 1,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
|
.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
|
||||||
.pTexelBufferView = (VkBufferView[]) { radv_buffer_view_to_handle(&tmp->dst_bview) },
|
.pTexelBufferView = (VkBufferView[]) { radv_buffer_view_to_handle(&tmp->dst_bview) },
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.itob.img_p_layout, 0, 1,
|
|
||||||
&tmp->set, 0, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -973,13 +967,11 @@ radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
|
|
||||||
radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
|
radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
|
||||||
}
|
}
|
||||||
radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct btoi_temps {
|
struct btoi_temps {
|
||||||
struct radv_buffer_view src_bview;
|
struct radv_buffer_view src_bview;
|
||||||
struct radv_image_view dst_iview;
|
struct radv_image_view dst_iview;
|
||||||
VkDescriptorSet set;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -987,18 +979,15 @@ btoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct btoi_temps *tmp)
|
struct btoi_temps *tmp)
|
||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
|
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer,
|
||||||
device->meta_state.btoi.img_ds_layout,
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
&tmp->set);
|
device->meta_state.btoi.img_p_layout,
|
||||||
|
0, /* set */
|
||||||
radv_UpdateDescriptorSets(vk_device,
|
2, /* descriptorWriteCount */
|
||||||
2, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -1007,7 +996,6 @@ btoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 1,
|
.dstBinding = 1,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -1020,12 +1008,7 @@ btoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.btoi.img_p_layout, 0, 1,
|
|
||||||
&tmp->set, 0, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1069,13 +1052,11 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
|
|
||||||
radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
|
radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
|
||||||
}
|
}
|
||||||
radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct itoi_temps {
|
struct itoi_temps {
|
||||||
struct radv_image_view src_iview;
|
struct radv_image_view src_iview;
|
||||||
struct radv_image_view dst_iview;
|
struct radv_image_view dst_iview;
|
||||||
VkDescriptorSet set;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1083,18 +1064,15 @@ itoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct itoi_temps *tmp)
|
struct itoi_temps *tmp)
|
||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
|
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer,
|
||||||
device->meta_state.itoi.img_ds_layout,
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
&tmp->set);
|
device->meta_state.itoi.img_p_layout,
|
||||||
|
0, /* set */
|
||||||
radv_UpdateDescriptorSets(vk_device,
|
2, /* descriptorWriteCount */
|
||||||
2, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -1109,7 +1087,6 @@ itoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 1,
|
.dstBinding = 1,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -1122,12 +1099,7 @@ itoi_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.itoi.img_p_layout, 0, 1,
|
|
||||||
&tmp->set, 0, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1173,31 +1145,22 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
|
|
||||||
radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
|
radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1);
|
||||||
}
|
}
|
||||||
radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cleari_temps {
|
|
||||||
struct radv_image_view dst_iview;
|
|
||||||
VkDescriptorSet set;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cleari_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
cleari_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
||||||
struct cleari_temps *tmp)
|
struct radv_image_view *dst_iview)
|
||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
VkDevice vk_device = radv_device_to_handle(cmd_buffer->device);
|
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer,
|
||||||
device->meta_state.cleari.img_ds_layout,
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
&tmp->set);
|
device->meta_state.cleari.img_p_layout,
|
||||||
|
0, /* set */
|
||||||
radv_UpdateDescriptorSets(vk_device,
|
1, /* descriptorWriteCount */
|
||||||
1, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = tmp->set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -1205,17 +1168,12 @@ cleari_bind_descriptors(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.pImageInfo = (VkDescriptorImageInfo[]) {
|
.pImageInfo = (VkDescriptorImageInfo[]) {
|
||||||
{
|
{
|
||||||
.sampler = VK_NULL_HANDLE,
|
.sampler = VK_NULL_HANDLE,
|
||||||
.imageView = radv_image_view_to_handle(&tmp->dst_iview),
|
.imageView = radv_image_view_to_handle(dst_iview),
|
||||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.cleari.img_p_layout, 0, 1,
|
|
||||||
&tmp->set, 0, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1236,10 +1194,10 @@ radv_meta_clear_image_cs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
const VkClearColorValue *clear_color)
|
const VkClearColorValue *clear_color)
|
||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
struct cleari_temps temps;
|
struct radv_image_view dst_iview;
|
||||||
|
|
||||||
create_iview(cmd_buffer, dst, VK_IMAGE_USAGE_STORAGE_BIT, &temps.dst_iview);
|
create_iview(cmd_buffer, dst, VK_IMAGE_USAGE_STORAGE_BIT, &dst_iview);
|
||||||
cleari_bind_descriptors(cmd_buffer, &temps);
|
cleari_bind_descriptors(cmd_buffer, &dst_iview);
|
||||||
|
|
||||||
cleari_bind_pipeline(cmd_buffer);
|
cleari_bind_pipeline(cmd_buffer);
|
||||||
|
|
||||||
@@ -1256,5 +1214,4 @@ radv_meta_clear_image_cs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
push_constants);
|
push_constants);
|
||||||
|
|
||||||
radv_unaligned_dispatch(cmd_buffer, dst->image->extent.width, dst->image->extent.height, 1);
|
radv_unaligned_dispatch(cmd_buffer, dst->image->extent.width, dst->image->extent.height, 1);
|
||||||
radv_temp_descriptor_set_destroy(cmd_buffer->device, temps.set);
|
|
||||||
}
|
}
|
||||||
|
@@ -179,6 +179,7 @@ create_layout(struct radv_device *device)
|
|||||||
*/
|
*/
|
||||||
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 2,
|
.bindingCount = 2,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -369,7 +370,6 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
++layer) {
|
++layer) {
|
||||||
|
|
||||||
struct radv_image_view src_iview;
|
struct radv_image_view src_iview;
|
||||||
VkDescriptorSet set;
|
|
||||||
radv_image_view_init(&src_iview, cmd_buffer->device,
|
radv_image_view_init(&src_iview, cmd_buffer->device,
|
||||||
&(VkImageViewCreateInfo) {
|
&(VkImageViewCreateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
||||||
@@ -404,16 +404,14 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
cmd_buffer, VK_IMAGE_USAGE_STORAGE_BIT);
|
cmd_buffer, VK_IMAGE_USAGE_STORAGE_BIT);
|
||||||
|
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
radv_meta_push_descriptor_set(cmd_buffer,
|
||||||
device->meta_state.resolve_compute.ds_layout,
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
&set);
|
device->meta_state.resolve_compute.p_layout,
|
||||||
|
0, /* set */
|
||||||
radv_UpdateDescriptorSets(radv_device_to_handle(device),
|
2, /* descriptorWriteCount */
|
||||||
2, /* writeCount */
|
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = set,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -428,7 +426,6 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = set,
|
|
||||||
.dstBinding = 1,
|
.dstBinding = 1,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -441,12 +438,7 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.resolve_compute.p_layout, 0, 1,
|
|
||||||
&set, 0, NULL);
|
|
||||||
|
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
if (vk_format_is_int(src_image->vk_format))
|
if (vk_format_is_int(src_image->vk_format))
|
||||||
@@ -469,7 +461,6 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
VK_SHADER_STAGE_COMPUTE_BIT, 0, 16,
|
VK_SHADER_STAGE_COMPUTE_BIT, 0, 16,
|
||||||
push_constants);
|
push_constants);
|
||||||
radv_unaligned_dispatch(cmd_buffer, extent.width, extent.height, 1);
|
radv_unaligned_dispatch(cmd_buffer, extent.width, extent.height, 1);
|
||||||
radv_temp_descriptor_set_destroy(cmd_buffer->device, set);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
radv_meta_restore_compute(&saved_state, cmd_buffer, 16);
|
radv_meta_restore_compute(&saved_state, cmd_buffer, 16);
|
||||||
|
@@ -529,6 +529,7 @@ VkResult radv_device_init_meta_query_state(struct radv_device *device)
|
|||||||
|
|
||||||
VkDescriptorSetLayoutCreateInfo occlusion_ds_create_info = {
|
VkDescriptorSetLayoutCreateInfo occlusion_ds_create_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
|
||||||
|
.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,
|
||||||
.bindingCount = 2,
|
.bindingCount = 2,
|
||||||
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
.pBindings = (VkDescriptorSetLayoutBinding[]) {
|
||||||
{
|
{
|
||||||
@@ -656,14 +657,9 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
{
|
{
|
||||||
struct radv_device *device = cmd_buffer->device;
|
struct radv_device *device = cmd_buffer->device;
|
||||||
struct radv_meta_saved_compute_state saved_state;
|
struct radv_meta_saved_compute_state saved_state;
|
||||||
VkDescriptorSet ds;
|
|
||||||
|
|
||||||
radv_meta_save_compute(&saved_state, cmd_buffer, 4);
|
radv_meta_save_compute(&saved_state, cmd_buffer, 4);
|
||||||
|
|
||||||
radv_temp_descriptor_set_create(device, cmd_buffer,
|
|
||||||
device->meta_state.query.ds_layout,
|
|
||||||
&ds);
|
|
||||||
|
|
||||||
struct radv_buffer dst_buffer = {
|
struct radv_buffer dst_buffer = {
|
||||||
.bo = dst_bo,
|
.bo = dst_bo,
|
||||||
.offset = dst_offset,
|
.offset = dst_offset,
|
||||||
@@ -676,12 +672,17 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.size = MAX2(src_stride * count, avail_offset + 4 * count - src_offset)
|
.size = MAX2(src_stride * count, avail_offset + 4 * count - src_offset)
|
||||||
};
|
};
|
||||||
|
|
||||||
radv_UpdateDescriptorSets(radv_device_to_handle(device),
|
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
||||||
2, /* writeCount */
|
VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
|
||||||
|
|
||||||
|
radv_meta_push_descriptor_set(cmd_buffer,
|
||||||
|
VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
device->meta_state.query.p_layout,
|
||||||
|
0, /* set */
|
||||||
|
2, /* descriptorWriteCount */
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = ds,
|
|
||||||
.dstBinding = 0,
|
.dstBinding = 0,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -694,7 +695,6 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
|
||||||
.dstSet = ds,
|
|
||||||
.dstBinding = 1,
|
.dstBinding = 1,
|
||||||
.dstArrayElement = 0,
|
.dstArrayElement = 0,
|
||||||
.descriptorCount = 1,
|
.descriptorCount = 1,
|
||||||
@@ -705,15 +705,7 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.range = VK_WHOLE_SIZE
|
.range = VK_WHOLE_SIZE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 0, NULL);
|
});
|
||||||
|
|
||||||
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
|
|
||||||
|
|
||||||
radv_CmdBindDescriptorSets(radv_cmd_buffer_to_handle(cmd_buffer),
|
|
||||||
VK_PIPELINE_BIND_POINT_COMPUTE,
|
|
||||||
device->meta_state.query.p_layout, 0, 1,
|
|
||||||
&ds, 0, NULL);
|
|
||||||
|
|
||||||
/* Encode the number of elements for easy access by the shader. */
|
/* Encode the number of elements for easy access by the shader. */
|
||||||
pipeline_stats_mask &= 0x7ff;
|
pipeline_stats_mask &= 0x7ff;
|
||||||
@@ -750,8 +742,6 @@ static void radv_query_shader(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
RADV_CMD_FLAG_INV_VMEM_L1 |
|
RADV_CMD_FLAG_INV_VMEM_L1 |
|
||||||
RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
|
RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
|
||||||
|
|
||||||
radv_temp_descriptor_set_destroy(device, ds);
|
|
||||||
|
|
||||||
radv_meta_restore_compute(&saved_state, cmd_buffer, 4);
|
radv_meta_restore_compute(&saved_state, cmd_buffer, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user