[PATCH vkd3d 2/7] vkd3d-shader: Implement FTOD instruction.

Henri Verbeet hverbeet at gmail.com
Wed Aug 11 03:27:05 CDT 2021


On Wed, 11 Aug 2021 at 05:14, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
> +static void vkd3d_dxbc_compiler_emit_double_conversion(struct vkd3d_dxbc_compiler *compiler,
> +        const struct vkd3d_shader_instruction *instruction)
> +{
> +    struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
> +    const struct vkd3d_shader_dst_param *dst = instruction->dst;
> +    const struct vkd3d_shader_src_param *src = instruction->src;
> +    uint32_t src_id, val_id, type_id;
> +    SpvOp op;
> +
> +    switch (instruction->handler_idx)
> +    {
> +        case VKD3DSIH_FTOD: op = SpvOpFConvert; break;
> +        default:
> +            ERR("Unexpected instruction %#x.\n", instruction->handler_idx);
> +            return;
> +    }
> +
> +    src_id = vkd3d_dxbc_compiler_emit_load_src(compiler, src, dst->write_mask);
> +
> +    type_id = vkd3d_spirv_get_type_id(builder, vkd3d_component_type_from_data_type(dst->reg.data_type),
> +            vkd3d_write_mask_component_count(dst->write_mask));
> +
> +    val_id = vkd3d_spirv_build_op_trv(builder, &builder->function_stream, op, type_id, &src_id, 1);
> +
> +    vkd3d_dxbc_compiler_emit_store_dst(compiler, dst, val_id);
> +}
> +
This seems suspiciously similar to what
vkd3d_dxbc_compiler_emit_alu_instruction() does; any reason we can't
use that?



More information about the wine-devel mailing list