⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r300_vertexprog.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_ADD, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));			o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=t_src(vp, &src[1]);			o_inst->src3=ZERO_SRC_1;			#endif			goto next;					case OPCODE_MAD:			hw_op=(src[0].File == PROGRAM_TEMPORARY &&				src[1].File == PROGRAM_TEMPORARY &&				src[2].File == PROGRAM_TEMPORARY) ? R300_VPI_OUT_OP_MAD_2 : R300_VPI_OUT_OP_MAD;						o_inst->op=MAKE_VSF_OP(hw_op, t_dst_index(vp, &vpi->DstReg),				t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));			o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=t_src(vp, &src[1]);			o_inst->src3=t_src(vp, &src[2]);			goto next;					case OPCODE_MUL: /* HW mul can take third arg but appears to have some other limitations. */			hw_op=(src[0].File == PROGRAM_TEMPORARY &&				src[1].File == PROGRAM_TEMPORARY) ? R300_VPI_OUT_OP_MAD_2 : R300_VPI_OUT_OP_MAD;						o_inst->op=MAKE_VSF_OP(hw_op, t_dst_index(vp, &vpi->DstReg),				t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));			o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=t_src(vp, &src[1]);			o_inst->src3=ZERO_SRC_1;			goto next;					case OPCODE_DP3://DOT RESULT 1.X Y Z W PARAM 0{} {X Y Z ZERO} PARAM 0{} {X Y Z ZERO} 			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_DOT, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_swizzle(GET_SWZ(src[0].Swizzle, 1)),					t_swizzle(GET_SWZ(src[0].Swizzle, 2)),					SWIZZLE_ZERO,					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE);						o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),					t_swizzle(GET_SWZ(src[1].Swizzle, 0)),					t_swizzle(GET_SWZ(src[1].Swizzle, 1)),					t_swizzle(GET_SWZ(src[1].Swizzle, 2)),					SWIZZLE_ZERO,					t_src_class(src[1].File),					src[1].NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE);			o_inst->src3=ZERO_SRC_1;			goto next;		case OPCODE_SUB://ADD RESULT 1.X Y Z W TMP 0{} {X Y Z W} PARAM 1{X Y Z W } {X Y Z W} neg Xneg Yneg Zneg W#if 1			hw_op=(src[0].File == PROGRAM_TEMPORARY &&				src[1].File == PROGRAM_TEMPORARY) ? R300_VPI_OUT_OP_MAD_2 : R300_VPI_OUT_OP_MAD;						o_inst->op=MAKE_VSF_OP(hw_op, t_dst_index(vp, &vpi->DstReg),				t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));			o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),						SWIZZLE_ONE, SWIZZLE_ONE,						SWIZZLE_ONE, SWIZZLE_ONE,						t_src_class(src[0].File), VSF_FLAG_NONE);			o_inst->src3=MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),					t_swizzle(GET_SWZ(src[1].Swizzle, 0)),					t_swizzle(GET_SWZ(src[1].Swizzle, 1)),					t_swizzle(GET_SWZ(src[1].Swizzle, 2)),					t_swizzle(GET_SWZ(src[1].Swizzle, 3)),					t_src_class(src[1].File),					(!src[1].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE);#else			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_ADD, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),					t_swizzle(GET_SWZ(src[1].Swizzle, 0)),					t_swizzle(GET_SWZ(src[1].Swizzle, 1)),					t_swizzle(GET_SWZ(src[1].Swizzle, 2)),					t_swizzle(GET_SWZ(src[1].Swizzle, 3)),					t_src_class(src[1].File),					(!src[1].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE);			o_inst->src3=0;#endif			goto next;					case OPCODE_ABS://MAX RESULT 1.X Y Z W PARAM 0{} {X Y Z W} PARAM 0{X Y Z W } {X Y Z W} neg Xneg Yneg Zneg W			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_MAX, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_swizzle(GET_SWZ(src[0].Swizzle, 1)),					t_swizzle(GET_SWZ(src[0].Swizzle, 2)),					t_swizzle(GET_SWZ(src[0].Swizzle, 3)),					t_src_class(src[0].File),					(!src[0].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE);			o_inst->src3=0;			goto next;					case OPCODE_FLR:		/* FRC TMP 0.X Y Z W PARAM 0{} {X Y Z W} 		   ADD RESULT 1.X Y Z W PARAM 0{} {X Y Z W} TMP 0{X Y Z W } {X Y Z W} neg Xneg Yneg Zneg W */			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_FRC, u_temp_i,					t_dst_mask(vpi->DstReg.WriteMask), VSF_OUT_CLASS_TMP);						o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=ZERO_SRC_0;			o_inst->src3=ZERO_SRC_0;			o_inst++;						o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_ADD, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=t_src(vp, &src[0]);			o_inst->src2=MAKE_VSF_SOURCE(u_temp_i,					VSF_IN_COMPONENT_X,					VSF_IN_COMPONENT_Y,					VSF_IN_COMPONENT_Z,					VSF_IN_COMPONENT_W,					VSF_IN_CLASS_TMP,					/* Not 100% sure about this */					(!src[1].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE/*VSF_FLAG_ALL*/);			o_inst->src3=ZERO_SRC_0;			u_temp_i--;			goto next;					case OPCODE_LG2:// LG2 RESULT 1.X Y Z W PARAM 0{} {X X X X}			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_LG2, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);			o_inst->src2=ZERO_SRC_0;			o_inst->src3=ZERO_SRC_0;			goto next;					case OPCODE_LIT://LIT TMP 1.Y Z TMP 1{} {X W Z Y} TMP 1{} {Y W Z X} TMP 1{} {Y X Z W} 			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_LIT, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));			/* NOTE: Users swizzling might not work. */			o_inst->src1=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x					t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w					VSF_IN_COMPONENT_ZERO, // z					t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // y					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);			o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // y					t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w					VSF_IN_COMPONENT_ZERO, // z					t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);			o_inst->src3=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // y					t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x					VSF_IN_COMPONENT_ZERO, // z					t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);			goto next;					case OPCODE_DPH://DOT RESULT 1.X Y Z W PARAM 0{} {X Y Z ONE} PARAM 0{} {X Y Z W} 			o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_DOT, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 0)),					t_swizzle(GET_SWZ(src[0].Swizzle, 1)),					t_swizzle(GET_SWZ(src[0].Swizzle, 2)),					VSF_IN_COMPONENT_ONE,					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE);			o_inst->src2=t_src(vp, &src[1]);			o_inst->src3=ZERO_SRC_1;			goto next;					case OPCODE_XPD:			/* mul r0, r1.yzxw, r2.zxyw			   mad r0, -r2.yzxw, r1.zxyw, r0			   NOTE: might need MAD_2			 */						o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_MAD, u_temp_i,					t_dst_mask(vpi->DstReg.WriteMask), VSF_OUT_CLASS_TMP);						o_inst->src1=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // y					t_swizzle(GET_SWZ(src[0].Swizzle, 2)), // z					t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x					t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);						o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),					t_swizzle(GET_SWZ(src[1].Swizzle, 2)), // z					t_swizzle(GET_SWZ(src[1].Swizzle, 0)), // x					t_swizzle(GET_SWZ(src[1].Swizzle, 1)), // y					t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w					t_src_class(src[1].File),					src[1].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);						o_inst->src3=ZERO_SRC_1;			o_inst++;			u_temp_i--;						o_inst->op=MAKE_VSF_OP(R300_VPI_OUT_OP_MAD, t_dst_index(vp, &vpi->DstReg),					t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));						o_inst->src1=MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),					t_swizzle(GET_SWZ(src[1].Swizzle, 1)), // y					t_swizzle(GET_SWZ(src[1].Swizzle, 2)), // z					t_swizzle(GET_SWZ(src[1].Swizzle, 0)), // x					t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w					t_src_class(src[1].File),					(!src[1].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE);						o_inst->src2=MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),					t_swizzle(GET_SWZ(src[0].Swizzle, 2)), // z					t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x					t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // y					t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w					t_src_class(src[0].File),					src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE);						o_inst->src3=MAKE_VSF_SOURCE(u_temp_i+1,					VSF_IN_COMPONENT_X,					VSF_IN_COMPONENT_Y,					VSF_IN_COMPONENT_Z,					VSF_IN_COMPONENT_W,					VSF_IN_CLASS_TMP,					VSF_FLAG_NONE);					goto next;		case OPCODE_RCC:			fprintf(stderr, "Dont know how to handle op %d yet\n", vpi->Opcode);			exit(-1);		break;		case OPCODE_END:			break;		default:			break;		}			o_inst->op=MAKE_VSF_OP(t_opcode(vpi->Opcode), t_dst_index(vp, &vpi->DstReg),				t_dst_mask(vpi->DstReg.WriteMask), t_dst_class(vpi->DstReg.File));				if(are_srcs_scalar){			switch(operands){				case 1:					o_inst->src1=t_src_scalar(vp, &src[0]);					o_inst->src2=ZERO_SRC_0;					o_inst->src3=ZERO_SRC_0;				break;								case 2:					o_inst->src1=t_src_scalar(vp, &src[0]);					o_inst->src2=t_src_scalar(vp, &src[1]);					o_inst->src3=ZERO_SRC_1;				break;								case 3:					o_inst->src1=t_src_scalar(vp, &src[0]);					o_inst->src2=t_src_scalar(vp, &src[1]);					o_inst->src3=t_src_scalar(vp, &src[2]);				break;								default:					fprintf(stderr, "scalars and op RCC not handled yet");					exit(-1);				break;			}		}else{			switch(operands){				case 1:					o_inst->src1=t_src(vp, &src[0]);					o_inst->src2=ZERO_SRC_0;					o_inst->src3=ZERO_SRC_0;				break;							case 2:					o_inst->src1=t_src(vp, &src[0]);					o_inst->src2=t_src(vp, &src[1]);					o_inst->src3=ZERO_SRC_1;				break;							case 3:					o_inst->src1=t_src(vp, &src[0]);					o_inst->src2=t_src(vp, &src[1]);					o_inst->src3=t_src(vp, &src[2]);				break;							default:					fprintf(stderr, "scalars and op RCC not handled yet");					exit(-1);				break;			}		}		next: ;	}		/* Will most likely segfault before we get here... fix later. */	if(o_inst - vp->program.body.i >= VSF_MAX_FRAGMENT_LENGTH/4) {		vp->program.length = 0;		vp->native = GL_FALSE;		return ;	}	vp->program.length=(o_inst - vp->program.body.i) * 4;#if 0	fprintf(stderr, "hw program:\n");	for(i=0; i < vp->program.length; i++)		fprintf(stderr, "%08x\n", vp->program.body.d[i]);#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -