On Tue, 28 Sept 2021 at 07:39, Conor McCarthy cmccarthy@codeweavers.com wrote:
- /* The SPIR-V specification states, "The resulting value is undefined if Shift is greater than or
* equal to the bit width of the components of Base." D3D applies only the lowest 5 bits of the shift. */
- if (src[1].reg.type != VKD3DSPR_IMMCONST && (instruction->handler_idx == VKD3DSIH_ISHL
|| instruction->handler_idx == VKD3DSIH_ISHR || instruction->handler_idx == VKD3DSIH_USHR))
- {
uint32_t mask_id = vkd3d_dxbc_compiler_get_constant_vector(compiler, VKD3D_SHADER_COMPONENT_UINT,
vkd3d_write_mask_component_count(dst->write_mask), 0x1f);
src_ids[1] = vkd3d_spirv_build_op_and(builder, type_id, src_ids[1], mask_id);
- }
Is there any particular reason to avoid handling VKD3DSPR_IMMCONST shifts? I suppose immediate shifts are unlikely to be larger than 31, but it should also be easy to verify that.