static void transform_srcreg(
    struct tgsi_to_rc * ttr,
    struct rc_src_register * dst,
    struct tgsi_full_src_register * src)
{
    unsigned i, j;

    dst->File = translate_register_file(src->Register.File);
    dst->Index = translate_register_index(ttr, src->Register.File, src->Register.Index);
    dst->RelAddr = src->Register.Indirect;
    dst->Swizzle = tgsi_util_get_full_src_register_swizzle(src, 0);
    dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 1) << 3;
    dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 2) << 6;
    dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 3) << 9;
    dst->Abs = src->Register.Absolute;
    dst->Negate = src->Register.Negate ? RC_MASK_XYZW : 0;

    if (src->Register.File == TGSI_FILE_IMMEDIATE) {
        for (i = 0; i < ttr->imms_to_swizzle_count; i++) {
            if (ttr->imms_to_swizzle[i].index == src->Register.Index) {
                dst->File = RC_FILE_TEMPORARY;
                dst->Index = 0;
                dst->Swizzle = 0;
                for (j = 0; j < 4; j++) {
                    dst->Swizzle |= GET_SWZ(ttr->imms_to_swizzle[i].swizzle,
                        tgsi_util_get_full_src_register_swizzle(src, j)) << (j * 3);
                }
                break;
            }
        }
    }
}
Пример #2
0
static void transform_dstreg(
    struct tgsi_to_rc * ttr,
    struct rc_dst_register * dst,
    struct tgsi_full_dst_register * src)
{
    dst->File = translate_register_file(src->DstRegister.File);
    dst->Index = translate_register_index(ttr, src->DstRegister.File, src->DstRegister.Index);
    dst->WriteMask = src->DstRegister.WriteMask;
    dst->RelAddr = src->DstRegister.Indirect;
}
static void transform_dstreg(
    struct tgsi_to_rc * ttr,
    struct rc_dst_register * dst,
    struct tgsi_full_dst_register * src)
{
    dst->File = translate_register_file(src->Register.File);
    dst->Index = translate_register_index(ttr, src->Register.File, src->Register.Index);
    dst->WriteMask = src->Register.WriteMask;

    if (src->Register.Indirect) {
        ttr->error = TRUE;
        fprintf(stderr, "r300: Relative addressing of destination operands "
                "is unsupported.\n");
    }
}
Пример #4
0
static void transform_srcreg(
    struct tgsi_to_rc * ttr,
    struct rc_src_register * dst,
    struct tgsi_full_src_register * src)
{
    dst->File = translate_register_file(src->SrcRegister.File);
    dst->Index = translate_register_index(ttr, src->SrcRegister.File, src->SrcRegister.Index);
    dst->RelAddr = src->SrcRegister.Indirect;
    dst->Swizzle = tgsi_util_get_full_src_register_swizzle(src, 0);
    dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 1) << 3;
    dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 2) << 6;
    dst->Swizzle |= tgsi_util_get_full_src_register_swizzle(src, 3) << 9;
    dst->Abs = src->SrcRegisterExtMod.Absolute;
    dst->Negate = src->SrcRegister.Negate ? RC_MASK_XYZW : 0;
}