lavapipe: handle some mesh shader stage differences.

certain state info is no long required if you using mesh/task in the
pipeline.

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23066>
This commit is contained in:
Dave Airlie
2023-05-17 12:09:05 +10:00
parent 8f8c55fd38
commit ccb16259cb
2 changed files with 11 additions and 10 deletions
+8 -6
View File
@@ -1024,12 +1024,14 @@ static void handle_graphics_pipeline(struct vk_cmd_queue_entry *cmd,
}
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_VI_BINDING_STRIDES)) {
u_foreach_bit(b, ps->vi->bindings_valid)
state->vb[b].stride = ps->vi->bindings[b].stride;
state->vb_dirty = true;
if (ps->vi) {
u_foreach_bit(b, ps->vi->bindings_valid)
state->vb[b].stride = ps->vi->bindings[b].stride;
state->vb_dirty = true;
}
}
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_VI)) {
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_VI) && ps->vi) {
u_foreach_bit(a, ps->vi->attributes_valid) {
uint32_t b = ps->vi->attributes[a].binding;
state->velem.velems[a].src_offset = ps->vi->attributes[a].offset;
@@ -1056,11 +1058,11 @@ static void handle_graphics_pipeline(struct vk_cmd_queue_entry *cmd,
state->ve_dirty = true;
}
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_IA_PRIMITIVE_TOPOLOGY)) {
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_IA_PRIMITIVE_TOPOLOGY) && ps->ia) {
state->info.mode = vk_conv_topology(ps->ia->primitive_topology);
state->rs_dirty = true;
}
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE))
if (!BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE) && ps->ia)
state->info.primitive_restart = ps->ia->primitive_restart_enable;
if (ps->ts && !BITSET_TEST(ps->dynamic, MESA_VK_DYNAMIC_TS_PATCH_CONTROL_POINTS)) {
@@ -860,10 +860,9 @@ lvp_graphics_pipeline_init(struct lvp_pipeline *pipeline,
if (result != VK_SUCCESS)
return result;
assert(pipeline->library || pipeline->stages == (VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT |
VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT |
VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT |
VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT));
assert(pipeline->library || pipeline->stages & (VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT |
VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT |
VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT));
pipeline->device = device;