mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/ir: Properly handle function-local indexable temps when flattening control flow.
They have to be considered code rather than declarations, as required for instance by the SPIR-V backend.
This commit is contained in:
parent
6163d82485
commit
c5893288d9
Notes:
Alexandre Julliard
2024-03-07 23:22:05 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Conor McCarthy (@cmccarthy) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/662
@ -2041,12 +2041,19 @@ static enum vkd3d_result cf_flattener_iterate_instruction_array(struct cf_flatte
|
||||
flattener->location = instruction->location;
|
||||
|
||||
/* Declarations should occur before the first code block, which in hull shaders is marked by the first
|
||||
* phase instruction, and in all other shader types begins with the first label instruction. */
|
||||
if (!after_declarations_section && !vsir_instruction_is_dcl(instruction)
|
||||
&& instruction->handler_idx != VKD3DSIH_NOP)
|
||||
* phase instruction, and in all other shader types begins with the first label instruction.
|
||||
* Declaring an indexable temp with function scope is not considered a declaration,
|
||||
* because it needs to live inside a function. */
|
||||
if (!after_declarations_section && instruction->handler_idx != VKD3DSIH_NOP)
|
||||
{
|
||||
after_declarations_section = true;
|
||||
cf_flattener_emit_label(flattener, cf_flattener_alloc_block_id(flattener));
|
||||
bool is_function_indexable = instruction->handler_idx == VKD3DSIH_DCL_INDEXABLE_TEMP
|
||||
&& instruction->declaration.indexable_temp.has_function_scope;
|
||||
|
||||
if (!vsir_instruction_is_dcl(instruction) || is_function_indexable)
|
||||
{
|
||||
after_declarations_section = true;
|
||||
cf_flattener_emit_label(flattener, cf_flattener_alloc_block_id(flattener));
|
||||
}
|
||||
}
|
||||
|
||||
cf_info = flattener->control_flow_depth
|
||||
|
Loading…
x
Reference in New Issue
Block a user