mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/spirv: Handle all possible destination modifiers.
Historically the SPIR-V backend was only fed by the TPF parser, which only generates _sat destination modifiers. Now it is fed by the D3DBC parser too (among others), so it mustn't assert on other modifiers. Modifier _pp can be trivially ignored. Modifier _centroid would probably require some handling, but I'm not immediately sure of what should happen and it doesn't look like a very urgent thing anyway, so I'm degrading the assertion to FIXME().
This commit is contained in:
parent
fc4c9b7a95
commit
ae27fded1a
Notes:
Henri Verbeet
2024-10-02 22:39:31 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1141
@ -4544,9 +4544,24 @@ static uint32_t spirv_compiler_emit_sat(struct spirv_compiler *compiler,
|
||||
static void spirv_compiler_emit_store_dst(struct spirv_compiler *compiler,
|
||||
const struct vkd3d_shader_dst_param *dst, uint32_t val_id)
|
||||
{
|
||||
VKD3D_ASSERT(!(dst->modifiers & ~VKD3DSPDM_SATURATE));
|
||||
if (dst->modifiers & VKD3DSPDM_SATURATE)
|
||||
uint32_t modifiers = dst->modifiers;
|
||||
|
||||
/* It is always legitimate to ignore _pp. */
|
||||
modifiers &= ~VKD3DSPDM_PARTIALPRECISION;
|
||||
|
||||
if (modifiers & VKD3DSPDM_SATURATE)
|
||||
{
|
||||
val_id = spirv_compiler_emit_sat(compiler, &dst->reg, dst->write_mask, val_id);
|
||||
modifiers &= ~VKD3DSPDM_SATURATE;
|
||||
}
|
||||
|
||||
if (dst->modifiers & VKD3DSPDM_MSAMPCENTROID)
|
||||
{
|
||||
FIXME("Ignoring _centroid modifier.\n");
|
||||
modifiers &= ~VKD3DSPDM_MSAMPCENTROID;
|
||||
}
|
||||
|
||||
VKD3D_ASSERT(!modifiers);
|
||||
|
||||
spirv_compiler_emit_store_reg(compiler, &dst->reg, dst->write_mask, val_id);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user