v3dv/cmd_bufffer: rename and split emit_graphics_pipeline
The name suggests that this method emits the full graphics pipeline,
but that is not the case (ie: scissor is emitted at a different
point).
Right now that method is mostly emitting the gl_shader state plus some
other packets. So we just renamed it to emit_gl_shader_state, and move
the other packet emission to new emission methods.
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 d9ba711..298bb4e 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -2165,7 +2165,49 @@
}
static void
-emit_graphics_pipeline(struct v3dv_cmd_buffer *cmd_buffer)
+emit_varyings_state(struct v3dv_cmd_buffer *cmd_buffer)
+{
+ struct v3dv_job *job = cmd_buffer->state.job;
+ struct v3dv_pipeline *pipeline = cmd_buffer->state.pipeline;
+
+ const uint32_t num_flags =
+ ARRAY_SIZE(pipeline->fs->prog_data.fs->flat_shade_flags);
+ const uint32_t *flat_shade_flags =
+ pipeline->fs->prog_data.fs->flat_shade_flags;
+ const uint32_t *noperspective_flags =
+ pipeline->fs->prog_data.fs->noperspective_flags;
+ const uint32_t *centroid_flags =
+ pipeline->fs->prog_data.fs->centroid_flags;
+
+ if (!emit_varying_flags(job, num_flags, flat_shade_flags,
+ emit_flat_shade_flags)) {
+ cl_emit(&job->bcl, ZERO_ALL_FLAT_SHADE_FLAGS, flags);
+ }
+
+ if (!emit_varying_flags(job, num_flags, noperspective_flags,
+ emit_noperspective_flags)) {
+ cl_emit(&job->bcl, ZERO_ALL_NON_PERSPECTIVE_FLAGS, flags);
+ }
+
+ if (!emit_varying_flags(job, num_flags, centroid_flags,
+ emit_centroid_flags)) {
+ cl_emit(&job->bcl, ZERO_ALL_CENTROID_FLAGS, flags);
+ }
+}
+
+static void
+emit_configuration_bits(struct v3dv_cmd_buffer *cmd_buffer)
+{
+ struct v3dv_job *job = cmd_buffer->state.job;
+ struct v3dv_pipeline *pipeline = cmd_buffer->state.pipeline;
+
+ cl_emit_with_prepacked(&job->bcl, CFG_BITS, pipeline->cfg_bits, config) {
+ config.early_z_updates_enable = job->ez_state != VC5_EZ_DISABLED;
+ }
+}
+
+static void
+emit_gl_shader_state(struct v3dv_cmd_buffer *cmd_buffer)
{
struct v3dv_job *job = cmd_buffer->state.job;
assert(job);
@@ -2295,34 +2337,6 @@
state.number_of_attribute_arrays = num_elements_to_emit;
}
- cl_emit_with_prepacked(&job->bcl, CFG_BITS, pipeline->cfg_bits, config) {
- config.early_z_updates_enable = job->ez_state != VC5_EZ_DISABLED;
- }
-
- const uint32_t num_flags =
- ARRAY_SIZE(pipeline->fs->prog_data.fs->flat_shade_flags);
- const uint32_t *flat_shade_flags =
- pipeline->fs->prog_data.fs->flat_shade_flags;
- const uint32_t *noperspective_flags =
- pipeline->fs->prog_data.fs->noperspective_flags;
- const uint32_t *centroid_flags =
- pipeline->fs->prog_data.fs->centroid_flags;
-
- if (!emit_varying_flags(job, num_flags, flat_shade_flags,
- emit_flat_shade_flags)) {
- cl_emit(&job->bcl, ZERO_ALL_FLAT_SHADE_FLAGS, flags);
- }
-
- if (!emit_varying_flags(job, num_flags, noperspective_flags,
- emit_noperspective_flags)) {
- cl_emit(&job->bcl, ZERO_ALL_NON_PERSPECTIVE_FLAGS, flags);
- }
-
- if (!emit_varying_flags(job, num_flags, centroid_flags,
- emit_centroid_flags)) {
- cl_emit(&job->bcl, ZERO_ALL_CENTROID_FLAGS, flags);
- }
-
cmd_buffer->state.dirty &= ~(V3DV_CMD_DIRTY_VERTEX_BUFFER |
V3DV_CMD_DIRTY_DESCRIPTOR_SETS |
V3DV_CMD_DIRTY_PUSH_CONSTANTS);
@@ -2433,7 +2447,9 @@
V3DV_CMD_DIRTY_VERTEX_BUFFER |
V3DV_CMD_DIRTY_DESCRIPTOR_SETS |
V3DV_CMD_DIRTY_PUSH_CONSTANTS)) {
- emit_graphics_pipeline(cmd_buffer);
+ emit_gl_shader_state(cmd_buffer);
+ emit_configuration_bits(cmd_buffer);
+ emit_varyings_state(cmd_buffer);
}
if (*dirty & (V3DV_CMD_DIRTY_VIEWPORT | V3DV_CMD_DIRTY_SCISSOR)) {