当我使用以下代码时:
编辑:上述问题已经更正。我错误地认为寄存器被占用,实际上是指令。然而,问题仍然存在。什么会导致两个长度为55的for循环,在循环内添加一个if语句后,指令计数增加超过400条?
#define MAX_RADIUS 55
#define KERNEL_SIZE (MAX_RADIUS * 2 + 1)
...
float[] kernel[KERNEL_RADIUS];
...
float4 PS_GaussianBlur(float2 texCoord : TEXCOORD) : COLOR0
{
float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
//add the right side offset pixels to the color
for (int i = 0; i < MAX_RADIUS; i++)
{
if(kernel[i] != 0) //this will improve performance for lower filter radius's, but increases const register num
color += tex2D(colorMap, texCoord + offsets[i]) * kernel[i];
}
//add the left side offset pixels to the color
for (int j = 0; j < MAX_RADIUS; j++)
{
if(kernel[i] != 0)
color += tex2D(colorMap, texCoord - offsets[j]) * kernel[j];
}
//finally add the weight of the original pixel to the color
color += tex2D(colorMap, texCoord) * kernel[MAX_RADIUS];
return color;
}
if(kernel[i] != 0)
会大大增加指令使用量!那么我的问题是:什么会增加指令计数?为什么在只有110条指令的循环中使用if语句会使指令计数增加超过400条?编辑:上述问题已经更正。我错误地认为寄存器被占用,实际上是指令。然而,问题仍然存在。什么会导致两个长度为55的for循环,在循环内添加一个if语句后,指令计数增加超过400条?