/* ========================================================================================== Cg Acceleration Research Optimized: Edgar Velázquez-Armendáriz - edgar [at] graphics [dot] cornell [dot] edu Original: Eugene Lee (el77 [at] cornell [dot] edu) ------------------------------------------------------------------------------------------ AntiAliasing.cg Performs cheap anti-aliasing given pixel classification information. ========================================================================================== */ // This: # 23 instructions, 3 R-regs, 1 H-regs // Orig: # 33 instructions, 3 R-regs, 1 H-regs half4 AntiAliasing( in half2 pixelPos : WPOS, const uniform samplerRECT pixelClass, const uniform samplerRECT color, const uniform samplerRECT neighborWeightTable) : COLOR { int dx, dy; half4 selfColor; half2 edge; half3 neighborColor; half2 bitmask; half neighbor, weight; // Will not be needed until later, mask latencies selfColor = texRECT(color, pixelPos); edge = round(texRECT(pixelClass, pixelPos).rg * half2(255, 255*64)); bitmask = half2(edge.r + edge.g, 0); half2 neighborWeight = texRECT(neighborWeightTable, bitmask).rg; neighbor = neighborWeight.r; weight = neighborWeight.g; half2 d; // x=dx, y=dy d.x = modf(neighbor/4.0, d.y); d = half2(-1, 1) + half2(4, -1) * d; const half2 neighborCoord = pixelPos + d; neighborColor = texRECT(color, neighborCoord).rgb; half4 outColor; outColor.rgb = lerp(neighborColor, selfColor.rgb, weight); outColor.a = selfColor.a; return outColor; }