mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/spirv: Shift the private variable destination mask instead of the source mask.
Otherwise if the input is located above position 0 in the private array it will be swizzled incorrectly, e.g. a.yz instead of a.xy in test_domain_shader_inputs(). Based on a vkd3d-proton patch by Hans-Kristian Arntzen. Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
committed by
Alexandre Julliard
parent
5357ab78b9
commit
dbd7e18364
@ -4672,8 +4672,8 @@ static uint32_t vkd3d_dxbc_compiler_emit_input(struct vkd3d_dxbc_compiler *compi
|
|||||||
}
|
}
|
||||||
|
|
||||||
val_id = vkd3d_dxbc_compiler_emit_swizzle(compiler, val_id,
|
val_id = vkd3d_dxbc_compiler_emit_swizzle(compiler, val_id,
|
||||||
vkd3d_write_mask_from_component_count(input_component_count) << component_idx,
|
vkd3d_write_mask_from_component_count(input_component_count),
|
||||||
VKD3D_SHADER_COMPONENT_FLOAT, VKD3D_SHADER_NO_SWIZZLE, dst->write_mask);
|
VKD3D_SHADER_COMPONENT_FLOAT, VKD3D_SHADER_NO_SWIZZLE, dst->write_mask >> component_idx);
|
||||||
|
|
||||||
vkd3d_dxbc_compiler_emit_store_reg(compiler, &dst_reg, dst->write_mask, val_id);
|
vkd3d_dxbc_compiler_emit_store_reg(compiler, &dst_reg, dst->write_mask, val_id);
|
||||||
}
|
}
|
||||||
|
@ -29506,7 +29506,6 @@ static void test_domain_shader_inputs(void)
|
|||||||
{1.0f, 2.0f, 0.0f, 0.5f, 2.5f, 8.0f, 2.0f, 1.0f},
|
{1.0f, 2.0f, 0.0f, 0.5f, 2.5f, 8.0f, 2.0f, 1.0f},
|
||||||
{1.0f, 2.0f, 1.0f, 0.5f, 2.5f, 8.0f, 2.0f, 1.0f},
|
{1.0f, 2.0f, 1.0f, 0.5f, 2.5f, 8.0f, 2.0f, 1.0f},
|
||||||
};
|
};
|
||||||
static const unsigned int is_todo[] = {0x00110000, 0x00110000, 0x00110000, 0x00110000};
|
|
||||||
static const unsigned int stride = sizeof(*reference);
|
static const unsigned int stride = sizeof(*reference);
|
||||||
|
|
||||||
memset(&desc, 0, sizeof(desc));
|
memset(&desc, 0, sizeof(desc));
|
||||||
@ -29556,9 +29555,8 @@ static void test_domain_shader_inputs(void)
|
|||||||
const float *elems = get_readback_data(&rb, y, 0, 0, stride);
|
const float *elems = get_readback_data(&rb, y, 0, 0, stride);
|
||||||
for (x = 0; x < ARRAY_SIZE(*reference); ++x)
|
for (x = 0; x < ARRAY_SIZE(*reference); ++x)
|
||||||
{
|
{
|
||||||
todo_if(is_todo[y] & (1u << (x * 4)))
|
ok(compare_float(reference[y][x], elems[x], 0),
|
||||||
ok(compare_float(reference[y][x], elems[x], 0),
|
"Got unexpected value %.8e for [%u][%u], expected %.8e.\n", elems[x], y, x, reference[y][x]);
|
||||||
"Got unexpected value %.8e for [%u][%u], expected %.8e.\n", elems[x], y, x, reference[y][x]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
release_resource_readback(&rb);
|
release_resource_readback(&rb);
|
||||||
|
Reference in New Issue
Block a user