[PATCH vkd3d 1/6] vkd3d-shader: Don't fetch output variable id before writing output info.
Henri Verbeet
hverbeet at codeweavers.com
Thu Oct 24 12:28:12 CDT 2019
From: Philip Rebohle <philip.rebohle at tu-dortmund.de>
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 at tu-dortmund.de>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
This supersedes patch 171406.
libs/vkd3d-shader/spirv.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index 4b93e01..0fdfdcd 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -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, ®_symbol);
}
}
- else if ((entry = rb_get(&compiler->symbol_table, ®_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, ®_symbol)))
var_id = RB_ENTRY_VALUE(entry, const struct vkd3d_symbol, entry)->id;
else if (!use_private_variable)
var_id = id;
--
2.11.0
More information about the wine-devel
mailing list