Esempio n. 1
0
/* Convert info about VS output semantics into r300_shader_semantics. */
static void r300_shader_read_vs_outputs(
    struct tgsi_shader_info* info,
    struct r300_shader_semantics* vs_outputs)
{
    int i;
    unsigned index;

    r300_shader_semantics_reset(vs_outputs);

    for (i = 0; i < info->num_outputs; i++) {
        index = info->output_semantic_index[i];

        switch (info->output_semantic_name[i]) {
            case TGSI_SEMANTIC_POSITION:
                assert(index == 0);
                vs_outputs->pos = i;
                break;

            case TGSI_SEMANTIC_PSIZE:
                assert(index == 0);
                vs_outputs->psize = i;
                break;

            case TGSI_SEMANTIC_COLOR:
                assert(index < ATTR_COLOR_COUNT);
                vs_outputs->color[index] = i;
                break;

            case TGSI_SEMANTIC_BCOLOR:
                assert(index < ATTR_COLOR_COUNT);
                vs_outputs->bcolor[index] = i;
                break;

            case TGSI_SEMANTIC_GENERIC:
                assert(index < ATTR_GENERIC_COUNT);
                vs_outputs->generic[index] = i;
                break;

            case TGSI_SEMANTIC_FOG:
                assert(index == 0);
                vs_outputs->fog = i;
                break;

            case TGSI_SEMANTIC_EDGEFLAG:
                assert(index == 0);
                fprintf(stderr, "r300 VP: cannot handle edgeflag output\n");
                assert(0);
                break;
            default:
                assert(0);
        }
    }
}
Esempio n. 2
0
/* Convert info about FS input semantics to r300_shader_semantics. */
void r300_shader_read_fs_inputs(struct tgsi_shader_info* info,
                                struct r300_shader_semantics* fs_inputs)
{
    int i;
    unsigned index;

    r300_shader_semantics_reset(fs_inputs);

    for (i = 0; i < info->num_inputs; i++) {
        index = info->input_semantic_index[i];

        switch (info->input_semantic_name[i]) {
            case TGSI_SEMANTIC_COLOR:
                assert(index < ATTR_COLOR_COUNT);
                fs_inputs->color[index] = i;
                break;

            case TGSI_SEMANTIC_GENERIC:
                assert(index < ATTR_GENERIC_COUNT);
                fs_inputs->generic[index] = i;
                break;

            case TGSI_SEMANTIC_FOG:
                assert(index == 0);
                fs_inputs->fog = i;
                break;

            case TGSI_SEMANTIC_POSITION:
                assert(index == 0);
                fs_inputs->wpos = i;
                break;

            case TGSI_SEMANTIC_FACE:
                assert(index == 0);
                fs_inputs->face = i;
                break;

            default:
                fprintf(stderr, "r300: FP: Unknown input semantic: %i\n",
                        info->input_semantic_name[i]);
        }
    }
}
Esempio n. 3
0
/* Convert info about VS output semantics into r300_shader_semantics. */
static void r300_shader_read_vs_outputs(
    struct r300_context *r300,
    struct tgsi_shader_info* info,
    struct r300_shader_semantics* vs_outputs)
{
    int i;
    unsigned index;

    r300_shader_semantics_reset(vs_outputs);

    for (i = 0; i < info->num_outputs; i++) {
        index = info->output_semantic_index[i];

        switch (info->output_semantic_name[i]) {
        case TGSI_SEMANTIC_POSITION:
            assert(index == 0);
            vs_outputs->pos = i;
            break;

        case TGSI_SEMANTIC_PSIZE:
            assert(index == 0);
            vs_outputs->psize = i;
            break;

        case TGSI_SEMANTIC_COLOR:
            assert(index < ATTR_COLOR_COUNT);
            vs_outputs->color[index] = i;
            break;

        case TGSI_SEMANTIC_BCOLOR:
            assert(index < ATTR_COLOR_COUNT);
            vs_outputs->bcolor[index] = i;
            break;

        case TGSI_SEMANTIC_GENERIC:
            assert(index < ATTR_GENERIC_COUNT);
            vs_outputs->generic[index] = i;
            vs_outputs->num_generic++;
            break;

        case TGSI_SEMANTIC_FOG:
            assert(index == 0);
            vs_outputs->fog = i;
            break;

        case TGSI_SEMANTIC_EDGEFLAG:
            assert(index == 0);
            fprintf(stderr, "r300 VP: cannot handle edgeflag output.\n");
            break;

        case TGSI_SEMANTIC_CLIPVERTEX:
            assert(index == 0);
            /* Draw does clip vertex for us. */
            if (r300->screen->caps.has_tcl) {
                fprintf(stderr, "r300 VP: cannot handle clip vertex output.\n");
            }
            break;

        default:
            fprintf(stderr, "r300 VP: unknown vertex output semantic: %i.\n",
                    info->output_semantic_name[i]);
        }
    }

    /* WPOS is a straight copy of POSITION and it's always emitted. */
    vs_outputs->wpos = i;
}