mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-10 16:10:26 +01:00
mesa/glspirv: pick off the only entry point we need
This is the same we do for vulkan drivers This is needed to pass the following CTS test: KHR-GL45.gl_spirv.spirv_modules_shader_binary_multiple_shader_objects_test Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
32e1d4c34b
commit
40947d4744
1 changed files with 15 additions and 0 deletions
|
|
@ -252,8 +252,23 @@ _mesa_spirv_to_nir(struct gl_context *ctx,
|
|||
prog->Name);
|
||||
nir_validate_shader(nir);
|
||||
|
||||
/* We have to lower away local constant initializers right before we
|
||||
* inline functions. That way they get properly initialized at the top
|
||||
* of the function and not at the top of its caller.
|
||||
*/
|
||||
NIR_PASS_V(nir, nir_lower_constant_initializers, nir_var_local);
|
||||
NIR_PASS_V(nir, nir_lower_returns);
|
||||
NIR_PASS_V(nir, nir_inline_functions);
|
||||
NIR_PASS_V(nir, nir_copy_prop);
|
||||
|
||||
/* Pick off the single entrypoint that we want */
|
||||
foreach_list_typed_safe(nir_function, func, node, &nir->functions) {
|
||||
if (func != entry_point)
|
||||
exec_node_remove(&func->node);
|
||||
}
|
||||
assert(exec_list_length(&nir->functions) == 1);
|
||||
entry_point->name = ralloc_strdup(entry_point, "main");
|
||||
|
||||
/* Split member structs. We do this before lower_io_to_temporaries so that
|
||||
* it doesn't lower system values to temporaries by accident.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue