[Mesa-dev] [PATCH] radv: copy the number of viewports/scissors at pipeline bind time

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Sep 20 12:03:30 UTC 2017


The number of viewports/scissors can only be specified at pipeline
creation time, so make sure to copy them when binding a new one
because the dynamic state is cleared in BeginCommandBuffer().

Fixes: dcf46e995d ("radv: do not update the number of scissors in vkCmdSetScissor()")
Fixes: 60878dd00c ("radv: do not update the number of viewports in vkCmdSetViewport()")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/vulkan/radv_cmd_buffer.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 0c3a5c6ffc..78b235fa22 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -83,14 +83,18 @@ radv_dynamic_state_copy(struct radv_dynamic_state *dest,
 			const struct radv_dynamic_state *src,
 			uint32_t copy_mask)
 {
+	/* Make sure to copy the number of viewports/scissors because they can
+	 * only be specified at pipeline creation time.
+	 */
+	dest->viewport.count = src->viewport.count;
+	dest->scissor.count = src->scissor.count;
+
 	if (copy_mask & (1 << VK_DYNAMIC_STATE_VIEWPORT)) {
-		dest->viewport.count = src->viewport.count;
 		typed_memcpy(dest->viewport.viewports, src->viewport.viewports,
 			     src->viewport.count);
 	}
 
 	if (copy_mask & (1 << VK_DYNAMIC_STATE_SCISSOR)) {
-		dest->scissor.count = src->scissor.count;
 		typed_memcpy(dest->scissor.scissors, src->scissor.scissors,
 			     src->scissor.count);
 	}
-- 
2.14.1



More information about the mesa-dev mailing list