private int MaxSamplers(RegisterSet set)
		{
			int maxSampler = 0;

			for (int i = 0; i < set.RegisterCount; i++)
			{
				Register reg = set.GetRegister(i);
				if (reg.Category == RegisterCategory.Sampler)
					maxSampler = Math.Max(reg.Index, maxSampler);
			}
			return maxSampler;
		}
		private static string BuildMapping(AsmTechnique asmTechnique, string extension, RegisterSet set)
		{
			StringBuilder sb = new StringBuilder();

			for (int i = 0; i < set.RegisterCount; i++)
			{
				Register reg = set.GetRegister(i);
				string type = reg.Type;

				string source = "_" + extension + "_";

				switch (reg.Category)
				{
					case RegisterCategory.Boolean:
						source += "b";
						break;
					case RegisterCategory.Float4:
						source += "c";
						switch (reg.Rank)
						{
							case RegisterRank.FloatNx2:
							case RegisterRank.IntNx2:
								type = "float4x2";
								break;
							case RegisterRank.FloatNx3:
							case RegisterRank.IntNx3:
								type = "float4x3";
								break;
							case RegisterRank.FloatNx4:
							case RegisterRank.IntNx4:
								type = "float4x4";
								break;
						}
						break;
					default:
						continue;
				}


				sb.Append("#define ");
				sb.Append(TranslateRegisterName(reg.Name, extension));
				string index = "";
				if (reg.ArraySize > 0)
				{
					index = "(__INDEX__)";
					sb.Append(index);
				}

				sb.Append(" (");

				MapToValue(sb, reg, reg.Index, source, index);

				sb.AppendLine(")");
			}

			return sb.ToString();
		}