mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
anv/cmd_buffer: Move dynamic state to graphics state
Tested-by: Józef Kucia <joseph.kucia@gmail.com> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com> Cc: "18.0" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
24caee8975
commit
95ff232294
4 changed files with 33 additions and 30 deletions
|
|
@ -120,7 +120,7 @@ anv_cmd_state_init(struct anv_cmd_buffer *cmd_buffer)
|
|||
memset(state, 0, sizeof(*state));
|
||||
|
||||
state->restart_index = UINT32_MAX;
|
||||
state->dynamic = default_dynamic_state;
|
||||
state->gfx.dynamic = default_dynamic_state;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -359,7 +359,7 @@ void anv_CmdBindPipeline(
|
|||
|
||||
/* Apply the dynamic state from the pipeline */
|
||||
cmd_buffer->state.gfx.dirty |= pipeline->dynamic_state_mask;
|
||||
anv_dynamic_state_copy(&cmd_buffer->state.dynamic,
|
||||
anv_dynamic_state_copy(&cmd_buffer->state.gfx.dynamic,
|
||||
&pipeline->dynamic_state,
|
||||
pipeline->dynamic_state_mask);
|
||||
break;
|
||||
|
|
@ -379,10 +379,10 @@ void anv_CmdSetViewport(
|
|||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
const uint32_t total_count = firstViewport + viewportCount;
|
||||
if (cmd_buffer->state.dynamic.viewport.count < total_count)
|
||||
cmd_buffer->state.dynamic.viewport.count = total_count;
|
||||
if (cmd_buffer->state.gfx.dynamic.viewport.count < total_count)
|
||||
cmd_buffer->state.gfx.dynamic.viewport.count = total_count;
|
||||
|
||||
memcpy(cmd_buffer->state.dynamic.viewport.viewports + firstViewport,
|
||||
memcpy(cmd_buffer->state.gfx.dynamic.viewport.viewports + firstViewport,
|
||||
pViewports, viewportCount * sizeof(*pViewports));
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_VIEWPORT;
|
||||
|
|
@ -397,10 +397,10 @@ void anv_CmdSetScissor(
|
|||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
const uint32_t total_count = firstScissor + scissorCount;
|
||||
if (cmd_buffer->state.dynamic.scissor.count < total_count)
|
||||
cmd_buffer->state.dynamic.scissor.count = total_count;
|
||||
if (cmd_buffer->state.gfx.dynamic.scissor.count < total_count)
|
||||
cmd_buffer->state.gfx.dynamic.scissor.count = total_count;
|
||||
|
||||
memcpy(cmd_buffer->state.dynamic.scissor.scissors + firstScissor,
|
||||
memcpy(cmd_buffer->state.gfx.dynamic.scissor.scissors + firstScissor,
|
||||
pScissors, scissorCount * sizeof(*pScissors));
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_SCISSOR;
|
||||
|
|
@ -412,7 +412,7 @@ void anv_CmdSetLineWidth(
|
|||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
cmd_buffer->state.dynamic.line_width = lineWidth;
|
||||
cmd_buffer->state.gfx.dynamic.line_width = lineWidth;
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_LINE_WIDTH;
|
||||
}
|
||||
|
||||
|
|
@ -424,9 +424,9 @@ void anv_CmdSetDepthBias(
|
|||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
cmd_buffer->state.dynamic.depth_bias.bias = depthBiasConstantFactor;
|
||||
cmd_buffer->state.dynamic.depth_bias.clamp = depthBiasClamp;
|
||||
cmd_buffer->state.dynamic.depth_bias.slope = depthBiasSlopeFactor;
|
||||
cmd_buffer->state.gfx.dynamic.depth_bias.bias = depthBiasConstantFactor;
|
||||
cmd_buffer->state.gfx.dynamic.depth_bias.clamp = depthBiasClamp;
|
||||
cmd_buffer->state.gfx.dynamic.depth_bias.slope = depthBiasSlopeFactor;
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_DEPTH_BIAS;
|
||||
}
|
||||
|
|
@ -437,7 +437,7 @@ void anv_CmdSetBlendConstants(
|
|||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
memcpy(cmd_buffer->state.dynamic.blend_constants,
|
||||
memcpy(cmd_buffer->state.gfx.dynamic.blend_constants,
|
||||
blendConstants, sizeof(float) * 4);
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_BLEND_CONSTANTS;
|
||||
|
|
@ -450,8 +450,8 @@ void anv_CmdSetDepthBounds(
|
|||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
cmd_buffer->state.dynamic.depth_bounds.min = minDepthBounds;
|
||||
cmd_buffer->state.dynamic.depth_bounds.max = maxDepthBounds;
|
||||
cmd_buffer->state.gfx.dynamic.depth_bounds.min = minDepthBounds;
|
||||
cmd_buffer->state.gfx.dynamic.depth_bounds.max = maxDepthBounds;
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS;
|
||||
}
|
||||
|
|
@ -464,9 +464,9 @@ void anv_CmdSetStencilCompareMask(
|
|||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (faceMask & VK_STENCIL_FACE_FRONT_BIT)
|
||||
cmd_buffer->state.dynamic.stencil_compare_mask.front = compareMask;
|
||||
cmd_buffer->state.gfx.dynamic.stencil_compare_mask.front = compareMask;
|
||||
if (faceMask & VK_STENCIL_FACE_BACK_BIT)
|
||||
cmd_buffer->state.dynamic.stencil_compare_mask.back = compareMask;
|
||||
cmd_buffer->state.gfx.dynamic.stencil_compare_mask.back = compareMask;
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_STENCIL_COMPARE_MASK;
|
||||
}
|
||||
|
|
@ -479,9 +479,9 @@ void anv_CmdSetStencilWriteMask(
|
|||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (faceMask & VK_STENCIL_FACE_FRONT_BIT)
|
||||
cmd_buffer->state.dynamic.stencil_write_mask.front = writeMask;
|
||||
cmd_buffer->state.gfx.dynamic.stencil_write_mask.front = writeMask;
|
||||
if (faceMask & VK_STENCIL_FACE_BACK_BIT)
|
||||
cmd_buffer->state.dynamic.stencil_write_mask.back = writeMask;
|
||||
cmd_buffer->state.gfx.dynamic.stencil_write_mask.back = writeMask;
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_STENCIL_WRITE_MASK;
|
||||
}
|
||||
|
|
@ -494,9 +494,9 @@ void anv_CmdSetStencilReference(
|
|||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (faceMask & VK_STENCIL_FACE_FRONT_BIT)
|
||||
cmd_buffer->state.dynamic.stencil_reference.front = reference;
|
||||
cmd_buffer->state.gfx.dynamic.stencil_reference.front = reference;
|
||||
if (faceMask & VK_STENCIL_FACE_BACK_BIT)
|
||||
cmd_buffer->state.dynamic.stencil_reference.back = reference;
|
||||
cmd_buffer->state.gfx.dynamic.stencil_reference.back = reference;
|
||||
|
||||
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_DYNAMIC_STENCIL_REFERENCE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1694,6 +1694,8 @@ struct anv_cmd_graphics_state {
|
|||
|
||||
anv_cmd_dirty_mask_t dirty;
|
||||
uint32_t vb_dirty;
|
||||
|
||||
struct anv_dynamic_state dynamic;
|
||||
};
|
||||
|
||||
/** State tracking for compute pipeline
|
||||
|
|
@ -1734,7 +1736,6 @@ struct anv_cmd_state {
|
|||
struct anv_push_constants * push_constants[MESA_SHADER_STAGES];
|
||||
struct anv_state binding_tables[MESA_SHADER_STAGES];
|
||||
struct anv_state samplers[MESA_SHADER_STAGES];
|
||||
struct anv_dynamic_state dynamic;
|
||||
|
||||
/**
|
||||
* Whether or not the gen8 PMA fix is enabled. We ensure that, at the top
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ clamp_int64(int64_t x, int64_t min, int64_t max)
|
|||
void
|
||||
gen7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
uint32_t count = cmd_buffer->state.dynamic.scissor.count;
|
||||
const VkRect2D *scissors = cmd_buffer->state.dynamic.scissor.scissors;
|
||||
uint32_t count = cmd_buffer->state.gfx.dynamic.scissor.count;
|
||||
const VkRect2D *scissors = cmd_buffer->state.gfx.dynamic.scissor.scissors;
|
||||
struct anv_state scissor_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, count * 8, 32);
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ void
|
|||
genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
struct anv_pipeline *pipeline = cmd_buffer->state.gfx.base.pipeline;
|
||||
struct anv_dynamic_state *d = &cmd_buffer->state.dynamic;
|
||||
struct anv_dynamic_state *d = &cmd_buffer->state.gfx.dynamic;
|
||||
|
||||
if (cmd_buffer->state.gfx.dirty & (ANV_CMD_DIRTY_PIPELINE |
|
||||
ANV_CMD_DIRTY_RENDER_TARGETS |
|
||||
|
|
|
|||
|
|
@ -36,8 +36,9 @@
|
|||
void
|
||||
gen8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
uint32_t count = cmd_buffer->state.dynamic.viewport.count;
|
||||
const VkViewport *viewports = cmd_buffer->state.dynamic.viewport.viewports;
|
||||
uint32_t count = cmd_buffer->state.gfx.dynamic.viewport.count;
|
||||
const VkViewport *viewports =
|
||||
cmd_buffer->state.gfx.dynamic.viewport.viewports;
|
||||
struct anv_state sf_clip_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, count * 64, 64);
|
||||
|
||||
|
|
@ -79,8 +80,9 @@ void
|
|||
gen8_cmd_buffer_emit_depth_viewport(struct anv_cmd_buffer *cmd_buffer,
|
||||
bool depth_clamp_enable)
|
||||
{
|
||||
uint32_t count = cmd_buffer->state.dynamic.viewport.count;
|
||||
const VkViewport *viewports = cmd_buffer->state.dynamic.viewport.viewports;
|
||||
uint32_t count = cmd_buffer->state.gfx.dynamic.viewport.count;
|
||||
const VkViewport *viewports =
|
||||
cmd_buffer->state.gfx.dynamic.viewport.viewports;
|
||||
struct anv_state cc_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, count * 8, 32);
|
||||
|
||||
|
|
@ -382,7 +384,7 @@ void
|
|||
genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
struct anv_pipeline *pipeline = cmd_buffer->state.gfx.base.pipeline;
|
||||
struct anv_dynamic_state *d = &cmd_buffer->state.dynamic;
|
||||
struct anv_dynamic_state *d = &cmd_buffer->state.gfx.dynamic;
|
||||
|
||||
if (cmd_buffer->state.gfx.dirty & (ANV_CMD_DIRTY_PIPELINE |
|
||||
ANV_CMD_DIRTY_DYNAMIC_LINE_WIDTH)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue