Example #1
0
void CVPParser::ParseSwizzledSrcReg(const char *token,struct nvfx_src *reg)
{
    s32 idx;

    if(!token) return;

    if(token[0]=='-') {
        reg->negate = TRUE;
        token++;
    }
    if(token[0]=='|') {
        reg->abs = TRUE;
        token++;
    }

    if(token[0]=='v') {
        if(token[1]=='e')
            token = ParseInputReg(token,&idx);
        else if(token[1]=='[') {
            token = ParseInputReg(&token[2],&idx);
            if(*token==']') token++;
        }

        reg->reg.type = NVFXSR_INPUT;
        reg->reg.index = idx;
    } else if(token[0]=='R') {
        token = ParseTempReg(token,&idx);
        reg->reg.type = NVFXSR_TEMP;
        reg->reg.index = idx;
    } else if(token[0]=='c' && token[1]=='[') {
        token = ParseParamReg(&token[2],reg);
    }

    token = ParseRegSwizzle(token,reg);
}
Example #2
0
void CFPParser::ParseVectorSrc(const char *token,struct nvfx_src *reg)
{
	s32 idx;
	//f32 sign = 1.0f;

	if(!token) return;

	if(token[0]=='-') {
		reg->negate = TRUE;
		token++;
	} else if(token[0]=='+') {
		reg->negate = FALSE;
		token++;
	}

	if(token[0]=='|') {
		reg->abs = TRUE;
		token++;
	}

	if(token[0]=='R' || token[0]=='H') {
		token = ParseTempReg(token,&idx);

		reg->reg.type = NVFXSR_TEMP;
		reg->reg.index = idx;
	} else if(token[0]=='f') {
		if(token[1]=='[') {
			token = ParseInputReg(&token[2],&idx);
			if(*token==']') token++;
		} else
			token = ParseInputReg(token,&idx);

		reg->reg.type = NVFXSR_INPUT;
		reg->reg.index = idx;
	} else if(token[0]=='c' && token[1]=='[' && isdigit(token[2])) {
		char *p = (char*)(token + 2);
		
		while(isdigit(*p)) p++;

		reg->reg.index = atoi(token+2);
		reg->reg.type = GetConstRegType(reg->reg.index);

		if(*p==']') p++;
		token = p;
	}

	token = ParseRegSwizzle(token,reg);
}
Example #3
0
void CVPParser::ParseSwizzledSrcReg(const char *token,struct nvfx_src *reg)
{
	s32 idx;

	if(!token) return;

	if(token[0]=='-') {
		reg->negate = TRUE;
		token++;
	}
	if(token[0]=='|') {
		reg->abs = TRUE;
		token++;
	}

	if(token[0]=='v') {
		if(token[1]=='e')
			token = ParseInputReg(token,&idx);
		else if(token[1]=='[') {
			token = ParseInputReg(&token[2],&idx);
			if(*token==']') token++;
		}

		reg->reg.type = NVFXSR_INPUT;
		reg->reg.index = idx;
	} else if(token[0]=='R') {
		token = ParseTempReg(token,&idx);
		reg->reg.type = NVFXSR_TEMP;
		reg->reg.index = idx;
	} else if(token[0]=='c' && token[1]=='[') {
		token = ParseParamReg(&token[2],reg);
	}

	if(token && *token!='\0') {
		if(token[0]=='.') {
			u32 k;

			token++;

			reg->swz[0] = reg->swz[1] = reg->swz[2] = reg->swz[3] = 0;
			for(k=0;token[k] && k<4;k++) {
				if(token[k]=='x')
					reg->swz[k] = NVFX_SWZ_X;
				else if(token[k]=='y')
					reg->swz[k] = NVFX_SWZ_Y;
				else if(token[k]=='z')
					reg->swz[k] = NVFX_SWZ_Z;
				else if(token[k]=='w')
					reg->swz[k] = NVFX_SWZ_W;
			}
		
			if(k && k<4) {
				u8 lastswz = reg->swz[k - 1];
				while(k<4) {
					reg->swz[k] = lastswz;
					k++;
				}
			}
		}
	}
}
Example #4
0
void CFPParser::ParseScalarSrc(const char *token,struct nvfx_src *reg)
{
	s32 idx = -1;

	if(!token) return;

	if(token[0]=='-') {
		reg->negate = TRUE;
		token++;
	} else if(token[0]=='+') {
		reg->negate = FALSE;
		token++;
	}

	if(token[0]=='|') {
		reg->abs = TRUE;
		token++;
	}

	if(token[0]=='R' || token[0]=='H') {
		token = ParseTempReg(token,&idx);

		reg->reg.type = NVFXSR_TEMP;
		reg->reg.index = idx;
	} else if(token[0]=='f') {
		if(token[1]=='[') {
			token = ParseInputReg(&token[2],&idx);
			if(*token==']') token++;
		} else
			token = ParseInputReg(token,&idx);

		reg->reg.type = NVFXSR_INPUT;
		reg->reg.index = idx;
	} else if(token[0]=='c' && token[1]=='[' && isdigit(token[2])) {
		char *p = (char*)(token + 2);
		
		while(isdigit(*p)) p++;

		reg->reg.index = atoi(token+2);
		reg->reg.type = GetConstRegType(reg->reg.index);

		if(*p==']') p++;
		token = p;
	}


	if(token && *token!='\0') {
		if(token[0]=='.') {
			u32 k;

			token++;

			reg->swz[0] = reg->swz[1] = reg->swz[2] = reg->swz[3] = 0;
			for(k=0;token[k] && k<4;k++) {
				if(token[k]=='x')
					reg->swz[k] = NVFX_SWZ_X;
				else if(token[k]=='y')
					reg->swz[k] = NVFX_SWZ_Y;
				else if(token[k]=='z')
					reg->swz[k] = NVFX_SWZ_Z;
				else if(token[k]=='w')
					reg->swz[k] = NVFX_SWZ_W;
			}
			if(k && k<4) {
				u8 lastswz = reg->swz[k - 1];
				while(k<4) {
					reg->swz[k] = lastswz;
					k++;
				}
			}
		}
	}
}