Axiom.RenderSystems.OpenGL.ATI.PixelShader.IsRegisterReadValid C# (CSharp) Method

IsRegisterReadValid() private method

private IsRegisterReadValid ( PhaseType phase, int param ) : bool
phase PhaseType
param int
return bool
		bool IsRegisterReadValid( PhaseType phase, int param )
		{
			bool passed = true; // assume everything will go alright

			// if in phase 2 ALU and argument is a source
			if ( ( phase == PhaseType.PHASE2ALU ) && ( param > 0 ) )
			{
				// is source argument a temp register r0 - r5?
				if ( ( opParams[ param ].Arg >= Gl.GL_REG_0_ATI ) && ( opParams[ param ].Arg <= Gl.GL_REG_5_ATI ) )
				{
					int reg_offset = opParams[ param ].Arg - Gl.GL_REG_0_ATI;
					// if register was not written to in phase 2 but was in phase 1
					if ( ( Phase_RegisterUsage[ reg_offset ].Phase2Write == false ) && Phase_RegisterUsage[ reg_offset ].Phase1Write )
					{
						// only perform register pass if there are ALU instructions in phase 1
						if ( phase1ALU_mi.Count > 0 )
						{
							// build machine instructions for passing a register from phase 1 to phase 2
							// NB: only rgb components of register will get passed

							AddMachineInst( PhaseType.PHASE2TEX, (int)MachineInstruction.PassTexCoord );
							AddMachineInst( PhaseType.PHASE2TEX, opParams[ param ].Arg ); // dst
							AddMachineInst( PhaseType.PHASE2TEX, opParams[ param ].Arg ); // coord
							AddMachineInst( PhaseType.PHASE2TEX, Gl.GL_SWIZZLE_STR_ATI ); // swizzle

							// mark register as being written to
							Phase_RegisterUsage[ reg_offset ].Phase2Write = true;
						}
					}
					// register can not be used because it has not been written to previously
					else
					{
						passed = false;
					}
				}

			}

			return passed;
		}