X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fr300%2Fr300_tgsi_to_rc.c;h=a9e3d6d74771095433c7db65a524807cc813a16d;hb=a7f098fb769bdfdac692a04eab6bdd84e061e5cd;hp=30377ffa59bb15064bf7fb574031f0c6e4356904;hpb=10370b752cd793665feec9494e6545a3f04c69f9;p=mesa.git diff --git a/src/gallium/drivers/r300/r300_tgsi_to_rc.c b/src/gallium/drivers/r300/r300_tgsi_to_rc.c index 30377ffa59b..a9e3d6d7477 100644 --- a/src/gallium/drivers/r300/r300_tgsi_to_rc.c +++ b/src/gallium/drivers/r300/r300_tgsi_to_rc.c @@ -20,12 +20,11 @@ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include "r300_tgsi_to_rc.h" -#include "radeon_compiler.h" -#include "radeon_program.h" +#include "compiler/radeon_compiler.h" -#include "util/u_math.h" #include "tgsi/tgsi_info.h" #include "tgsi/tgsi_parse.h" #include "tgsi/tgsi_scan.h" @@ -51,39 +50,29 @@ static unsigned translate_opcode(unsigned opcode) case TGSI_OPCODE_SLT: return RC_OPCODE_SLT; case TGSI_OPCODE_SGE: return RC_OPCODE_SGE; case TGSI_OPCODE_MAD: return RC_OPCODE_MAD; - case TGSI_OPCODE_SUB: return RC_OPCODE_SUB; case TGSI_OPCODE_LRP: return RC_OPCODE_LRP; - case TGSI_OPCODE_CND: return RC_OPCODE_CND; /* case TGSI_OPCODE_DP2A: return RC_OPCODE_DP2A; */ - /* gap */ case TGSI_OPCODE_FRC: return RC_OPCODE_FRC; - case TGSI_OPCODE_CLAMP: return RC_OPCODE_CLAMP; case TGSI_OPCODE_FLR: return RC_OPCODE_FLR; - /* case TGSI_OPCODE_ROUND: return RC_OPCODE_ROUND; */ + case TGSI_OPCODE_ROUND: return RC_OPCODE_ROUND; case TGSI_OPCODE_EX2: return RC_OPCODE_EX2; case TGSI_OPCODE_LG2: return RC_OPCODE_LG2; case TGSI_OPCODE_POW: return RC_OPCODE_POW; case TGSI_OPCODE_XPD: return RC_OPCODE_XPD; - /* gap */ - case TGSI_OPCODE_ABS: return RC_OPCODE_ABS; - /* case TGSI_OPCODE_RCC: return RC_OPCODE_RCC; */ case TGSI_OPCODE_DPH: return RC_OPCODE_DPH; case TGSI_OPCODE_COS: return RC_OPCODE_COS; case TGSI_OPCODE_DDX: return RC_OPCODE_DDX; case TGSI_OPCODE_DDY: return RC_OPCODE_DDY; - case TGSI_OPCODE_KILP: return RC_OPCODE_KILP; + case TGSI_OPCODE_KILL: return RC_OPCODE_KILP; /* case TGSI_OPCODE_PK2H: return RC_OPCODE_PK2H; */ /* case TGSI_OPCODE_PK2US: return RC_OPCODE_PK2US; */ /* case TGSI_OPCODE_PK4B: return RC_OPCODE_PK4B; */ /* case TGSI_OPCODE_PK4UB: return RC_OPCODE_PK4UB; */ - /* case TGSI_OPCODE_RFL: return RC_OPCODE_RFL; */ case TGSI_OPCODE_SEQ: return RC_OPCODE_SEQ; - case TGSI_OPCODE_SFL: return RC_OPCODE_SFL; case TGSI_OPCODE_SGT: return RC_OPCODE_SGT; case TGSI_OPCODE_SIN: return RC_OPCODE_SIN; case TGSI_OPCODE_SLE: return RC_OPCODE_SLE; case TGSI_OPCODE_SNE: return RC_OPCODE_SNE; - /* case TGSI_OPCODE_STR: return RC_OPCODE_STR; */ case TGSI_OPCODE_TEX: return RC_OPCODE_TEX; case TGSI_OPCODE_TXD: return RC_OPCODE_TXD; case TGSI_OPCODE_TXP: return RC_OPCODE_TXP; @@ -91,17 +80,13 @@ static unsigned translate_opcode(unsigned opcode) /* case TGSI_OPCODE_UP2US: return RC_OPCODE_UP2US; */ /* case TGSI_OPCODE_UP4B: return RC_OPCODE_UP4B; */ /* case TGSI_OPCODE_UP4UB: return RC_OPCODE_UP4UB; */ - /* case TGSI_OPCODE_X2D: return RC_OPCODE_X2D; */ - /* case TGSI_OPCODE_ARA: return RC_OPCODE_ARA; */ - /* case TGSI_OPCODE_ARR: return RC_OPCODE_ARR; */ - /* case TGSI_OPCODE_BRA: return RC_OPCODE_BRA; */ + case TGSI_OPCODE_ARR: return RC_OPCODE_ARR; /* case TGSI_OPCODE_CAL: return RC_OPCODE_CAL; */ /* case TGSI_OPCODE_RET: return RC_OPCODE_RET; */ case TGSI_OPCODE_SSG: return RC_OPCODE_SSG; case TGSI_OPCODE_CMP: return RC_OPCODE_CMP; case TGSI_OPCODE_SCS: return RC_OPCODE_SCS; case TGSI_OPCODE_TXB: return RC_OPCODE_TXB; - /* case TGSI_OPCODE_NRM: return RC_OPCODE_NRM; */ /* case TGSI_OPCODE_DIV: return RC_OPCODE_DIV; */ case TGSI_OPCODE_DP2: return RC_OPCODE_DP2; case TGSI_OPCODE_TXL: return RC_OPCODE_TXL; @@ -116,7 +101,7 @@ static unsigned translate_opcode(unsigned opcode) case TGSI_OPCODE_CEIL: return RC_OPCODE_CEIL; /* case TGSI_OPCODE_I2F: return RC_OPCODE_I2F; */ /* case TGSI_OPCODE_NOT: return RC_OPCODE_NOT; */ - case TGSI_OPCODE_TRUNC: return RC_OPCODE_FLR; + case TGSI_OPCODE_TRUNC: return RC_OPCODE_TRUNC; /* case TGSI_OPCODE_SHL: return RC_OPCODE_SHL; */ /* case TGSI_OPCODE_ISHR: return RC_OPCODE_SHR; */ /* case TGSI_OPCODE_AND: return RC_OPCODE_AND; */ @@ -134,12 +119,9 @@ static unsigned translate_opcode(unsigned opcode) /* case TGSI_OPCODE_ENDLOOP2: return RC_OPCODE_ENDLOOP2; */ /* case TGSI_OPCODE_ENDSUB: return RC_OPCODE_ENDSUB; */ case TGSI_OPCODE_NOP: return RC_OPCODE_NOP; - /* gap */ - /* case TGSI_OPCODE_NRM4: return RC_OPCODE_NRM4; */ /* case TGSI_OPCODE_CALLNZ: return RC_OPCODE_CALLNZ; */ - /* case TGSI_OPCODE_IFC: return RC_OPCODE_IFC; */ /* case TGSI_OPCODE_BREAKC: return RC_OPCODE_BREAKC; */ - case TGSI_OPCODE_KIL: return RC_OPCODE_KIL; + case TGSI_OPCODE_KILL_IF: return RC_OPCODE_KIL; } fprintf(stderr, "r300: Unknown TGSI/RC opcode: %s\n", tgsi_get_opcode_name(opcode)); @@ -148,13 +130,7 @@ static unsigned translate_opcode(unsigned opcode) static unsigned translate_saturate(unsigned saturate) { - switch(saturate) { - default: - fprintf(stderr, "Unknown saturate mode: %i\n", saturate); - /* fall-through */ - case TGSI_SAT_NONE: return RC_SATURATE_NONE; - case TGSI_SAT_ZERO_ONE: return RC_SATURATE_ZERO_ONE; - } + return saturate ? RC_SATURATE_ZERO_ONE : RC_SATURATE_NONE; } static unsigned translate_register_file(unsigned file) @@ -169,7 +145,6 @@ static unsigned translate_register_file(unsigned file) /* fall-through */ case TGSI_FILE_TEMPORARY: return RC_FILE_TEMPORARY; case TGSI_FILE_ADDRESS: return RC_FILE_ADDRESS; - case TGSI_FILE_SYSTEM_VALUE: return RC_FILE_INPUT; } } @@ -181,17 +156,6 @@ static int translate_register_index( if (file == TGSI_FILE_IMMEDIATE) return ttr->immediate_offset + index; - if (file == TGSI_FILE_SYSTEM_VALUE) { - if (index == ttr->instance_id) { - return ttr->num_inputs; - } else { - fprintf(stderr, "Unknown system value semantic index: %i\n", - index); - ttr->error = TRUE; - return 0; - } - } - return index; } @@ -282,8 +246,7 @@ static void transform_texture(struct rc_instruction * dst, struct tgsi_instructi dst->U.I.TexSwizzle = RC_SWIZZLE_XYZW; } -static void transform_instruction(struct tgsi_to_rc * ttr, - struct tgsi_full_instruction * src) +static void transform_instruction(struct tgsi_to_rc * ttr, struct tgsi_full_instruction * src) { struct rc_instruction * dst; int i; @@ -343,27 +306,6 @@ static void handle_immediate(struct tgsi_to_rc * ttr, } } -static void handle_declaration(struct tgsi_to_rc *ttr, - struct tgsi_full_declaration *decl) -{ - switch (decl->Declaration.File) { - case TGSI_FILE_INPUT: - ttr->num_inputs = MAX2(ttr->num_inputs, decl->Range.First + 1); - break; - - case TGSI_FILE_SYSTEM_VALUE: - if (decl->Semantic.Name == TGSI_SEMANTIC_INSTANCEID) { - printf("Got instance id\n"); - ttr->instance_id = decl->Range.First; - } else { - fprintf(stderr, "Unknown system value semantic: %i.\n", - decl->Semantic.Name); - ttr->error = TRUE; - } - break; - } -} - void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, const struct tgsi_token * tokens) { @@ -372,8 +314,6 @@ void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, unsigned imm_index = 0; int i; - ttr->num_inputs = 0; - ttr->instance_id = -1; ttr->error = FALSE; /* Allocate constants placeholders. @@ -400,29 +340,21 @@ void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, switch (parser.FullToken.Token.Type) { case TGSI_TOKEN_TYPE_DECLARATION: - handle_declaration(ttr, &parser.FullToken.FullDeclaration); - if (ttr->error) - goto end_while; break; - case TGSI_TOKEN_TYPE_IMMEDIATE: handle_immediate(ttr, &parser.FullToken.FullImmediate, imm_index); imm_index++; break; - case TGSI_TOKEN_TYPE_INSTRUCTION: inst = &parser.FullToken.FullInstruction; if (inst->Instruction.Opcode == TGSI_OPCODE_END) { - goto end_while; + break; } transform_instruction(ttr, inst); - if (ttr->error) - goto end_while; break; } } -end_while: tgsi_parse_free(&parser);