mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/spirv: Emit a vector bitcast if necessary in spirv_compiler_emit_load_ssa_reg().
This commit is contained in:
committed by
Alexandre Julliard
parent
ebec0aa434
commit
95e4222cc6
Notes:
Alexandre Julliard
2024-02-01 23:07:26 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/601
@@ -3884,9 +3884,10 @@ static uint32_t spirv_compiler_emit_load_ssa_reg(struct spirv_compiler *compiler
|
|||||||
}
|
}
|
||||||
assert(vkd3d_swizzle_is_scalar(swizzle, reg));
|
assert(vkd3d_swizzle_is_scalar(swizzle, reg));
|
||||||
|
|
||||||
|
reg_component_type = vkd3d_component_type_from_data_type(ssa->data_type);
|
||||||
|
|
||||||
if (reg->dimension == VSIR_DIMENSION_SCALAR)
|
if (reg->dimension == VSIR_DIMENSION_SCALAR)
|
||||||
{
|
{
|
||||||
reg_component_type = vkd3d_component_type_from_data_type(ssa->data_type);
|
|
||||||
if (component_type != reg_component_type)
|
if (component_type != reg_component_type)
|
||||||
{
|
{
|
||||||
type_id = vkd3d_spirv_get_type_id(builder, component_type, 1);
|
type_id = vkd3d_spirv_get_type_id(builder, component_type, 1);
|
||||||
@@ -3896,6 +3897,14 @@ static uint32_t spirv_compiler_emit_load_ssa_reg(struct spirv_compiler *compiler
|
|||||||
return val_id;
|
return val_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (component_type != reg_component_type)
|
||||||
|
{
|
||||||
|
/* Required for resource loads with sampled type int, because DXIL has no signedness.
|
||||||
|
* Only 128-bit vector sizes are used. */
|
||||||
|
type_id = vkd3d_spirv_get_type_id(builder, component_type, VKD3D_VEC4_SIZE);
|
||||||
|
val_id = vkd3d_spirv_build_op_bitcast(builder, type_id, val_id);
|
||||||
|
}
|
||||||
|
|
||||||
type_id = vkd3d_spirv_get_type_id(builder, component_type, 1);
|
type_id = vkd3d_spirv_get_type_id(builder, component_type, 1);
|
||||||
component_idx = vsir_swizzle_get_component(swizzle, 0);
|
component_idx = vsir_swizzle_get_component(swizzle, 0);
|
||||||
return vkd3d_spirv_build_op_composite_extract1(builder, type_id, val_id, component_idx);
|
return vkd3d_spirv_build_op_composite_extract1(builder, type_id, val_id, component_idx);
|
||||||
|
@@ -48,7 +48,7 @@ float4 main() : sv_target
|
|||||||
}
|
}
|
||||||
|
|
||||||
[test]
|
[test]
|
||||||
todo(sm>=6) draw quad
|
draw quad
|
||||||
probe all rgba (0.8, -3.0, 4294967295.0, 123.0)
|
probe all rgba (0.8, -3.0, 4294967295.0, 123.0)
|
||||||
|
|
||||||
% lowercase 'texture2D'
|
% lowercase 'texture2D'
|
||||||
|
Reference in New Issue
Block a user