vkd3d-shader: Don't fetch output variable id before writing output info.

Otherwise, if a private variable is used for the given output,
vkd3d_dxbc_compiler_emit_store_shader_output will write to the
private variable again instead of the actual output, and some
outputs may never be emitted. This is common in hull shaders.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Philip Rebohle 2019-10-24 20:58:12 +03:30 committed by Alexandre Julliard
parent fd4488c3ab
commit 04ec461fb4

View File

@ -4340,13 +4340,8 @@ static void vkd3d_dxbc_compiler_emit_output(struct vkd3d_dxbc_compiler *compiler
{
use_private_variable = true;
write_mask = VKD3DSP_WRITEMASK_ALL;
entry = rb_get(&compiler->symbol_table, &reg_symbol);
}
}
else if ((entry = rb_get(&compiler->symbol_table, &reg_symbol)))
{
id = RB_ENTRY_VALUE(entry, const struct vkd3d_symbol, entry)->id;
}
else
{
if (builtin)
@ -4393,7 +4388,7 @@ static void vkd3d_dxbc_compiler_emit_output(struct vkd3d_dxbc_compiler *compiler
if (use_private_variable)
storage_class = SpvStorageClassPrivate;
if (entry)
if ((entry = rb_get(&compiler->symbol_table, &reg_symbol)))
var_id = RB_ENTRY_VALUE(entry, const struct vkd3d_symbol, entry)->id;
else if (!use_private_variable)
var_id = id;