anv: export descriptor flushing functions

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26989>
This commit is contained in:
Lionel Landwerlin
2024-01-10 14:07:31 +02:00
committed by Marge Bot
parent 43fb43ba2c
commit 6bb3ae99c5
2 changed files with 40 additions and 28 deletions

View File

@@ -133,6 +133,17 @@ void genX(emit_l3_config)(struct anv_batch *batch,
void genX(cmd_buffer_config_l3)(struct anv_cmd_buffer *cmd_buffer, void genX(cmd_buffer_config_l3)(struct anv_cmd_buffer *cmd_buffer,
const struct intel_l3_config *cfg); const struct intel_l3_config *cfg);
uint32_t
genX(cmd_buffer_flush_descriptor_sets)(struct anv_cmd_buffer *cmd_buffer,
struct anv_cmd_pipeline_state *pipe_state,
const VkShaderStageFlags dirty,
struct anv_shader_bin **shaders,
uint32_t num_shaders);
void
genX(cmd_buffer_flush_push_descriptor_set)(struct anv_cmd_buffer *cmd_buffer,
struct anv_cmd_pipeline_state *state,
struct anv_pipeline *pipeline);
void genX(cmd_buffer_flush_gfx_hw_state)(struct anv_cmd_buffer *cmd_buffer); void genX(cmd_buffer_flush_gfx_hw_state)(struct anv_cmd_buffer *cmd_buffer);
void genX(cmd_buffer_flush_gfx_runtime_state)(struct anv_cmd_buffer *cmd_buffer); void genX(cmd_buffer_flush_gfx_runtime_state)(struct anv_cmd_buffer *cmd_buffer);

View File

@@ -2266,12 +2266,12 @@ emit_samplers(struct anv_cmd_buffer *cmd_buffer,
return VK_SUCCESS; return VK_SUCCESS;
} }
static uint32_t uint32_t
flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer, genX(cmd_buffer_flush_descriptor_sets)(struct anv_cmd_buffer *cmd_buffer,
struct anv_cmd_pipeline_state *pipe_state, struct anv_cmd_pipeline_state *pipe_state,
const VkShaderStageFlags dirty, const VkShaderStageFlags dirty,
struct anv_shader_bin **shaders, struct anv_shader_bin **shaders,
uint32_t num_shaders) uint32_t num_shaders)
{ {
VkShaderStageFlags flushed = 0; VkShaderStageFlags flushed = 0;
@@ -2346,10 +2346,10 @@ flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer,
* and surface state generation when a pipeline is not going to use the * and surface state generation when a pipeline is not going to use the
* binding table to access any push descriptor data. * binding table to access any push descriptor data.
*/ */
static void void
flush_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer, genX(cmd_buffer_flush_push_descriptor_set)(struct anv_cmd_buffer *cmd_buffer,
struct anv_cmd_pipeline_state *state, struct anv_cmd_pipeline_state *state,
struct anv_pipeline *pipeline) struct anv_pipeline *pipeline)
{ {
assert(pipeline->use_push_descriptor && assert(pipeline->use_push_descriptor &&
pipeline->layout.push_descriptor_set_index != -1); pipeline->layout.push_descriptor_set_index != -1);
@@ -3167,9 +3167,9 @@ genX(cmd_buffer_flush_gfx_state)(struct anv_cmd_buffer *cmd_buffer)
cmd_buffer->state.push_descriptors_dirty & cmd_buffer->state.push_descriptors_dirty &
pipeline->base.base.use_push_descriptor; pipeline->base.base.use_push_descriptor;
if (push_descriptor_dirty) { if (push_descriptor_dirty) {
flush_push_descriptor_set(cmd_buffer, genX(cmd_buffer_flush_push_descriptor_set)(cmd_buffer,
&cmd_buffer->state.gfx.base, &cmd_buffer->state.gfx.base,
&pipeline->base.base); &pipeline->base.base);
descriptors_dirty |= push_descriptor_dirty; descriptors_dirty |= push_descriptor_dirty;
cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty; cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty;
} }
@@ -3280,11 +3280,12 @@ genX(cmd_buffer_flush_gfx_state)(struct anv_cmd_buffer *cmd_buffer)
*/ */
uint32_t dirty = 0; uint32_t dirty = 0;
if (descriptors_dirty) { if (descriptors_dirty) {
dirty = flush_descriptor_sets(cmd_buffer, dirty = genX(cmd_buffer_flush_descriptor_sets)(
&cmd_buffer->state.gfx.base, cmd_buffer,
descriptors_dirty, &cmd_buffer->state.gfx.base,
pipeline->base.shaders, descriptors_dirty,
ARRAY_SIZE(pipeline->base.shaders)); pipeline->base.shaders,
ARRAY_SIZE(pipeline->base.shaders));
cmd_buffer->state.descriptors_dirty &= ~dirty; cmd_buffer->state.descriptors_dirty &= ~dirty;
} }
@@ -5779,19 +5780,19 @@ genX(cmd_buffer_flush_compute_state)(struct anv_cmd_buffer *cmd_buffer)
cmd_buffer->state.push_descriptors_dirty & cmd_buffer->state.push_descriptors_dirty &
pipeline->base.use_push_descriptor; pipeline->base.use_push_descriptor;
if (push_descriptor_dirty) { if (push_descriptor_dirty) {
flush_push_descriptor_set(cmd_buffer, genX(cmd_buffer_flush_push_descriptor_set)(cmd_buffer,
&cmd_buffer->state.compute.base, &cmd_buffer->state.compute.base,
&pipeline->base); &pipeline->base);
cmd_buffer->state.descriptors_dirty |= push_descriptor_dirty; cmd_buffer->state.descriptors_dirty |= push_descriptor_dirty;
cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty; cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty;
} }
if ((cmd_buffer->state.descriptors_dirty & VK_SHADER_STAGE_COMPUTE_BIT) || if ((cmd_buffer->state.descriptors_dirty & VK_SHADER_STAGE_COMPUTE_BIT) ||
cmd_buffer->state.compute.pipeline_dirty) { cmd_buffer->state.compute.pipeline_dirty) {
flush_descriptor_sets(cmd_buffer, genX(cmd_buffer_flush_descriptor_sets)(cmd_buffer,
&cmd_buffer->state.compute.base, &cmd_buffer->state.compute.base,
VK_SHADER_STAGE_COMPUTE_BIT, VK_SHADER_STAGE_COMPUTE_BIT,
&pipeline->cs, 1); &pipeline->cs, 1);
cmd_buffer->state.descriptors_dirty &= ~VK_SHADER_STAGE_COMPUTE_BIT; cmd_buffer->state.descriptors_dirty &= ~VK_SHADER_STAGE_COMPUTE_BIT;
#if GFX_VERx10 < 125 #if GFX_VERx10 < 125
@@ -6525,9 +6526,9 @@ cmd_buffer_trace_rays(struct anv_cmd_buffer *cmd_buffer,
cmd_buffer->state.push_descriptors_dirty & cmd_buffer->state.push_descriptors_dirty &
pipeline->base.use_push_descriptor; pipeline->base.use_push_descriptor;
if (push_descriptor_dirty) { if (push_descriptor_dirty) {
flush_push_descriptor_set(cmd_buffer, genX(cmd_buffer_flush_push_descriptor_set)(cmd_buffer,
&cmd_buffer->state.rt.base, &cmd_buffer->state.rt.base,
&pipeline->base); &pipeline->base);
cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty; cmd_buffer->state.push_descriptors_dirty &= ~push_descriptor_dirty;
} }