Mesa (master): zink: add push constant value to indicate whether the current draw is indexed
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Feb 16 01:00:33 UTC 2021
Module: Mesa
Branch: master
Commit: bf4fac51ee63ca3cb75a01fd5e18eddccf2d3fac
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf4fac51ee63ca3cb75a01fd5e18eddccf2d3fac
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Wed Aug 19 17:58:22 2020 -0400
zink: add push constant value to indicate whether the current draw is indexed
due to semantic differences between gl and vk variables, this is going to be
necessary for gl_BaseVertex
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8971>
---
src/gallium/drivers/zink/zink_draw.c | 8 +++++++-
src/gallium/drivers/zink/zink_program.c | 15 +++++++++------
src/gallium/drivers/zink/zink_program.h | 1 +
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index 96b45fbb0dd..26c4e93ae3e 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -707,9 +707,15 @@ zink_draw_vbo(struct pipe_context *pctx,
zink_bind_vertex_buffers(batch, ctx);
+ if (BITSET_TEST(ctx->gfx_stages[PIPE_SHADER_VERTEX]->nir->info.system_values_read, SYSTEM_VALUE_BASE_VERTEX)) {
+ unsigned draw_mode_is_indexed = dinfo->index_size > 0;
+ vkCmdPushConstants(batch->cmdbuf, gfx_program->layout, VK_SHADER_STAGE_VERTEX_BIT,
+ offsetof(struct zink_push_constant, draw_mode_is_indexed), sizeof(unsigned),
+ &draw_mode_is_indexed);
+ }
if (gfx_program->shaders[PIPE_SHADER_TESS_CTRL] && gfx_program->shaders[PIPE_SHADER_TESS_CTRL]->is_generated)
vkCmdPushConstants(batch->cmdbuf, gfx_program->layout, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
- 0, sizeof(float) * 6,
+ offsetof(struct zink_push_constant, default_inner_level), sizeof(float) * 6,
&ctx->tess_levels[0]);
zink_query_update_gs_states(ctx);
diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c
index f149d2dec6e..54eb4fae7ec 100644
--- a/src/gallium/drivers/zink/zink_program.c
+++ b/src/gallium/drivers/zink/zink_program.c
@@ -163,12 +163,15 @@ create_gfx_pipeline_layout(VkDevice dev, VkDescriptorSetLayout dsl)
plci.setLayoutCount = 1;
- VkPushConstantRange pcr = {};
- pcr.stageFlags = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
- pcr.offset = 0;
- pcr.size = sizeof(float) * 6;
- plci.pushConstantRangeCount = 1;
- plci.pPushConstantRanges = &pcr;
+ VkPushConstantRange pcr[2] = {};
+ pcr[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
+ pcr[0].offset = offsetof(struct zink_push_constant, draw_mode_is_indexed);
+ pcr[0].size = sizeof(unsigned);
+ pcr[1].stageFlags = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
+ pcr[1].offset = offsetof(struct zink_push_constant, default_inner_level);
+ pcr[1].size = sizeof(float) * 6;
+ plci.pushConstantRangeCount = 2;
+ plci.pPushConstantRanges = &pcr[0];
VkPipelineLayout layout;
if (vkCreatePipelineLayout(dev, &plci, NULL, &layout) != VK_SUCCESS) {
diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h
index 372ad7900d1..66479a120cb 100644
--- a/src/gallium/drivers/zink/zink_program.h
+++ b/src/gallium/drivers/zink/zink_program.h
@@ -41,6 +41,7 @@ struct hash_table;
struct set;
struct zink_push_constant {
+ unsigned draw_mode_is_indexed;
float default_inner_level[2];
float default_outer_level[4];
};
More information about the mesa-commit
mailing list