mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
libs/vkd3d-shader: Fix write mask for vThreadIDInGroupFlattened.
This commit is contained in:
@@ -1890,6 +1890,7 @@ static void vkd3d_dxbc_compiler_emit_store_reg(struct vkd3d_dxbc_compiler *compi
|
|||||||
uint32_t reg_id;
|
uint32_t reg_id;
|
||||||
|
|
||||||
assert(reg->type != VKD3DSPR_IMMCONST);
|
assert(reg->type != VKD3DSPR_IMMCONST);
|
||||||
|
assert(write_mask);
|
||||||
|
|
||||||
component_count = vkd3d_write_mask_component_count(write_mask);
|
component_count = vkd3d_write_mask_component_count(write_mask);
|
||||||
|
|
||||||
@@ -2045,21 +2046,18 @@ static uint32_t vkd3d_dxbc_compiler_emit_input(struct vkd3d_dxbc_compiler *compi
|
|||||||
SpvStorageClass storage_class;
|
SpvStorageClass storage_class;
|
||||||
struct rb_entry *entry = NULL;
|
struct rb_entry *entry = NULL;
|
||||||
bool use_private_var = false;
|
bool use_private_var = false;
|
||||||
|
DWORD write_mask;
|
||||||
|
|
||||||
builtin = vkd3d_get_spirv_builtin(dst->reg.type, sysval);
|
builtin = vkd3d_get_spirv_builtin(dst->reg.type, sysval);
|
||||||
|
|
||||||
/* vThreadIDInGroupFlattened is declared with no write mask in shader
|
/* vThreadIDInGroupFlattened is declared with no write mask in shader
|
||||||
* bytecode generated by fxc. */
|
* bytecode generated by fxc. */
|
||||||
if (!dst->write_mask && dst->reg.type == VKD3DSPR_LOCALTHREADINDEX)
|
write_mask = dst->write_mask;
|
||||||
{
|
if (!write_mask && dst->reg.type == VKD3DSPR_LOCALTHREADINDEX)
|
||||||
component_idx = 0;
|
write_mask = VKD3DSP_WRITEMASK_0;
|
||||||
component_count = 1;
|
|
||||||
}
|
component_idx = vkd3d_write_mask_get_component_idx(write_mask);
|
||||||
else
|
component_count = vkd3d_write_mask_component_count(write_mask);
|
||||||
{
|
|
||||||
component_idx = vkd3d_write_mask_get_component_idx(dst->write_mask);
|
|
||||||
component_count = vkd3d_write_mask_component_count(dst->write_mask);
|
|
||||||
}
|
|
||||||
if (builtin)
|
if (builtin)
|
||||||
{
|
{
|
||||||
component_type = builtin->component_type;
|
component_type = builtin->component_type;
|
||||||
@@ -2105,7 +2103,7 @@ static uint32_t vkd3d_dxbc_compiler_emit_input(struct vkd3d_dxbc_compiler *compi
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (val_id && input_component_count != component_count)
|
if (val_id && input_component_count != component_count)
|
||||||
val_id = vkd3d_dxbc_compiler_emit_swizzle(compiler, val_id, VKD3DSP_NOSWIZZLE, dst->write_mask);
|
val_id = vkd3d_dxbc_compiler_emit_swizzle(compiler, val_id, VKD3DSP_NOSWIZZLE, write_mask);
|
||||||
|
|
||||||
vkd3d_symbol_make_register(®_symbol, &dst->reg);
|
vkd3d_symbol_make_register(®_symbol, &dst->reg);
|
||||||
|
|
||||||
@@ -2131,7 +2129,7 @@ static uint32_t vkd3d_dxbc_compiler_emit_input(struct vkd3d_dxbc_compiler *compi
|
|||||||
if (use_private_var)
|
if (use_private_var)
|
||||||
{
|
{
|
||||||
assert(val_id);
|
assert(val_id);
|
||||||
vkd3d_dxbc_compiler_emit_store_reg(compiler, &dst->reg, dst->write_mask, val_id);
|
vkd3d_dxbc_compiler_emit_store_reg(compiler, &dst->reg, write_mask, val_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return input_id;
|
return input_id;
|
||||||
|
|||||||
Reference in New Issue
Block a user