[Mesa-dev] [PATCH 04/10] radv: do not rebind the same pipeline when doing meta operations
Samuel Pitoiset
samuel.pitoiset at gmail.com
Tue Oct 3 18:52:39 UTC 2017
This might save some usless state changes, and it improves
consistency with the other meta operations.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
src/amd/vulkan/radv_meta_buffer.c | 18 ++++++++++++------
src/amd/vulkan/radv_meta_resolve_fs.c | 7 +++++--
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/src/amd/vulkan/radv_meta_buffer.c b/src/amd/vulkan/radv_meta_buffer.c
index ea11ed18c4..22be07a2ee 100644
--- a/src/amd/vulkan/radv_meta_buffer.c
+++ b/src/amd/vulkan/radv_meta_buffer.c
@@ -295,9 +295,12 @@ static void fill_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
.size = size
};
- radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
- VK_PIPELINE_BIND_POINT_COMPUTE,
- device->meta_state.buffer.fill_pipeline);
+ if (cmd_buffer->state.compute_pipeline !=
+ radv_pipeline_from_handle(device->meta_state.buffer.fill_pipeline)) {
+ radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
+ 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,
@@ -352,9 +355,12 @@ static void copy_buffer_shader(struct radv_cmd_buffer *cmd_buffer,
.size = size
};
- radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
- VK_PIPELINE_BIND_POINT_COMPUTE,
- device->meta_state.buffer.copy_pipeline);
+ if (cmd_buffer->state.compute_pipeline !=
+ radv_pipeline_from_handle(device->meta_state.buffer.copy_pipeline)) {
+ radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
+ 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,
diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c b/src/amd/vulkan/radv_meta_resolve_fs.c
index 50d5ed7d5a..56b6e0c29a 100644
--- a/src/amd/vulkan/radv_meta_resolve_fs.c
+++ b/src/amd/vulkan/radv_meta_resolve_fs.c
@@ -418,8 +418,11 @@ emit_resolve(struct radv_cmd_buffer *cmd_buffer,
unsigned fs_key = radv_format_meta_fs_key(dest_iview->vk_format);
VkPipeline pipeline_h = device->meta_state.resolve_fragment.rc[samples_log2].pipeline[fs_key];
- radv_CmdBindPipeline(cmd_buffer_h, VK_PIPELINE_BIND_POINT_GRAPHICS,
- pipeline_h);
+ if (cmd_buffer->state.pipeline != radv_pipeline_from_handle(pipeline_h)) {
+ radv_CmdBindPipeline(cmd_buffer_h,
+ VK_PIPELINE_BIND_POINT_GRAPHICS,
+ pipeline_h);
+ }
radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &(VkViewport) {
.x = dest_offset->x,
--
2.14.2
More information about the mesa-dev
mailing list