Lines Matching refs:opcode
60 /* Opcodes which do not translate directly to a TGSI opcode, but which
1168 struct Shader_opcode *opcode,
1177 if (opcode->imm_texel_offset.u ||
1178 opcode->imm_texel_offset.v ||
1179 opcode->imm_texel_offset.w) {
1184 opcode->imm_texel_offset.u,
1185 opcode->imm_texel_offset.v,
1186 opcode->imm_texel_offset.w);
1207 struct Shader_xlate *sx, struct Shader_opcode *opcode)
1210 struct ureg_dst dst = translate_dst_operand(sx, &opcode->dst[0],
1211 opcode->saturate);
1212 struct ureg_src src = translate_src_operand(sx, &opcode->src[0], OF_FLOAT);
1247 struct Shader_opcode opcode;
1291 while (Shader_parse_opcode(&parser, &opcode)) {
1294 assert(opcode.type < D3D10_SB_NUM_OPCODES);
1295 ox = &opcode_xlate[opcode.type];
1297 switch (opcode.type) {
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);
1311 if (opcode.dst[0].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
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));
1318 if (opcode.dst[1].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
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),
1391 * this opcode regardless, so we just ignore sample index operand
1395 unsigned resource = opcode.src[1].base.index[0].imm;
1396 assert(opcode.src[1].base.index_dim == 1);
1397 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
1405 translate_dst_operand(&sx, &opcode.dst[0], opcode.saturate),
1407 translate_src_operand(&sx, &opcode.src[0], OF_FLOAT),
1412 srcreg[0] = translate_src_operand(&sx, &opcode.src[0], OF_INT);
1413 srcreg[1] = translate_src_operand(&sx, &opcode.src[1], OF_INT);
1415 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE_I, 2, &opcode,
1416 translate_dst_operand(&sx, &opcode.dst[0],
1417 opcode.saturate),
1423 if (opcode.customdata._class ==
1427 opcode.customdata.u.constbuf.data,
1428 opcode.customdata.u.constbuf.count);
1436 unsigned resource = opcode.src[1].base.index[0].imm;
1437 assert(opcode.src[1].base.index_dim == 1);
1438 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
1446 translate_dst_operand(&sx, &opcode.dst[0],
1447 opcode.saturate),
1449 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
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],
1456 opcode.saturate);
1465 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1469 tsrc.SwizzleX = opcode.src[1].swizzle[0];
1470 tsrc.SwizzleY = opcode.src[1].swizzle[1];
1471 tsrc.SwizzleZ = opcode.src[1].swizzle[2];
1472 tsrc.SwizzleW = opcode.src[1].swizzle[3];
1474 if (opcode.specific.resinfo_ret_type ==
1478 else if (opcode.specific.resinfo_ret_type ==
1490 unsigned res_index = opcode.src[1].base.index[0].imm;
1497 unsigned dst_swizzle = opcode.src[1].swizzle[i];
1517 assert(opcode.src[1].base.index_dim == 1);
1518 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
1520 LOG_UNSUPPORTED(opcode.src[1].base.index[0].imm != opcode.src[2].base.index[0].imm);
1523 translate_dst_operand(&sx, &opcode.dst[0],
1524 opcode.saturate),
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);
1535 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE, 3, &opcode,
1536 translate_dst_operand(&sx, &opcode.dst[0],
1537 opcode.saturate),
1551 LOG_UNSUPPORTED(sx.resources[opcode.src[1].base.index[0].imm].target !=
1554 assert(opcode.src[1].base.index_dim == 1);
1555 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
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],
1571 opcode.saturate),
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);
1585 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE_C, 4, &opcode,
1586 translate_dst_operand(&sx, &opcode.dst[0],
1587 opcode.saturate),
1596 assert(opcode.src[1].base.index_dim == 1);
1597 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
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],
1622 opcode.saturate),
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);
1636 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE_C_LZ, 4, &opcode,
1637 translate_dst_operand(&sx, &opcode.dst[0],
1638 opcode.saturate),
1647 assert(opcode.src[1].base.index_dim == 1);
1648 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
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],
1661 opcode.saturate),
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);
1675 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE_L, 4, &opcode,
1676 translate_dst_operand(&sx, &opcode.dst[0],
1677 opcode.saturate),
1684 assert(opcode.src[1].base.index_dim == 1);
1685 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
1688 translate_dst_operand(&sx, &opcode.dst[0],
1689 opcode.saturate),
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);
1704 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE_D, 5, &opcode,
1705 translate_dst_operand(&sx, &opcode.dst[0],
1706 opcode.saturate),
1715 assert(opcode.src[1].base.index_dim == 1);
1716 assert(opcode.src[1].base.index[0].imm < SHADER_MAX_RESOURCES);
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],
1729 opcode.saturate),
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);
1743 sample_ureg_emit(ureg, TGSI_OPCODE_SAMPLE_B, 4, &opcode,
1744 translate_dst_operand(&sx, &opcode.dst[0],
1745 opcode.saturate),
1752 ureg_MOV(ureg, src0, translate_src_operand(&sx, &opcode.src[0], OF_FLOAT));
1753 if (opcode.dst[0].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
1754 struct ureg_dst dst = translate_dst_operand(&sx, &opcode.dst[0],
1755 opcode.saturate);
1766 if (opcode.dst[1].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
1767 struct ureg_dst dst = translate_dst_operand(&sx, &opcode.dst[1],
1768 opcode.saturate);
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));
1788 if (opcode.dst[0].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
1790 translate_dst_operand(&sx, &opcode.dst[0],
1791 opcode.saturate),
1794 if (opcode.dst[1].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
1796 translate_dst_operand(&sx, &opcode.dst[1],
1797 opcode.saturate),
1805 if (opcode.dst[0].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
1807 translate_dst_operand(&sx, &opcode.dst[0],
1808 opcode.saturate),
1809 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1810 translate_src_operand(&sx, &opcode.src[1], OF_UINT));
1812 if (opcode.dst[1].base.type != D3D10_SB_OPERAND_TYPE_NULL) {
1814 translate_dst_operand(&sx, &opcode.dst[1],
1815 opcode.saturate),
1816 translate_src_operand(&sx, &opcode.src[0], OF_UINT),
1817 translate_src_operand(&sx, &opcode.src[1], OF_UINT));
1825 unsigned res_index = opcode.dst[0].base.index[0].imm;
1826 assert(opcode.dst[0].base.index_dim == 1);
1829 target = translate_resource_dimension(opcode.specific.dcl_resource_dimension);
1834 trans_dcl_ret_type(opcode.dcl_resource_ret_type[0]),
1835 trans_dcl_ret_type(opcode.dcl_resource_ret_type[1]),
1836 trans_dcl_ret_type(opcode.dcl_resource_ret_type[2]),
1837 trans_dcl_ret_type(opcode.dcl_resource_ret_type[3]));
1843 unsigned num_constants = opcode.src[0].base.index[1].imm;
1845 assert(opcode.src[0].base.index[0].imm < PIPE_MAX_CONSTANT_BUFFERS);
1856 opcode.src[0].base.index[0].imm);
1861 assert(opcode.dst[0].base.index_dim == 1);
1862 assert(opcode.dst[0].base.index[0].imm < SHADER_MAX_SAMPLERS);
1864 sx.samplers[opcode.dst[0].base.index[0].imm] =
1866 opcode.dst[0].base.index[0].imm);
1872 switch (opcode.specific.dcl_gs_output_primitive_topology) {
1901 switch (opcode.specific.dcl_gs_input_primitive) {
1947 opcode.specific.dcl_max_output_vertex_count);
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],
1972 opcode.specific.dcl_in_ps_interp);
1977 dcl_ps_sgv_input(&sx, ureg, &opcode.dst[0],
1978 opcode.dcl_siv_name);
1983 dcl_ps_siv_input(&sx, ureg, &opcode.dst[0],
1984 opcode.dcl_siv_name,
1985 opcode.specific.dcl_in_ps_interp);
1991 if (opcode.dst[0].base.type == D3D10_SB_OPERAND_TYPE_OUTPUT_DEPTH) {
1993 assert(opcode.dst[0].base.index_dim == 0);
1999 assert(opcode.dst[0].base.index_dim == 1);
2000 assert(opcode.dst[0].base.index[0].imm < SHADER_MAX_OUTPUTS);
2005 opcode.dst[0].base.index[0].imm),
2006 &opcode.dst[0]);
2009 assert(opcode.dst[0].base.index_dim == 1);
2010 assert(opcode.dst[0].base.index[0].imm < SHADER_MAX_OUTPUTS);
2015 = opcode.dst[0].base.index[0].imm;
2020 opcode.dst[0].base.index[0].imm),
2021 &opcode.dst[0]);
2026 assert(opcode.dst[0].base.index_dim == 1);
2027 assert(opcode.dst[0].base.index[0].imm < SHADER_MAX_OUTPUTS);
2032 = opcode.dst[0].base.index[0].imm;
2034 if (opcode.dcl_siv_name == D3D10_SB_NAME_CLIP_DISTANCE ||
2035 opcode.dcl_siv_name == D3D10_SB_NAME_CULL_DISTANCE) {
2046 opcode.dst[0].base.index[0].imm;
2048 if (opcode.dcl_siv_name == D3D10_SB_NAME_CLIP_DISTANCE) {
2058 } else if (0 && opcode.dcl_siv_name == D3D10_SB_NAME_CULL_DISTANCE) {
2060 opcode.dst[0].base.index[0].imm;
2071 translate_system_name(opcode.dcl_siv_name),
2072 translate_semantic_index(&sx, opcode.dcl_siv_name,
2073 &opcode.dst[0]),
2074 opcode.dst[0].mask >> D3D10_SB_OPERAND_4_COMPONENT_MASK_SHIFT,
2076 &opcode.dst[0]);
2080 assert(opcode.dst[0].base.index_dim == 1);
2081 assert(opcode.dst[0].base.index[0].imm < SHADER_MAX_OUTPUTS);
2086 = opcode.dst[0].base.index[0].imm;
2090 translate_system_name(opcode.dcl_siv_name),
2092 &opcode.dst[0]);
2099 assert(opcode.specific.dcl_num_temps + sx.declared_temps <=
2104 for (i = 0; i < opcode.specific.dcl_num_temps; i++) {
2107 sx.declared_temps += opcode.specific.dcl_num_temps;
2118 assert(opcode.specific.dcl_indexable_temp.index <
2120 assert(opcode.specific.dcl_indexable_temp.count + sx.declared_temps <=
2123 sx.indexable_temp_offsets[opcode.specific.dcl_indexable_temp.index] =
2126 for (i = 0; i < opcode.specific.dcl_indexable_temp.count; i++) {
2129 sx.declared_temps += opcode.specific.dcl_indexable_temp.count;
2134 if (opcode.specific.test_boolean == D3D10_SB_INSTRUCTION_TEST_ZERO) {
2136 translate_src_operand(&sx, &opcode.src[0], OF_INT);
2142 ureg_UIF(ureg, translate_src_operand(&sx, &opcode.src[0], OF_INT), &label);
2153 assert(operand_is_scalar(&opcode.src[0]));
2154 if (opcode.specific.test_boolean == D3D10_SB_INSTRUCTION_TEST_ZERO) {
2156 translate_src_operand(&sx, &opcode.src[0], OF_INT);
2163 ureg_UIF(ureg, translate_src_operand(&sx, &opcode.src[0], OF_INT), &label);
2165 switch (opcode.type) {
2173 unsigned label = opcode.src[1].base.index[0].imm;
2193 unsigned label = opcode.src[0].base.index[0].imm;
2205 unsigned label = opcode.src[0].base.index[0].imm;
2238 debug_printf("%s: unsupported opcode %i\n",
2244 for (i = 0; i < opcode.num_dst; i++) {
2245 dst[i] = translate_dst_operand(&sx, &opcode.dst[i],
2246 opcode.saturate);
2250 for (i = 0; i < opcode.num_src; i++) {
2251 src[i] = translate_src_operand(&sx, &opcode.src[i], ox->format);
2255 if (opcode.dst[0].base.type == D3D10_SB_OPERAND_TYPE_OUTPUT_DEPTH) {
2256 LOG_UNSUPPORTED(opcode.type != D3D10_SB_OPCODE_MOV);
2264 opcode.num_dst,
2266 opcode.num_src, 0);
2270 Shader_opcode_free(&opcode);