Mesa (master): radv: add RADV_META_SAVE_COMPUTE_PIPELINE flag

Samuel Pitoiset hakzsam at kemper.freedesktop.org
Fri Oct 6 07:50:14 UTC 2017


Module: Mesa
Branch: master
Commit: 213f86e514249dba245c97877b3eae3c2018a599
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=213f86e514249dba245c97877b3eae3c2018a599

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Oct  3 14:47:32 2017 +0200

radv: add RADV_META_SAVE_COMPUTE_PIPELINE flag

This will allow use to merge the compute save/restore helpers.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_meta.c | 24 ++++++++++++++++++++++--
 src/amd/vulkan/radv_meta.h |  1 +
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
index 647742273c..a35e23167a 100644
--- a/src/amd/vulkan/radv_meta.c
+++ b/src/amd/vulkan/radv_meta.c
@@ -34,9 +34,14 @@ void
 radv_meta_save(struct radv_meta_saved_state *state,
 	       struct radv_cmd_buffer *cmd_buffer, uint32_t flags)
 {
+	assert(flags & (RADV_META_SAVE_GRAPHICS_PIPELINE |
+			RADV_META_SAVE_COMPUTE_PIPELINE));
+
 	state->flags = flags;
 
 	if (state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE) {
+		assert(!(state->flags & RADV_META_SAVE_COMPUTE_PIPELINE));
+
 		state->old_pipeline = cmd_buffer->state.pipeline;
 
 		/* Save all viewports. */
@@ -61,6 +66,12 @@ radv_meta_save(struct radv_meta_saved_state *state,
 					   1 << VK_DYNAMIC_STATE_SCISSOR;
 	}
 
+	if (state->flags & RADV_META_SAVE_COMPUTE_PIPELINE) {
+		assert(!(state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE));
+
+		state->old_pipeline = cmd_buffer->state.compute_pipeline;
+	}
+
 	if (state->flags & RADV_META_SAVE_DESCRIPTORS) {
 		state->old_descriptor_set0 = cmd_buffer->state.descriptors[0];
 	}
@@ -106,6 +117,12 @@ radv_meta_restore(const struct radv_meta_saved_state *state,
 					   1 << VK_DYNAMIC_STATE_SCISSOR;
 	}
 
+	if (state->flags & RADV_META_SAVE_COMPUTE_PIPELINE) {
+		radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
+				     VK_PIPELINE_BIND_POINT_COMPUTE,
+				     radv_pipeline_to_handle(state->old_pipeline));
+	}
+
 	if (state->flags & RADV_META_SAVE_DESCRIPTORS) {
 		cmd_buffer->state.descriptors[0] = state->old_descriptor_set0;
 		cmd_buffer->state.descriptors_dirty |= (1 << 0);
@@ -114,8 +131,11 @@ radv_meta_restore(const struct radv_meta_saved_state *state,
 	if (state->flags & RADV_META_SAVE_CONSTANTS) {
 		memcpy(cmd_buffer->push_constants, state->push_constants,
 		       MAX_PUSH_CONSTANTS_SIZE);
-		cmd_buffer->push_constant_stages |= VK_SHADER_STAGE_ALL_GRAPHICS |
-						    VK_SHADER_STAGE_COMPUTE_BIT;
+		cmd_buffer->push_constant_stages |= VK_SHADER_STAGE_COMPUTE_BIT;
+
+		if (state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE) {
+			cmd_buffer->push_constant_stages |= VK_SHADER_STAGE_ALL_GRAPHICS;
+		}
 	}
 
 	if (state->flags & RADV_META_SAVE_PASS) {
diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index c4806daa3d..358df70599 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -38,6 +38,7 @@ enum radv_meta_save_flags {
 	RADV_META_SAVE_CONSTANTS         = (1 << 1),
 	RADV_META_SAVE_DESCRIPTORS       = (1 << 2),
 	RADV_META_SAVE_GRAPHICS_PIPELINE = (1 << 3),
+	RADV_META_SAVE_COMPUTE_PIPELINE  = (1 << 4),
 };
 
 struct radv_meta_saved_state {




More information about the mesa-commit mailing list