anv/blit2d: Inline meta_emit_blit2d
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
This commit is contained in:
@@ -129,16 +129,40 @@ create_iview(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
}, cmd_buffer, img_o, usage);
|
}, cmd_buffer, img_o, usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
anv_meta_end_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
||||||
struct anv_image_view *src_iview,
|
struct anv_meta_saved_state *save)
|
||||||
uint32_t src_pitch,
|
{
|
||||||
VkOffset3D src_offset,
|
anv_meta_restore(save, cmd_buffer);
|
||||||
struct anv_image_view *dest_iview,
|
}
|
||||||
VkOffset3D dest_offset,
|
|
||||||
VkExtent3D extent)
|
void
|
||||||
|
anv_meta_begin_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
||||||
|
struct anv_meta_saved_state *save)
|
||||||
|
{
|
||||||
|
anv_meta_save(save, cmd_buffer,
|
||||||
|
(1 << VK_DYNAMIC_STATE_VIEWPORT));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
anv_meta_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
||||||
|
struct anv_meta_blit2d_surf *src,
|
||||||
|
struct anv_meta_blit2d_surf *dst,
|
||||||
|
unsigned num_rects,
|
||||||
|
struct anv_meta_blit2d_rect *rects)
|
||||||
{
|
{
|
||||||
struct anv_device *device = cmd_buffer->device;
|
struct anv_device *device = cmd_buffer->device;
|
||||||
|
VkDevice vk_device = anv_device_to_handle(cmd_buffer->device);
|
||||||
|
VkImageUsageFlags src_usage = VK_IMAGE_USAGE_SAMPLED_BIT;
|
||||||
|
VkImageUsageFlags dst_usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||||
|
|
||||||
|
for (unsigned r = 0; r < num_rects; ++r) {
|
||||||
|
VkImage src_img;
|
||||||
|
VkImage dst_img;
|
||||||
|
struct anv_image_view src_iview;
|
||||||
|
struct anv_image_view dst_iview;
|
||||||
|
create_iview(cmd_buffer, src, &rects[r], src_usage, &src_img, &src_iview);
|
||||||
|
create_iview(cmd_buffer, dst, &rects[r], dst_usage, &dst_img, &dst_iview);
|
||||||
|
|
||||||
struct blit_vb_data {
|
struct blit_vb_data {
|
||||||
float pos[2];
|
float pos[2];
|
||||||
@@ -154,37 +178,37 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
|
|
||||||
vb_data[0] = (struct blit_vb_data) {
|
vb_data[0] = (struct blit_vb_data) {
|
||||||
.pos = {
|
.pos = {
|
||||||
dest_offset.x + extent.width,
|
rects[r].dst_x + rects[r].width,
|
||||||
dest_offset.y + extent.height,
|
rects[r].dst_y + rects[r].height,
|
||||||
},
|
},
|
||||||
.tex_coord = {
|
.tex_coord = {
|
||||||
src_offset.x + extent.width,
|
rects[r].src_x + rects[r].width,
|
||||||
src_offset.y + extent.height,
|
rects[r].src_y + rects[r].height,
|
||||||
src_pitch,
|
src->pitch,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
vb_data[1] = (struct blit_vb_data) {
|
vb_data[1] = (struct blit_vb_data) {
|
||||||
.pos = {
|
.pos = {
|
||||||
dest_offset.x,
|
rects[r].dst_x,
|
||||||
dest_offset.y + extent.height,
|
rects[r].dst_y + rects[r].height,
|
||||||
},
|
},
|
||||||
.tex_coord = {
|
.tex_coord = {
|
||||||
src_offset.x,
|
rects[r].src_x,
|
||||||
src_offset.y + extent.height,
|
rects[r].src_y + rects[r].height,
|
||||||
src_pitch,
|
src->pitch,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
vb_data[2] = (struct blit_vb_data) {
|
vb_data[2] = (struct blit_vb_data) {
|
||||||
.pos = {
|
.pos = {
|
||||||
dest_offset.x,
|
rects[r].dst_x,
|
||||||
dest_offset.y,
|
rects[r].dst_y,
|
||||||
},
|
},
|
||||||
.tex_coord = {
|
.tex_coord = {
|
||||||
src_offset.x,
|
rects[r].src_x,
|
||||||
src_offset.y,
|
rects[r].src_y,
|
||||||
src_pitch,
|
src->pitch,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -208,7 +232,7 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
});
|
});
|
||||||
|
|
||||||
VkDescriptorPool desc_pool;
|
VkDescriptorPool desc_pool;
|
||||||
anv_CreateDescriptorPool(anv_device_to_handle(device),
|
anv_CreateDescriptorPool(vk_device,
|
||||||
&(const VkDescriptorPoolCreateInfo) {
|
&(const VkDescriptorPoolCreateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
|
||||||
.pNext = NULL,
|
.pNext = NULL,
|
||||||
@@ -224,7 +248,7 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
}, &cmd_buffer->pool->alloc, &desc_pool);
|
}, &cmd_buffer->pool->alloc, &desc_pool);
|
||||||
|
|
||||||
VkDescriptorSet set;
|
VkDescriptorSet set;
|
||||||
anv_AllocateDescriptorSets(anv_device_to_handle(device),
|
anv_AllocateDescriptorSets(vk_device,
|
||||||
&(VkDescriptorSetAllocateInfo) {
|
&(VkDescriptorSetAllocateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
|
||||||
.descriptorPool = desc_pool,
|
.descriptorPool = desc_pool,
|
||||||
@@ -232,7 +256,7 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
.pSetLayouts = &device->meta_state.blit2d.ds_layout
|
.pSetLayouts = &device->meta_state.blit2d.ds_layout
|
||||||
}, &set);
|
}, &set);
|
||||||
|
|
||||||
anv_UpdateDescriptorSets(anv_device_to_handle(device),
|
anv_UpdateDescriptorSets(vk_device,
|
||||||
1, /* writeCount */
|
1, /* writeCount */
|
||||||
(VkWriteDescriptorSet[]) {
|
(VkWriteDescriptorSet[]) {
|
||||||
{
|
{
|
||||||
@@ -245,7 +269,7 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
.pImageInfo = (VkDescriptorImageInfo[]) {
|
.pImageInfo = (VkDescriptorImageInfo[]) {
|
||||||
{
|
{
|
||||||
.sampler = NULL,
|
.sampler = NULL,
|
||||||
.imageView = anv_image_view_to_handle(src_iview),
|
.imageView = anv_image_view_to_handle(&src_iview),
|
||||||
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
.imageLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -253,15 +277,15 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
}, 0, NULL);
|
}, 0, NULL);
|
||||||
|
|
||||||
VkFramebuffer fb;
|
VkFramebuffer fb;
|
||||||
anv_CreateFramebuffer(anv_device_to_handle(device),
|
anv_CreateFramebuffer(vk_device,
|
||||||
&(VkFramebufferCreateInfo) {
|
&(VkFramebufferCreateInfo) {
|
||||||
.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
|
||||||
.attachmentCount = 1,
|
.attachmentCount = 1,
|
||||||
.pAttachments = (VkImageView[]) {
|
.pAttachments = (VkImageView[]) {
|
||||||
anv_image_view_to_handle(dest_iview),
|
anv_image_view_to_handle(&dst_iview),
|
||||||
},
|
},
|
||||||
.width = dest_iview->extent.width,
|
.width = dst_iview.extent.width,
|
||||||
.height = dest_iview->extent.height,
|
.height = dst_iview.extent.height,
|
||||||
.layers = 1
|
.layers = 1
|
||||||
}, &cmd_buffer->pool->alloc, &fb);
|
}, &cmd_buffer->pool->alloc, &fb);
|
||||||
|
|
||||||
@@ -271,8 +295,8 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
.renderPass = device->meta_state.blit2d.render_pass,
|
.renderPass = device->meta_state.blit2d.render_pass,
|
||||||
.framebuffer = fb,
|
.framebuffer = fb,
|
||||||
.renderArea = {
|
.renderArea = {
|
||||||
.offset = { dest_offset.x, dest_offset.y },
|
.offset = { rects[r].dst_x, rects[r].dst_y, },
|
||||||
.extent = { extent.width, extent.height },
|
.extent = { rects[r].width, rects[r].height },
|
||||||
},
|
},
|
||||||
.clearValueCount = 0,
|
.clearValueCount = 0,
|
||||||
.pClearValues = NULL,
|
.pClearValues = NULL,
|
||||||
@@ -289,8 +313,8 @@ meta_emit_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
&(VkViewport) {
|
&(VkViewport) {
|
||||||
.x = 0.0f,
|
.x = 0.0f,
|
||||||
.y = 0.0f,
|
.y = 0.0f,
|
||||||
.width = dest_iview->extent.width,
|
.width = dst_iview.extent.width,
|
||||||
.height = dest_iview->extent.height,
|
.height = dst_iview.extent.height,
|
||||||
.minDepth = 0.0f,
|
.minDepth = 0.0f,
|
||||||
.maxDepth = 1.0f,
|
.maxDepth = 1.0f,
|
||||||
});
|
});
|
||||||
@@ -307,53 +331,8 @@ meta_emit_blit2d(struct anv_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.
|
||||||
*/
|
*/
|
||||||
anv_DestroyDescriptorPool(anv_device_to_handle(device),
|
anv_DestroyDescriptorPool(vk_device, desc_pool, &cmd_buffer->pool->alloc);
|
||||||
desc_pool, &cmd_buffer->pool->alloc);
|
anv_DestroyFramebuffer(vk_device, fb, &cmd_buffer->pool->alloc);
|
||||||
anv_DestroyFramebuffer(anv_device_to_handle(device), fb,
|
|
||||||
&cmd_buffer->pool->alloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
anv_meta_end_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|
||||||
struct anv_meta_saved_state *save)
|
|
||||||
{
|
|
||||||
anv_meta_restore(save, cmd_buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
anv_meta_begin_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|
||||||
struct anv_meta_saved_state *save)
|
|
||||||
{
|
|
||||||
anv_meta_save(save, cmd_buffer,
|
|
||||||
(1 << VK_DYNAMIC_STATE_VIEWPORT));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
anv_meta_blit2d(struct anv_cmd_buffer *cmd_buffer,
|
|
||||||
struct anv_meta_blit2d_surf *src,
|
|
||||||
struct anv_meta_blit2d_surf *dst,
|
|
||||||
unsigned num_rects,
|
|
||||||
struct anv_meta_blit2d_rect *rects)
|
|
||||||
{
|
|
||||||
VkDevice vk_device = anv_device_to_handle(cmd_buffer->device);
|
|
||||||
VkImageUsageFlags src_usage = VK_IMAGE_USAGE_SAMPLED_BIT;
|
|
||||||
VkImageUsageFlags dst_usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
|
||||||
|
|
||||||
for (unsigned r = 0; r < num_rects; ++r) {
|
|
||||||
VkImage src_img;
|
|
||||||
VkImage dst_img;
|
|
||||||
struct anv_image_view src_iview;
|
|
||||||
struct anv_image_view dst_iview;
|
|
||||||
create_iview(cmd_buffer, src, &rects[r], src_usage, &src_img, &src_iview);
|
|
||||||
create_iview(cmd_buffer, dst, &rects[r], dst_usage, &dst_img, &dst_iview);
|
|
||||||
|
|
||||||
/* Perform blit */
|
|
||||||
meta_emit_blit2d(cmd_buffer,
|
|
||||||
&src_iview, src->pitch,
|
|
||||||
(VkOffset3D){rects[r].src_x, rects[r].src_y, 0},
|
|
||||||
&dst_iview,
|
|
||||||
(VkOffset3D){rects[r].dst_x, rects[r].dst_y, 0},
|
|
||||||
(VkExtent3D){rects[r].width, rects[r].height, 1});
|
|
||||||
|
|
||||||
anv_DestroyImage(vk_device, src_img, &cmd_buffer->pool->alloc);
|
anv_DestroyImage(vk_device, src_img, &cmd_buffer->pool->alloc);
|
||||||
anv_DestroyImage(vk_device, dst_img, &cmd_buffer->pool->alloc);
|
anv_DestroyImage(vk_device, dst_img, &cmd_buffer->pool->alloc);
|
||||||
|
Reference in New Issue
Block a user