-static void *
-create_transpose_frag_shader(struct vl_idct *idct)
-{
- struct ureg_program *shader;
-
- struct ureg_src block, tex, start;
-
- struct ureg_dst laddr[2], l[2], r[2], raddr[2];
- struct ureg_dst tmp, fragment;
-
- shader = ureg_create(TGSI_PROCESSOR_FRAGMENT);
- if (!shader)
- return NULL;
-
- block = ureg_DECL_fs_input(shader, TGSI_SEMANTIC_GENERIC, VS_O_BLOCK, TGSI_INTERPOLATE_LINEAR);
- tex = ureg_DECL_fs_input(shader, TGSI_SEMANTIC_GENERIC, VS_O_TEX, TGSI_INTERPOLATE_CONSTANT);
- start = ureg_DECL_fs_input(shader, TGSI_SEMANTIC_GENERIC, VS_O_START, TGSI_INTERPOLATE_CONSTANT);
-
- calc_addr(shader, laddr, block, ureg_imm1f(shader, 0.0f), false, false, BLOCK_WIDTH / 4);
- calc_addr(shader, raddr, tex, start, true, false, idct->buffer_height / 4);
- fetch_four(shader, l, laddr, ureg_DECL_sampler(shader, 0));
- fetch_four(shader, r, raddr, ureg_DECL_sampler(shader, 1));
-
- fragment = ureg_DECL_output(shader, TGSI_SEMANTIC_COLOR, 0);
-
- tmp = ureg_DECL_temporary(shader);
- matrix_mul(shader, ureg_writemask(tmp, TGSI_WRITEMASK_X), l, r);
- ureg_MUL(shader, fragment, ureg_src(tmp), ureg_imm1f(shader, STAGE2_SCALE));
-
- ureg_release_temporary(shader, tmp);
- ureg_release_temporary(shader, laddr[0]);
- ureg_release_temporary(shader, laddr[1]);
- ureg_release_temporary(shader, l[0]);
- ureg_release_temporary(shader, l[1]);
- ureg_release_temporary(shader, raddr[0]);
- ureg_release_temporary(shader, raddr[1]);
- ureg_release_temporary(shader, r[0]);
- ureg_release_temporary(shader, r[1]);
-
- ureg_END(shader);
-
- return ureg_create_shader_and_destroy(shader, idct->pipe);
-}
-