v3dv: create a v3dv_cmd_buffer_subpass_resume helper

This is the same as the subpass start version, only that it won't
emit subpass clears. This is necessary when resuming a subpass
from a partial clear to make sure we don't try to clear subpass
attachments again.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c
index 520253d..2ef264c 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -1671,8 +1671,8 @@
    v3dv_CmdClearAttachments(_cmd_buffer, att_count, atts, 1, &rect);
 }
 
-struct v3dv_job *
-v3dv_cmd_buffer_subpass_start(struct v3dv_cmd_buffer *cmd_buffer,
+static struct v3dv_job *
+cmd_buffer_subpass_create_job(struct v3dv_cmd_buffer *cmd_buffer,
                               uint32_t subpass_idx)
 {
    struct v3dv_cmd_buffer_state *state = &cmd_buffer->state;
@@ -1710,6 +1710,21 @@
       assert(subpass->resolve_attachments == NULL);
    }
 
+   return job;
+}
+
+struct v3dv_job *
+v3dv_cmd_buffer_subpass_start(struct v3dv_cmd_buffer *cmd_buffer,
+                              uint32_t subpass_idx)
+{
+   struct v3dv_cmd_buffer_state *state = &cmd_buffer->state;
+   assert(subpass_idx < state->pass->subpass_count);
+
+   struct v3dv_job *job =
+      cmd_buffer_subpass_create_job(cmd_buffer, subpass_idx);
+   if (!job)
+      return NULL;
+
    /* If we can't use TLB clears then we need to emit draw clears for any
     * LOAD_OP_CLEAR attachments in this subpass now.
     */
@@ -1719,6 +1734,23 @@
    return job;
 }
 
+struct v3dv_job *
+v3dv_cmd_buffer_subpass_resume(struct v3dv_cmd_buffer *cmd_buffer,
+                               uint32_t subpass_idx)
+{
+   struct v3dv_cmd_buffer_state *state = &cmd_buffer->state;
+   assert(subpass_idx < state->pass->subpass_count);
+
+   struct v3dv_job *job =
+      cmd_buffer_subpass_create_job(cmd_buffer, subpass_idx);
+   if (!job)
+      return NULL;
+
+   job->is_subpass_continue = true;
+
+   return job;
+}
+
 void
 v3dv_cmd_buffer_subpass_finish(struct v3dv_cmd_buffer *cmd_buffer)
 {
@@ -2731,9 +2763,8 @@
    memcpy(&state->render_area, &state->meta.render_area, sizeof(VkRect2D));
 
    struct v3dv_job *job =
-      v3dv_cmd_buffer_subpass_start(cmd_buffer, state->meta.subpass_idx);
+      v3dv_cmd_buffer_subpass_resume(cmd_buffer, state->meta.subpass_idx);
    if (job) {
-      job->is_subpass_continue = true;
       if (state->meta.pipeline != VK_NULL_HANDLE) {
          v3dv_CmdBindPipeline(v3dv_cmd_buffer_to_handle(cmd_buffer),
                               VK_PIPELINE_BIND_POINT_GRAPHICS,
@@ -2830,10 +2861,9 @@
       /* Now start a new job in the same subpass and flag it as continuing
        * the current subpass.
        */
-      job = v3dv_cmd_buffer_subpass_start(cmd_buffer,
-                                          cmd_buffer->state.subpass_idx);
+      job = v3dv_cmd_buffer_subpass_resume(cmd_buffer,
+                                           cmd_buffer->state.subpass_idx);
       assert(job->draw_count == 0);
-      job->is_subpass_continue = true;
 
       /* Inherit the 'always flush' behavior */
       job->always_flush = true;
diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h
index 481d957..6e511cc 100644
--- a/src/broadcom/vulkan/v3dv_private.h
+++ b/src/broadcom/vulkan/v3dv_private.h
@@ -791,6 +791,8 @@
 
 struct v3dv_job *v3dv_cmd_buffer_subpass_start(struct v3dv_cmd_buffer *cmd_buffer,
                                                uint32_t subpass_idx);
+struct v3dv_job *v3dv_cmd_buffer_subpass_resume(struct v3dv_cmd_buffer *cmd_buffer,
+                                                uint32_t subpass_idx);
 
 void v3dv_cmd_buffer_subpass_finish(struct v3dv_cmd_buffer *cmd_buffer);