Lines Matching refs:sx
310 translate_semantic_index(struct Shader_xlate *sx,
318 if (sx->clip_distance_mapping[0].d3d == operand->base.index[0].imm) {
319 idx = sx->clip_distance_mapping[0].tgsi;
321 assert(sx->clip_distance_mapping[1].d3d == operand->base.index[0].imm);
322 idx = sx->clip_distance_mapping[1].tgsi;
326 if (sx->cull_distance_mapping[0].d3d == operand->base.index[0].imm) {
327 idx = sx->cull_distance_mapping[0].tgsi;
329 assert(sx->cull_distance_mapping[1].d3d == operand->base.index[0].imm);
330 idx = sx->cull_distance_mapping[1].tgsi;
360 declare_vertices_in(struct Shader_xlate *sx,
366 if (sx->vertices_in) {
367 assert(sx->vertices_in == in);
369 sx->vertices_in = in;
422 dcl_base_output(struct Shader_xlate *sx,
433 sx->outputs[idx].reg[0] = reg;
434 sx->outputs[idx].reg[1] = reg;
435 sx->outputs[idx].reg[2] = reg;
436 sx->outputs[idx].reg[3] = reg;
443 sx->outputs[idx].reg[i] = reg;
449 dcl_base_input(struct Shader_xlate *sx,
459 if (sx->inputs[index].declared && !sx->inputs[index].overloaded) {
460 struct ureg_dst temp = ureg_DECL_temporary(sx->ureg);
463 ureg_writemask(temp, sx->inputs[index].writemask),
464 swizzle_reg(sx->inputs[index].reg, sx->inputs[index].writemask,
465 sx->inputs[index].siv_name));
468 sx->inputs[index].reg = ureg_src(temp);
469 sx->inputs[index].overloaded = TRUE;
470 sx->inputs[index].writemask |= writemask;
471 } else if (sx->inputs[index].overloaded) {
472 struct ureg_dst temp = ureg_dst(sx->inputs[index].reg);
475 sx->inputs[index].writemask |= writemask;
477 assert(!sx->inputs[index].declared);
479 sx->inputs[index].reg = dcl_reg;
480 sx->inputs[index].declared = TRUE;
481 sx->inputs[index].writemask = writemask;
482 sx->inputs[index].siv_name = siv_name;
487 dcl_vs_input(struct Shader_xlate *sx,
497 dcl_base_input(sx, ureg, dst, reg, dst->base.index[0].imm,
502 dcl_gs_input(struct Shader_xlate *sx,
509 declare_vertices_in(sx, dst->base.index[0].imm);
513 if (!sx->inputs[dst->base.index[1].imm].reg.File) {
519 dcl_base_input(sx, ureg, dst, reg, dst->base.index[1].imm,
526 sx->prim_id = ureg_DECL_system_value(ureg, TGSI_SEMANTIC_PRIMID, 0);
531 dcl_sgv_input(struct Shader_xlate *sx,
542 dcl_base_input(sx, ureg, dst, reg, dst->base.index[0].imm,
547 dcl_siv_input(struct Shader_xlate *sx,
556 declare_vertices_in(sx, dst->base.index[0].imm);
562 dcl_base_input(sx, ureg, dst, reg, dst->base.index[1].imm,
567 dcl_ps_input(struct Shader_xlate *sx,
581 dcl_base_input(sx, ureg, dst, reg, dst->base.index[0].imm,
586 dcl_ps_sgv_input(struct Shader_xlate *sx,
622 dcl_base_input(sx, ureg, dst, reg, dst->base.index[0].imm,
627 dcl_ps_siv_input(struct Shader_xlate *sx,
652 dcl_base_input(sx, ureg, dst, reg, dst->base.index[0].imm,
657 translate_relative_operand(struct Shader_xlate *sx,
666 reg = ureg_src(sx->temps[sx->temp_offset + operand->index[0].imm]);
670 reg = sx->prim_id;
676 reg = ureg_src(sx->temps[sx->indexable_temp_offsets[operand->index[0].imm] +
694 reg = ureg_src(ureg_DECL_temporary(sx->ureg));
699 reg = ureg_src(ureg_DECL_temporary(sx->ureg));
707 translate_operand(struct Shader_xlate *sx,
719 reg = sx->temps[sx->temp_offset + operand->index[0].imm];
728 reg = sx->outputs[operand->index[0].imm].reg[0];
734 reg = sx->outputs[operand->index[0].imm].reg[i];
741 translate_relative_operand(sx, &operand->index[0].rel);
743 reg = ureg_dst_indirect(sx->outputs[operand->index[0].imm].reg[0], addr);
750 reg = sx->output_depth;
756 reg = ureg_dst(sx->prim_id);
774 reg = ureg_DECL_temporary(sx->ureg);
781 translate_indexable_temp(struct Shader_xlate *sx,
788 sx->temps[sx->indexable_temp_offsets[operand->index[0].imm] +
793 ureg_src(sx->temps[
794 sx->indexable_temp_offsets[operand->index[0].imm]]),
795 translate_relative_operand(sx,
800 ureg_src(sx->temps[
802 sx->indexable_temp_offsets[operand->index[0].imm]]),
803 translate_relative_operand(sx,
810 reg = ureg_src(ureg_DECL_temporary(sx->ureg));
816 translate_dst_operand(struct Shader_xlate *sx,
836 reg = ureg_dst(translate_indexable_temp(sx, &operand->base));
840 reg = translate_operand(sx, &operand->base, writemask);
856 translate_src_operand(struct Shader_xlate *sx,
868 reg = sx->inputs[operand->base.index[0].imm].reg;
872 translate_relative_operand(sx, &operand->base.index[0].rel);
873 reg = ureg_src_indirect(sx->inputs[0].reg, tmp);
878 translate_relative_operand(sx, &operand->base.index[0].rel);
879 reg = ureg_src_indirect(sx->inputs[operand->base.index[0].imm].reg, tmp);
894 reg = sx->inputs[operand->base.index[1].imm].reg;
898 translate_relative_operand(sx, &operand->base.index[1].rel);
899 reg = ureg_src_indirect(sx->inputs[0].reg, tmp);
904 translate_relative_operand(sx, &operand->base.index[1].rel);
905 reg = ureg_src_indirect(sx->inputs[operand->base.index[1].imm].reg, tmp);
920 translate_relative_operand(sx, &operand->base.index[0].rel);
926 translate_relative_operand(sx, &operand->base.index[0].rel);
943 reg = translate_indexable_temp(sx, &operand->base);
949 reg = ureg_imm4f(sx->ureg,
956 reg = ureg_imm4i(sx->ureg,
963 reg = ureg_imm4u(sx->ureg,
971 reg = ureg_src(ureg_DECL_temporary(sx->ureg));
980 reg = sx->samplers[operand->base.index[0].imm];
988 reg = sx->sv[operand->base.index[0].imm];
1009 translate_relative_operand(sx, &operand->base.index[1].rel));
1025 reg = sx->imms;
1030 reg = sx->imms;
1033 sx->imms,
1034 translate_relative_operand(sx, &operand->base.index[0].rel));
1044 reg = sx->prim_id;
1048 reg = ureg_src(translate_operand(sx, &operand->base, 0));
1140 Shader_add_call(struct Shader_xlate *sx,
1144 ASSERT(sx->num_calls < sx->max_calls);
1146 sx->calls[sx->num_calls].d3d_label = d3d_label;
1147 sx->calls[sx->num_calls].tgsi_label_token = tgsi_label_token;
1148 sx->num_calls++;
1152 Shader_add_label(struct Shader_xlate *sx,
1156 ASSERT(sx->num_labels < sx->max_labels);
1158 sx->labels[sx->num_labels].d3d_label = d3d_label;
1159 sx->labels[sx->num_labels].tgsi_insn_no = tgsi_insn_no;
1160 sx->num_labels++;
1207 struct Shader_xlate *sx, struct Shader_opcode *opcode)
1210 struct ureg_dst dst = translate_dst_operand(sx, &opcode->dst[0],
1212 struct ureg_src src = translate_src_operand(sx, &opcode->src[0], OF_FLOAT);
1244 struct Shader_xlate sx;
1254 memset(&sx, 0, sizeof sx);
1263 sx.max_calls = 64;
1264 sx.calls = (struct Shader_call *)MALLOC(sx.max_calls *
1266 sx.num_calls = 0;
1268 sx.max_labels = 64;
1269 sx.labels = (struct Shader_label *)MALLOC(sx.max_labels *
1271 sx.num_labels = 0;
1289 sx.ureg = ureg;
1299 expand_unary_to_scalarf(ureg, ureg_EX2, &sx, &opcode);
1302 expand_unary_to_scalarf(ureg, ureg_SQRT, &sx, &opcode);
1305 expand_unary_to_scalarf(ureg, ureg_RSQ, &sx, &opcode);
1308 expand_unary_to_scalarf(ureg, ureg_LG2, &sx, &opcode);
1313 translate_dst_operand(&sx, &opcode.dst[0], opcode.saturate),
1314 translate_src_operand(&sx, &opcode.src[0], OF_INT),
1315 translate_src_operand(&sx, &opcode.src[1], OF_INT));
1320 translate_dst_operand(&sx, &opcode.dst[1], opcode.saturate),
1321 translate_src_operand(&sx, &opcode.src[0], OF_INT),
1322 translate_src_operand(&sx, &opcode.src[1], OF_INT));
1344 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT),
1347 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1349 translate_dst_operand(&sx, &opcode.dst[0], opcode.saturate),
1368 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT),
1376 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1380 translate_dst_operand(&sx, &opcode.dst[0], opcode.saturate),
1399 if (ureg_src_is_undef(sx.samplers[resource])) {
1400 sx.samplers[resource] =
1405 translate_dst_operand(&sx, &opcode.dst[0], opcode.saturate),
1406 sx.resources[resource].target,
1407 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT),
1408 sx.samplers[resource]);
1412 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_INT);
1413 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_INT);
1416 translate_dst_operand(&sx, &opcode.dst[0],
1425 sx.imms =
1440 if (ureg_src_is_undef(sx.samplers[resource])) {
1441 sx.samplers[resource] =
1446 translate_dst_operand(&sx, &opcode.dst[0],
1448 sx.resources[resource].target,
1449 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1450 sx.samplers[resource]);
1454 struct ureg_src tsrc = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1455 struct ureg_dst dstreg = translate_dst_operand(&sx, &opcode.dst[0],
1465 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1491 unsigned target = sx.resources[res_index].target;
1523 translate_dst_operand(&sx, &opcode.dst[0],
1525 sx.resources[opcode.src[1].base.index[0].imm].target,
1526 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT),
1527 translate_src_operand(&sx, &opcode.src[2], OF_FLOAT));
1531 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_FLOAT);
1532 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1533 srcreg[2] = translate_src_operand(&sx, &opcode.src[2], OF_UINT);
1536 translate_dst_operand(&sx, &opcode.dst[0],
1551 LOG_UNSUPPORTED(sx.resources[opcode.src[1].base.index[0].imm].target !=
1561 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1564 translate_src_operand(&sx, &opcode.src[3], OF_FLOAT));
1570 translate_dst_operand(&sx, &opcode.dst[0],
1572 sx.resources[opcode.src[1].base.index[0].imm].target,
1574 translate_src_operand(&sx, &opcode.src[2], OF_FLOAT));
1580 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_FLOAT);
1581 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1582 srcreg[2] = translate_src_operand(&sx, &opcode.src[2], OF_UINT);
1583 srcreg[3] = translate_src_operand(&sx, &opcode.src[3], OF_FLOAT);
1586 translate_dst_operand(&sx, &opcode.dst[0],
1604 LOG_UNSUPPORTED(sx.resources[opcode.src[1].base.index[0].imm].target !=
1612 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1615 translate_src_operand(&sx, &opcode.src[3], OF_FLOAT));
1621 translate_dst_operand(&sx, &opcode.dst[0],
1623 sx.resources[opcode.src[1].base.index[0].imm].target,
1625 translate_src_operand(&sx, &opcode.src[2], OF_FLOAT));
1631 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_FLOAT);
1632 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1633 srcreg[2] = translate_src_operand(&sx, &opcode.src[2], OF_UINT);
1634 srcreg[3] = translate_src_operand(&sx, &opcode.src[3], OF_FLOAT);
1637 translate_dst_operand(&sx, &opcode.dst[0],
1654 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1657 translate_src_operand(&sx, &opcode.src[3], OF_FLOAT));
1660 translate_dst_operand(&sx, &opcode.dst[0],
1662 sx.resources[opcode.src[1].base.index[0].imm].target,
1664 translate_src_operand(&sx, &opcode.src[2], OF_FLOAT));
1670 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_FLOAT);
1671 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1672 srcreg[2] = translate_src_operand(&sx, &opcode.src[2], OF_UINT);
1673 srcreg[3] = translate_src_operand(&sx, &opcode.src[3], OF_FLOAT);
1676 translate_dst_operand(&sx, &opcode.dst[0],
1688 translate_dst_operand(&sx, &opcode.dst[0],
1690 sx.resources[opcode.src[1].base.index[0].imm].target,
1691 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT),
1692 translate_src_operand(&sx, &opcode.src[3], OF_FLOAT),
1693 translate_src_operand(&sx, &opcode.src[4], OF_FLOAT),
1694 translate_src_operand(&sx, &opcode.src[2], OF_FLOAT));
1698 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_FLOAT);
1699 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1700 srcreg[2] = translate_src_operand(&sx, &opcode.src[2], OF_UINT);
1701 srcreg[3] = translate_src_operand(&sx, &opcode.src[3], OF_FLOAT);
1702 srcreg[4] = translate_src_operand(&sx, &opcode.src[4], OF_FLOAT);
1705 translate_dst_operand(&sx, &opcode.dst[0],
1722 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1725 translate_src_operand(&sx, &opcode.src[3], OF_FLOAT));
1728 translate_dst_operand(&sx, &opcode.dst[0],
1730 sx.resources[opcode.src[1].base.index[0].imm].target,
1732 translate_src_operand(&sx, &opcode.src[2], OF_FLOAT));
1738 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_FLOAT);
1739 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_UINT);
1740 srcreg[2] = translate_src_operand(&sx, &opcode.src[2], OF_UINT);
1741 srcreg[3] = translate_src_operand(&sx, &opcode.src[3], OF_FLOAT);
1744 translate_dst_operand(&sx, &opcode.dst[0],
1752 ureg_MOV(ureg, src0, translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1754 struct ureg_dst dst = translate_dst_operand(&sx, &opcode.dst[0],
1767 struct ureg_dst dst = translate_dst_operand(&sx, &opcode.dst[1],
1786 ureg_MOV(ureg, src0, translate_src_operand(&sx, &opcode.src[0], OF_UINT));
1787 ureg_MOV(ureg, src1, translate_src_operand(&sx, &opcode.src[1], OF_UINT));
1790 translate_dst_operand(&sx, &opcode.dst[0],
1796 translate_dst_operand(&sx, &opcode.dst[1],
1807 translate_dst_operand(&sx, &opcode.dst[0],
1809 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1810 translate_src_operand(&sx, &opcode.src[1], OF_UINT));
1814 translate_dst_operand(&sx, &opcode.dst[1],
1816 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1817 translate_src_operand(&sx, &opcode.src[1], OF_UINT));
1830 sx.resources[res_index].target = target;
1832 sx.sv[res_index] =
1864 sx.samplers[opcode.dst[0].base.index[0].imm] =
1874 ureg_property(sx.ureg,
1880 ureg_property(sx.ureg,
1886 ureg_property(sx.ureg,
1903 declare_vertices_in(&sx, 1);
1904 ureg_property(sx.ureg,
1910 declare_vertices_in(&sx, 2);
1911 ureg_property(sx.ureg,
1917 declare_vertices_in(&sx, 3);
1918 ureg_property(sx.ureg,
1924 declare_vertices_in(&sx, 4);
1925 ureg_property(sx.ureg,
1931 declare_vertices_in(&sx, 6);
1932 ureg_property(sx.ureg,
1945 ureg_property(sx.ureg,
1952 dcl_vs_input(&sx, ureg, &opcode.dst[0]);
1955 dcl_gs_input(&sx, ureg, &opcode.dst[0]);
1961 dcl_sgv_input(&sx, ureg, &opcode.dst[0], opcode.dcl_siv_name);
1966 dcl_siv_input(&sx, ureg, &opcode.dst[0], opcode.dcl_siv_name);
1971 dcl_ps_input(&sx, ureg, &opcode.dst[0],
1977 dcl_ps_sgv_input(&sx, ureg, &opcode.dst[0],
1983 dcl_ps_siv_input(&sx, ureg, &opcode.dst[0],
1995 sx.output_depth = ureg_DECL_output_masked(ureg, TGSI_SEMANTIC_POSITION, 0, TGSI_WRITEMASK_Z, 0, 1);
1996 sx.output_depth = ureg_writemask(sx.output_depth, TGSI_WRITEMASK_Z);
2002 dcl_base_output(&sx, ureg,
2017 dcl_base_output(&sx, ureg,
2043 unsigned numcliporcull = sx.num_clip_distances_declared +
2044 sx.num_cull_distances_declared;
2045 sx.clip_distance_mapping[numcliporcull].d3d =
2047 sx.clip_distance_mapping[numcliporcull].tgsi = numcliporcull;
2049 ++sx.num_clip_distances_declared;
2052 sx.num_clip_distances_declared);
2054 ++sx.num_cull_distances_declared;
2056 sx.num_cull_distances_declared);
2059 sx.cull_distance_mapping[sx.num_cull_distances_declared].d3d =
2061 sx.cull_distance_mapping[sx.num_cull_distances_declared].tgsi =
2062 sx.num_cull_distances_declared;
2063 ++sx.num_cull_distances_declared;
2065 sx.num_cull_distances_declared);
2068 dcl_base_output(&sx, ureg,
2072 translate_semantic_index(&sx, opcode.dcl_siv_name,
2088 dcl_base_output(&sx, ureg,
2099 assert(opcode.specific.dcl_num_temps + sx.declared_temps <=
2102 sx.temp_offset = sx.declared_temps;
2105 sx.temps[sx.declared_temps + i] = ureg_DECL_temporary(ureg);
2107 sx.declared_temps += opcode.specific.dcl_num_temps;
2120 assert(opcode.specific.dcl_indexable_temp.count + sx.declared_temps <=
2123 sx.indexable_temp_offsets[opcode.specific.dcl_indexable_temp.index] =
2124 sx.declared_temps;
2127 sx.temps[sx.declared_temps + i] = ureg_DECL_temporary(ureg);
2129 sx.declared_temps += opcode.specific.dcl_indexable_temp.count;
2136 translate_src_operand(&sx, &opcode.src[0], OF_INT);
2142 ureg_UIF(ureg, translate_src_operand(&sx, &opcode.src[0], OF_INT), &label);
2156 translate_src_operand(&sx, &opcode.src[0], OF_INT);
2163 ureg_UIF(ureg, translate_src_operand(&sx, &opcode.src[0], OF_INT), &label);
2176 Shader_add_call(&sx, label, tgsi_token_label);
2201 Shader_add_label(&sx, label, tgsi_inst_no);
2208 Shader_add_call(&sx, label, tgsi_token_label);
2245 dst[i] = translate_dst_operand(&sx, &opcode.dst[i],
2251 src[i] = translate_src_operand(&sx, &opcode.src[i], ox->format);
2279 for (i = 0; i < sx.num_calls; ++i) {
2280 for (j = 0; j < sx.num_labels; ++j) {
2281 if (sx.calls[i].d3d_label == sx.labels[j].d3d_label) {
2282 ureg_fixup_label(sx.ureg,
2283 sx.calls[i].tgsi_label_token,
2284 sx.labels[j].tgsi_insn_no);
2288 ASSERT(j < sx.num_labels);
2290 FREE(sx.labels);
2291 FREE(sx.calls);