mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/ir: Pass a uint32_t swizzle to vkd3d_swizzle_get_component().
This commit is contained in:
committed by
Alexandre Julliard
parent
4ff389854c
commit
8a1de71fb1
Notes:
Alexandre Julliard
2023-12-14 23:32:16 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/525
@@ -3595,17 +3595,17 @@ static bool vkd3d_swizzle_is_equal(unsigned int dst_write_mask,
|
||||
return vkd3d_compact_swizzle(VKD3D_SHADER_NO_SWIZZLE, dst_write_mask) == vkd3d_compact_swizzle(swizzle, write_mask);
|
||||
}
|
||||
|
||||
static bool vkd3d_swizzle_is_scalar(unsigned int swizzle)
|
||||
static bool vkd3d_swizzle_is_scalar(uint32_t swizzle)
|
||||
{
|
||||
unsigned int component_idx = vkd3d_swizzle_get_component(swizzle, 0);
|
||||
return vkd3d_swizzle_get_component(swizzle, 1) == component_idx
|
||||
&& vkd3d_swizzle_get_component(swizzle, 2) == component_idx
|
||||
&& vkd3d_swizzle_get_component(swizzle, 3) == component_idx;
|
||||
unsigned int component_idx = vsir_swizzle_get_component(swizzle, 0);
|
||||
return vsir_swizzle_get_component(swizzle, 1) == component_idx
|
||||
&& vsir_swizzle_get_component(swizzle, 2) == component_idx
|
||||
&& vsir_swizzle_get_component(swizzle, 3) == component_idx;
|
||||
}
|
||||
|
||||
static uint32_t spirv_compiler_emit_swizzle(struct spirv_compiler *compiler,
|
||||
uint32_t val_id, uint32_t val_write_mask, enum vkd3d_shader_component_type component_type,
|
||||
unsigned int swizzle, uint32_t write_mask)
|
||||
uint32_t swizzle, uint32_t write_mask)
|
||||
{
|
||||
unsigned int i, component_idx, component_count, val_component_count;
|
||||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||
@@ -3623,7 +3623,7 @@ static uint32_t spirv_compiler_emit_swizzle(struct spirv_compiler *compiler,
|
||||
if (component_count == 1)
|
||||
{
|
||||
component_idx = vsir_write_mask_get_component_idx(write_mask);
|
||||
component_idx = vkd3d_swizzle_get_component(swizzle, component_idx);
|
||||
component_idx = vsir_swizzle_get_component(swizzle, component_idx);
|
||||
component_idx -= vsir_write_mask_get_component_idx(val_write_mask);
|
||||
return vkd3d_spirv_build_op_composite_extract1(builder, type_id, val_id, component_idx);
|
||||
}
|
||||
@@ -3634,7 +3634,7 @@ static uint32_t spirv_compiler_emit_swizzle(struct spirv_compiler *compiler,
|
||||
{
|
||||
if (write_mask & (VKD3DSP_WRITEMASK_0 << i))
|
||||
{
|
||||
assert(VKD3DSP_WRITEMASK_0 << vkd3d_swizzle_get_component(swizzle, i) == val_write_mask);
|
||||
assert(VKD3DSP_WRITEMASK_0 << vsir_swizzle_get_component(swizzle, i) == val_write_mask);
|
||||
components[component_idx++] = val_id;
|
||||
}
|
||||
}
|
||||
@@ -3644,14 +3644,14 @@ static uint32_t spirv_compiler_emit_swizzle(struct spirv_compiler *compiler,
|
||||
for (i = 0, component_idx = 0; i < VKD3D_VEC4_SIZE; ++i)
|
||||
{
|
||||
if (write_mask & (VKD3DSP_WRITEMASK_0 << i))
|
||||
components[component_idx++] = vkd3d_swizzle_get_component(swizzle, i);
|
||||
components[component_idx++] = vsir_swizzle_get_component(swizzle, i);
|
||||
}
|
||||
return vkd3d_spirv_build_op_vector_shuffle(builder,
|
||||
type_id, val_id, val_id, components, component_count);
|
||||
}
|
||||
|
||||
static uint32_t spirv_compiler_emit_vector_shuffle(struct spirv_compiler *compiler,
|
||||
uint32_t vector1_id, uint32_t vector2_id, unsigned int swizzle, unsigned int write_mask,
|
||||
uint32_t vector1_id, uint32_t vector2_id, uint32_t swizzle, uint32_t write_mask,
|
||||
enum vkd3d_shader_component_type component_type, unsigned int component_count)
|
||||
{
|
||||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||
@@ -3664,9 +3664,9 @@ static uint32_t spirv_compiler_emit_vector_shuffle(struct spirv_compiler *compil
|
||||
for (i = 0; i < component_count; ++i)
|
||||
{
|
||||
if (write_mask & (VKD3DSP_WRITEMASK_0 << i))
|
||||
components[i] = vkd3d_swizzle_get_component(swizzle, i);
|
||||
components[i] = vsir_swizzle_get_component(swizzle, i);
|
||||
else
|
||||
components[i] = VKD3D_VEC4_SIZE + vkd3d_swizzle_get_component(swizzle, i);
|
||||
components[i] = VKD3D_VEC4_SIZE + vsir_swizzle_get_component(swizzle, i);
|
||||
}
|
||||
|
||||
type_id = vkd3d_spirv_get_type_id(builder, component_type, component_count);
|
||||
@@ -3675,7 +3675,7 @@ static uint32_t spirv_compiler_emit_vector_shuffle(struct spirv_compiler *compil
|
||||
}
|
||||
|
||||
static uint32_t spirv_compiler_emit_load_constant(struct spirv_compiler *compiler,
|
||||
const struct vkd3d_shader_register *reg, DWORD swizzle, uint32_t write_mask)
|
||||
const struct vkd3d_shader_register *reg, uint32_t swizzle, uint32_t write_mask)
|
||||
{
|
||||
unsigned int component_count = vsir_write_mask_component_count(write_mask);
|
||||
uint32_t values[VKD3D_VEC4_SIZE] = {0};
|
||||
@@ -3693,7 +3693,7 @@ static uint32_t spirv_compiler_emit_load_constant(struct spirv_compiler *compile
|
||||
for (i = 0, j = 0; i < VKD3D_VEC4_SIZE; ++i)
|
||||
{
|
||||
if (write_mask & (VKD3DSP_WRITEMASK_0 << i))
|
||||
values[j++] = reg->u.immconst_uint[vkd3d_swizzle_get_component(swizzle, i)];
|
||||
values[j++] = reg->u.immconst_uint[vsir_swizzle_get_component(swizzle, i)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3742,7 +3742,7 @@ static uint32_t spirv_compiler_emit_load_undef(struct spirv_compiler *compiler,
|
||||
}
|
||||
|
||||
static uint32_t spirv_compiler_emit_load_scalar(struct spirv_compiler *compiler,
|
||||
const struct vkd3d_shader_register *reg, DWORD swizzle, uint32_t write_mask,
|
||||
const struct vkd3d_shader_register *reg, uint32_t swizzle, uint32_t write_mask,
|
||||
const struct vkd3d_shader_register_info *reg_info)
|
||||
{
|
||||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||
@@ -3755,7 +3755,7 @@ static uint32_t spirv_compiler_emit_load_scalar(struct spirv_compiler *compiler,
|
||||
assert(vsir_write_mask_component_count(write_mask) == 1);
|
||||
|
||||
component_idx = vsir_write_mask_get_component_idx(write_mask);
|
||||
component_idx = vkd3d_swizzle_get_component(swizzle, component_idx);
|
||||
component_idx = vsir_swizzle_get_component(swizzle, component_idx);
|
||||
skipped_component_mask = ~reg_info->write_mask & ((VKD3DSP_WRITEMASK_0 << component_idx) - 1);
|
||||
if (skipped_component_mask)
|
||||
component_idx -= vsir_write_mask_component_count(skipped_component_mask);
|
||||
@@ -3871,7 +3871,7 @@ static void spirv_compiler_set_ssa_register_info(const struct spirv_compiler *co
|
||||
|
||||
static uint32_t spirv_compiler_emit_load_ssa_reg(struct spirv_compiler *compiler,
|
||||
const struct vkd3d_shader_register *reg, enum vkd3d_shader_component_type component_type,
|
||||
unsigned int swizzle)
|
||||
uint32_t swizzle)
|
||||
{
|
||||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||
enum vkd3d_shader_component_type reg_component_type;
|
||||
@@ -3897,7 +3897,7 @@ static uint32_t spirv_compiler_emit_load_ssa_reg(struct spirv_compiler *compiler
|
||||
}
|
||||
|
||||
type_id = vkd3d_spirv_get_type_id(builder, component_type, 1);
|
||||
component_idx = vkd3d_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);
|
||||
}
|
||||
|
||||
@@ -4233,7 +4233,7 @@ static void spirv_compiler_emit_store_dst_components(struct spirv_compiler *comp
|
||||
|
||||
static void spirv_compiler_emit_store_dst_scalar(struct spirv_compiler *compiler,
|
||||
const struct vkd3d_shader_dst_param *dst, uint32_t val_id,
|
||||
enum vkd3d_shader_component_type component_type, DWORD swizzle)
|
||||
enum vkd3d_shader_component_type component_type, uint32_t swizzle)
|
||||
{
|
||||
unsigned int component_count = vsir_write_mask_component_count(dst->write_mask);
|
||||
uint32_t component_ids[VKD3D_VEC4_SIZE];
|
||||
@@ -4242,7 +4242,7 @@ static void spirv_compiler_emit_store_dst_scalar(struct spirv_compiler *compiler
|
||||
component_idx = vsir_write_mask_get_component_idx(dst->write_mask);
|
||||
for (i = 0; i < component_count; ++i)
|
||||
{
|
||||
if (vkd3d_swizzle_get_component(swizzle, component_idx + i))
|
||||
if (vsir_swizzle_get_component(swizzle, component_idx + i))
|
||||
ERR("Invalid swizzle %#x for scalar value, write mask %#x.\n", swizzle, dst->write_mask);
|
||||
|
||||
component_ids[i] = val_id;
|
||||
@@ -6940,7 +6940,7 @@ static void spirv_compiler_emit_mov(struct spirv_compiler *compiler,
|
||||
for (i = 0; i < ARRAY_SIZE(components); ++i)
|
||||
{
|
||||
if (dst->write_mask & (VKD3DSP_WRITEMASK_0 << i))
|
||||
components[i] = VKD3D_VEC4_SIZE + vkd3d_swizzle_get_component(src->swizzle, i);
|
||||
components[i] = VKD3D_VEC4_SIZE + vsir_swizzle_get_component(src->swizzle, i);
|
||||
else
|
||||
components[i] = i;
|
||||
}
|
||||
@@ -8414,7 +8414,7 @@ static void spirv_compiler_emit_gather4(struct spirv_compiler *compiler,
|
||||
}
|
||||
else
|
||||
{
|
||||
component_idx = vkd3d_swizzle_get_component(sampler->swizzle, 0);
|
||||
component_idx = vsir_swizzle_get_component(sampler->swizzle, 0);
|
||||
/* Nvidia driver requires signed integer type. */
|
||||
component_id = spirv_compiler_get_constant(compiler,
|
||||
VKD3D_SHADER_COMPONENT_INT, 1, &component_idx);
|
||||
@@ -8492,7 +8492,7 @@ static void spirv_compiler_emit_ld_raw_structured_srv_uav(struct spirv_compiler
|
||||
if (!(dst->write_mask & (VKD3DSP_WRITEMASK_0 << i)))
|
||||
continue;
|
||||
|
||||
component_idx = vkd3d_swizzle_get_component(resource->swizzle, i);
|
||||
component_idx = vsir_swizzle_get_component(resource->swizzle, i);
|
||||
coordinate_id = base_coordinate_id;
|
||||
if (component_idx)
|
||||
coordinate_id = vkd3d_spirv_build_op_iadd(builder, type_id,
|
||||
@@ -8524,7 +8524,7 @@ static void spirv_compiler_emit_ld_raw_structured_srv_uav(struct spirv_compiler
|
||||
if (!(dst->write_mask & (VKD3DSP_WRITEMASK_0 << i)))
|
||||
continue;
|
||||
|
||||
component_idx = vkd3d_swizzle_get_component(resource->swizzle, i);
|
||||
component_idx = vsir_swizzle_get_component(resource->swizzle, i);
|
||||
coordinate_id = base_coordinate_id;
|
||||
if (component_idx)
|
||||
coordinate_id = vkd3d_spirv_build_op_iadd(builder, type_id,
|
||||
@@ -8568,7 +8568,7 @@ static void spirv_compiler_emit_ld_tgsm(struct spirv_compiler *compiler,
|
||||
if (!(dst->write_mask & (VKD3DSP_WRITEMASK_0 << i)))
|
||||
continue;
|
||||
|
||||
component_idx = vkd3d_swizzle_get_component(resource->swizzle, i);
|
||||
component_idx = vsir_swizzle_get_component(resource->swizzle, i);
|
||||
coordinate_id = base_coordinate_id;
|
||||
if (component_idx)
|
||||
coordinate_id = vkd3d_spirv_build_op_iadd(builder, type_id,
|
||||
|
Reference in New Issue
Block a user