Path: blob/21.2-virgl/src/gallium/auxiliary/postprocess/pp_mlaa.h
4561 views
/**1* Copyright (C) 2010 Jorge Jimenez ([email protected])2* Copyright (C) 2010 Belen Masia ([email protected])3* Copyright (C) 2010 Jose I. Echevarria ([email protected])4* Copyright (C) 2010 Fernando Navarro ([email protected])5* Copyright (C) 2010 Diego Gutierrez ([email protected])6* Copyright (C) 2011 Lauri Kasanen ([email protected])7* All rights reserved.8*9* Redistribution and use in source and binary forms, with or without10* modification, are permitted provided that the following conditions are met:11*12* 1. Redistributions of source code must retain the above copyright notice,13* this list of conditions and the following disclaimer.14*15* 2. Redistributions in binary form must reproduce the following statement:16*17* "Uses Jimenez's MLAA. Copyright (C) 2010 by Jorge Jimenez, Belen Masia,18* Jose I. Echevarria, Fernando Navarro and Diego Gutierrez."19*20* Only for use in the Mesa project, this point 2 is filled by naming the21* technique Jimenez's MLAA in the Mesa config options.22*23* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS24* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,25* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR26* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS27* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR28* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF29* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS30* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN31* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)32* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE33* POSSIBILITY OF SUCH DAMAGE.34*35* The views and conclusions contained in the software and documentation are36* those of the authors and should not be interpreted as representing official37* policies, either expressed or implied, of the copyright holders.38*/3940#ifndef PP_MLAA_H41#define PP_MLAA_H4243#include "postprocess/pp_mlaa_areamap.h"4445static const char depth1fs[] = "FRAG\n"46"PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n"47"DCL IN[0], GENERIC[0], PERSPECTIVE\n"48"DCL IN[1], GENERIC[10], PERSPECTIVE\n"49"DCL IN[2], GENERIC[11], PERSPECTIVE\n"50"DCL OUT[0], COLOR\n"51"DCL SAMP[0]\n"52"DCL SVIEW[0], 2D, FLOAT\n"53"DCL TEMP[0..2]\n"54"IMM FLT32 { 0.0030, 0.0000, 1.0000, 0.0000}\n"55" 0: TEX TEMP[0].x, IN[1].xyyy, SAMP[0], 2D\n"56" 1: MOV TEMP[1].x, TEMP[0].xxxx\n"57" 2: TEX TEMP[0].x, IN[1].zwww, SAMP[0], 2D\n"58" 3: MOV TEMP[1].y, TEMP[0].xxxx\n"59" 4: TEX TEMP[0].x, IN[2].xyyy, SAMP[0], 2D\n"60" 5: MOV TEMP[1].z, TEMP[0].xxxx\n"61" 6: TEX TEMP[0].x, IN[2].zwww, SAMP[0], 2D\n"62" 7: MOV TEMP[1].w, TEMP[0].xxxx\n"63" 8: TEX TEMP[0].x, IN[0].xyyy, SAMP[0], 2D\n"64" 9: ADD TEMP[2], TEMP[0].xxxx, -TEMP[1]\n"65" 10: MOV TEMP[0], |TEMP[2]|\n"66" 11: SGE TEMP[2], TEMP[0], IMM[0].xxxx\n"67" 12: DP4 TEMP[0].x, TEMP[2], IMM[0].zzzz\n"68" 13: SEQ TEMP[1].x, TEMP[0].xxxx, IMM[0].yyyy\n"69" 14: IF TEMP[1].xxxx :16\n"70" 15: KILL\n"71" 16: ENDIF\n"72" 17: MOV OUT[0], TEMP[2]\n"73" 18: END\n";747576static const char color1fs[] = "FRAG\n"77"PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n"78"DCL IN[0], GENERIC[0], PERSPECTIVE\n"79"DCL IN[1], GENERIC[10], PERSPECTIVE\n"80"DCL IN[2], GENERIC[11], PERSPECTIVE\n"81"DCL OUT[0], COLOR\n"82"DCL SAMP[0]\n"83"DCL SVIEW[0], 2D, FLOAT\n"84"DCL TEMP[0..2]\n"85"IMM FLT32 { 0.2126, 0.7152, 0.0722, 0.1000}\n"86"IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000}\n"87" 0: TEX TEMP[1].xyz, IN[1].xyyy, SAMP[0], 2D\n"88" 1: DP3 TEMP[0].x, TEMP[1].xyzz, IMM[0]\n"89" 2: TEX TEMP[1].xyz, IN[1].zwww, SAMP[0], 2D\n"90" 3: DP3 TEMP[0].y, TEMP[1].xyzz, IMM[0].xyzz\n"91" 4: TEX TEMP[1].xyz, IN[2].xyyy, SAMP[0], 2D\n"92" 5: DP3 TEMP[0].z, TEMP[1].xyzz, IMM[0].xyzz\n"93" 6: TEX TEMP[1].xyz, IN[2].zwww, SAMP[0], 2D\n"94" 7: DP3 TEMP[0].w, TEMP[1].xyzz, IMM[0].xyzz\n"95" 8: TEX TEMP[1].xyz, IN[0].xyyy, SAMP[0], 2D\n"96" 9: DP3 TEMP[2].x, TEMP[1].xyzz, IMM[0].xyzz\n"97" 10: ADD TEMP[1], TEMP[2].xxxx, -TEMP[0]\n"98" 11: MOV TEMP[0], |TEMP[1]|\n"99" 12: SGE TEMP[2], TEMP[0], IMM[0].wwww\n"100" 13: DP4 TEMP[0].x, TEMP[2], IMM[1].xxxx\n"101" 14: SEQ TEMP[1].x, TEMP[0].xxxx, IMM[1].yyyy\n"102" 15: IF TEMP[1].xxxx :17\n"103" 16: KILL\n"104" 17: ENDIF\n"105" 18: MOV OUT[0], TEMP[2]\n"106" 19: END\n";107108109static const char neigh3fs[] = "FRAG\n"110"PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n"111"DCL IN[0], GENERIC[0], PERSPECTIVE\n"112"DCL IN[1], GENERIC[10], PERSPECTIVE\n"113"DCL IN[2], GENERIC[11], PERSPECTIVE\n"114"DCL OUT[0], COLOR\n"115"DCL SAMP[0]\n"116"DCL SVIEW[0], 2D, FLOAT\n"117"DCL SAMP[1]\n"118"DCL TEMP[0..8]\n"119"IMM FLT32 { 1.0000, 0.00001, 0.0000, 0.0000}\n"120" 0: TEX TEMP[0], IN[0].xyyy, SAMP[1], 2D\n"121" 1: MOV TEMP[1].x, TEMP[0].xxxx\n"122" 2: TEX TEMP[2].y, IN[2].zwww, SAMP[1], 2D\n"123" 3: MOV TEMP[1].y, TEMP[2].yyyy\n"124" 4: MOV TEMP[1].z, TEMP[0].zzzz\n"125" 5: TEX TEMP[1].w, IN[2].xyyy, SAMP[1], 2D\n"126" 6: MUL TEMP[4], TEMP[1], TEMP[1]\n"127" 7: MUL TEMP[5], TEMP[4], TEMP[1]\n"128" 8: DP4 TEMP[1].x, TEMP[5], IMM[0].xxxx\n"129" 9: SLT TEMP[4].x, TEMP[1].xxxx, IMM[0].yyyy\n"130" 10: IF TEMP[4].xxxx :12\n"131" 11: KILL\n"132" 12: ENDIF\n"133" 13: TEX TEMP[4], IN[0].xyyy, SAMP[0], 2D\n"134" 14: TEX TEMP[6], IN[1].zwww, SAMP[0], 2D\n"135" 15: ADD TEMP[7].x, IMM[0].xxxx, -TEMP[0].xxxx\n"136" 16: MUL TEMP[8], TEMP[4], TEMP[7].xxxx\n"137" 17: MAD TEMP[7], TEMP[6], TEMP[0].xxxx, TEMP[8]\n"138" 18: MUL TEMP[6], TEMP[7], TEMP[5].xxxx\n"139" 19: TEX TEMP[7], IN[2].zwww, SAMP[0], 2D\n"140" 20: ADD TEMP[8].x, IMM[0].xxxx, -TEMP[2].yyyy\n"141" 21: MUL TEMP[3], TEMP[4], TEMP[8].xxxx\n"142" 22: MAD TEMP[8], TEMP[7], TEMP[2].yyyy, TEMP[3]\n"143" 23: MAD TEMP[2], TEMP[8], TEMP[5].yyyy, TEMP[6]\n"144" 24: TEX TEMP[6], IN[1].xyyy, SAMP[0], 2D\n"145" 25: ADD TEMP[7].x, IMM[0].xxxx, -TEMP[0].zzzz\n"146" 26: MUL TEMP[8], TEMP[4], TEMP[7].xxxx\n"147" 27: MAD TEMP[7], TEMP[6], TEMP[0].zzzz, TEMP[8]\n"148" 28: MAD TEMP[0], TEMP[7], TEMP[5].zzzz, TEMP[2]\n"149" 29: TEX TEMP[2], IN[2].xyyy, SAMP[0], 2D\n"150" 30: ADD TEMP[6].x, IMM[0].xxxx, -TEMP[1].wwww\n"151" 31: MUL TEMP[7], TEMP[4], TEMP[6].xxxx\n"152" 32: MAD TEMP[4], TEMP[2], TEMP[1].wwww, TEMP[7]\n"153" 33: MAD TEMP[2], TEMP[4], TEMP[5].wwww, TEMP[0]\n"154" 34: RCP TEMP[0].x, TEMP[1].xxxx\n"155" 35: MUL OUT[0], TEMP[2], TEMP[0].xxxx\n"156" 36: END\n";157158159static const char offsetvs[] = "VERT\n"160"DCL IN[0]\n"161"DCL IN[1]\n"162"DCL OUT[0], POSITION\n"163"DCL OUT[1], GENERIC[0]\n"164"DCL OUT[2], GENERIC[10]\n"165"DCL OUT[3], GENERIC[11]\n"166"DCL CONST[0][0]\n"167"IMM FLT32 { 1.0000, 0.0000, -1.0000, 0.0000}\n"168" 0: MOV OUT[0], IN[0]\n"169" 1: MOV OUT[1], IN[1]\n"170" 2: MAD OUT[2], CONST[0][0].xyxy, IMM[0].zyyz, IN[1].xyxy\n"171" 3: MAD OUT[3], CONST[0][0].xyxy, IMM[0].xyyx, IN[1].xyxy\n"172" 4: END\n";173174175static const char blend2fs_1[] = "FRAG\n"176"PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n"177"DCL IN[0], GENERIC[0], PERSPECTIVE\n"178"DCL OUT[0], COLOR\n"179"DCL SAMP[0]\n"180"DCL SVIEW[0], 2D, FLOAT\n"181"DCL SAMP[1]\n"182"DCL SVIEW[1], 2D, FLOAT\n"183"DCL SAMP[2]\n"184"DCL SVIEW[2], 2D, FLOAT\n"185"DCL CONST[0][0]\n"186"DCL TEMP[0..6]\n"187"IMM FLT32 { 0.0000, -0.2500, 0.00609756, 0.5000}\n"188"IMM FLT32 { -1.5000, -2.0000, 0.9000, 1.5000}\n"189"IMM FLT32 { 2.0000, 1.0000, 4.0000, 33.0000}\n";190191static const char blend2fs_2[] =192" 0: MOV TEMP[0], IMM[0].xxxx\n"193" 1: TEX TEMP[1], IN[0].xyyy, SAMP[1], 2D\n"194" 2: MOV TEMP[2].x, TEMP[1]\n"195" 3: SNE TEMP[3].x, TEMP[1].yyyy, IMM[0].xxxx\n"196" 4: IF TEMP[3].xxxx :76\n"197" 5: MOV TEMP[1].xy, IN[0].xyxx\n"198" 6: MOV TEMP[4].x, IMM[1].xxxx\n"199" 7: BGNLOOP :24\n"200" 8: MUL TEMP[5].x, IMM[1].yyyy, IMM[3].xxxx\n"201" 9: SLE TEMP[6].x, TEMP[4].xxxx, TEMP[5].xxxx\n"202" 10: IF TEMP[6].xxxx :12\n"203" 11: BRK\n"204" 12: ENDIF\n"205" 13: MOV TEMP[4].y, IMM[0].xxxx\n"206" 14: MAD TEMP[3].xyz, CONST[0][0].xyyy, TEMP[4].xyyy, TEMP[1].xyyy\n"207" 15: MOV TEMP[3].w, IMM[0].xxxx\n"208" 16: TXL TEMP[5], TEMP[3], SAMP[2], 2D\n"209" 17: MOV TEMP[3].x, TEMP[5].yyyy\n"210" 18: SLT TEMP[6].x, TEMP[5].yyyy, IMM[1].zzzz\n"211" 19: IF TEMP[6].xxxx :21\n"212" 20: BRK\n"213" 21: ENDIF\n"214" 22: ADD TEMP[6].x, TEMP[4].xxxx, IMM[1].yyyy\n"215" 23: MOV TEMP[4].x, TEMP[6].xxxx\n"216" 24: ENDLOOP :7\n"217" 25: ADD TEMP[1].x, TEMP[4].xxxx, IMM[1].wwww\n"218" 26: MAD TEMP[6].x, -IMM[2].xxxx, TEMP[3].xxxx, TEMP[1].xxxx\n"219" 27: MUL TEMP[1].x, IMM[1].yyyy, IMM[3].xxxx\n"220" 28: MAX TEMP[4].x, TEMP[6].xxxx, TEMP[1].xxxx\n"221" 29: MOV TEMP[1].x, TEMP[4].xxxx\n"222" 30: MOV TEMP[3].xy, IN[0].xyxx\n"223" 31: MOV TEMP[5].x, IMM[1].wwww\n"224" 32: BGNLOOP :49\n"225" 33: MUL TEMP[6].x, IMM[2].xxxx, IMM[3].xxxx\n"226" 34: SGE TEMP[4].x, TEMP[5].xxxx, TEMP[6].xxxx\n"227" 35: IF TEMP[4].xxxx :37\n"228" 36: BRK\n"229" 37: ENDIF\n"230" 38: MOV TEMP[5].y, IMM[0].xxxx\n"231" 39: MAD TEMP[4].xyz, CONST[0][0].xyyy, TEMP[5].xyyy, TEMP[3].xyyy\n"232" 40: MOV TEMP[4].w, IMM[0].xxxx\n"233" 41: TXL TEMP[6].xy, TEMP[4], SAMP[2], 2D\n"234" 42: MOV TEMP[4].x, TEMP[6].yyyy\n"235" 43: SLT TEMP[0].x, TEMP[6].yyyy, IMM[1].zzzz\n"236" 44: IF TEMP[0].xxxx :46\n"237" 45: BRK\n"238" 46: ENDIF\n"239" 47: ADD TEMP[6].x, TEMP[5].xxxx, IMM[2].xxxx\n"240" 48: MOV TEMP[5].x, TEMP[6].xxxx\n"241" 49: ENDLOOP :32\n"242" 50: ADD TEMP[3].x, TEMP[5].xxxx, IMM[1].xxxx\n"243" 51: MAD TEMP[5].x, IMM[2].xxxx, TEMP[4].xxxx, TEMP[3].xxxx\n"244" 52: MUL TEMP[3].x, IMM[2].xxxx, IMM[3].xxxx\n"245" 53: MIN TEMP[4].x, TEMP[5].xxxx, TEMP[3].xxxx\n"246" 54: MOV TEMP[3].x, TEMP[1].xxxx\n"247" 55: MOV TEMP[3].y, TEMP[4].xxxx\n"248" 56: MOV TEMP[5].yw, IMM[0].yyyy\n"249" 57: MOV TEMP[5].x, TEMP[1].xxxx\n"250" 58: ADD TEMP[1].x, TEMP[4].xxxx, IMM[2].yyyy\n"251" 59: MOV TEMP[5].z, TEMP[1].xxxx\n"252" 60: MAD TEMP[1], TEMP[5], CONST[0][0].xyxy, IN[0].xyxy\n"253" 61: MOV TEMP[4], TEMP[1].xyyy\n"254" 62: MOV TEMP[4].w, IMM[0].xxxx\n"255" 63: TXL TEMP[5].x, TEMP[4], SAMP[2], 2D\n"256" 64: MOV TEMP[4].x, TEMP[5].xxxx\n"257" 65: MOV TEMP[5], TEMP[1].zwww\n"258" 66: MOV TEMP[5].w, IMM[0].xxxx\n"259" 67: TXL TEMP[1].x, TEMP[5], SAMP[2], 2D\n"260" 68: MOV TEMP[4].y, TEMP[1].xxxx\n"261" 69: MUL TEMP[5].xy, IMM[2].zzzz, TEMP[4].xyyy\n"262" 70: ROUND TEMP[1].xy, TEMP[5].xyyy\n"263" 71: MOV TEMP[4].xy, |TEMP[3].xyyy|\n"264" 72: MAD TEMP[3].xy, IMM[2].wwww, TEMP[1].xyyy, TEMP[4].xyyy\n"265" 73: MUL TEMP[5].xyz, TEMP[3].xyyy, IMM[0].zzzz\n"266" 74: MOV TEMP[5].w, IMM[0].xxxx\n"267" 75: TXL TEMP[0].xy, TEMP[5], SAMP[0], 2D\n"268" 76: ENDIF\n"269" 77: SNE TEMP[1].x, TEMP[2].xxxx, IMM[0].xxxx\n"270" 78: IF TEMP[1].xxxx :151\n"271" 79: MOV TEMP[1].xy, IN[0].xyxx\n"272" 80: MOV TEMP[3].x, IMM[1].xxxx\n"273" 81: BGNLOOP :98\n"274" 82: MUL TEMP[4].x, IMM[1].yyyy, IMM[3].xxxx\n"275" 83: SLE TEMP[5].x, TEMP[3].xxxx, TEMP[4].xxxx\n"276" 84: IF TEMP[5].xxxx :86\n"277" 85: BRK\n"278" 86: ENDIF\n"279" 87: MOV TEMP[3].y, IMM[0].xxxx\n"280" 88: MAD TEMP[5].xyz, CONST[0][0].xyyy, TEMP[3].yxxx, TEMP[1].xyyy\n"281" 89: MOV TEMP[5].w, IMM[0].xxxx\n"282" 90: TXL TEMP[4], TEMP[5], SAMP[2], 2D\n"283" 91: MOV TEMP[2].x, TEMP[4].xxxx\n"284" 92: SLT TEMP[5].x, TEMP[4].xxxx, IMM[1].zzzz\n"285" 93: IF TEMP[5].xxxx :95\n"286" 94: BRK\n"287" 95: ENDIF\n"288" 96: ADD TEMP[4].x, TEMP[3].xxxx, IMM[1].yyyy\n"289" 97: MOV TEMP[3].x, TEMP[4].xxxx\n"290" 98: ENDLOOP :81\n"291" 99: ADD TEMP[1].x, TEMP[3].xxxx, IMM[1].wwww\n"292"100: MAD TEMP[6].x, -IMM[2].xxxx, TEMP[2].xxxx, TEMP[1].xxxx\n"293"101: MUL TEMP[1].x, IMM[1].yyyy, IMM[3].xxxx\n"294"102: MAX TEMP[3].x, TEMP[6].xxxx, TEMP[1].xxxx\n"295"103: MOV TEMP[1].x, TEMP[3].xxxx\n"296"104: MOV TEMP[2].xy, IN[0].xyxx\n"297"105: MOV TEMP[4].x, IMM[1].wwww\n"298"106: BGNLOOP :123\n"299"107: MUL TEMP[5].x, IMM[2].xxxx, IMM[3].xxxx\n"300"108: SGE TEMP[6].x, TEMP[4].xxxx, TEMP[5].xxxx\n"301"109: IF TEMP[6].xxxx :111\n"302"110: BRK\n"303"111: ENDIF\n"304"112: MOV TEMP[4].y, IMM[0].xxxx\n"305"113: MAD TEMP[5].xyz, CONST[0][0].xyyy, TEMP[4].yxxx, TEMP[2].xyyy\n"306"114: MOV TEMP[5].w, IMM[0].xxxx\n"307"115: TXL TEMP[6], TEMP[5], SAMP[2], 2D\n"308"116: MOV TEMP[3].x, TEMP[6].xxxx\n"309"117: SLT TEMP[5].x, TEMP[6].xxxx, IMM[1].zzzz\n"310"118: IF TEMP[5].xxxx :120\n"311"119: BRK\n"312"120: ENDIF\n"313"121: ADD TEMP[6].x, TEMP[4].xxxx, IMM[2].xxxx\n"314"122: MOV TEMP[4].x, TEMP[6].xxxx\n"315"123: ENDLOOP :106\n"316"124: ADD TEMP[2].x, TEMP[4].xxxx, IMM[1].xxxx\n"317"125: MAD TEMP[4].x, IMM[2].xxxx, TEMP[3].xxxx, TEMP[2].xxxx\n"318"126: MUL TEMP[2].x, IMM[2].xxxx, IMM[3].xxxx\n"319"127: MIN TEMP[3].x, TEMP[4].xxxx, TEMP[2].xxxx\n"320"128: MOV TEMP[2].x, TEMP[1].xxxx\n"321"129: MOV TEMP[2].y, TEMP[3].xxxx\n"322"130: MOV TEMP[4].xz, IMM[0].yyyy\n"323"131: MOV TEMP[4].y, TEMP[1].xxxx\n"324"132: ADD TEMP[1].x, TEMP[3].xxxx, IMM[2].yyyy\n"325"133: MOV TEMP[4].w, TEMP[1].xxxx\n"326"134: MAD TEMP[1], TEMP[4], CONST[0][0].xyxy, IN[0].xyxy\n"327"135: MOV TEMP[3], TEMP[1].xyyy\n"328"136: MOV TEMP[3].w, IMM[0].xxxx\n"329"137: TXL TEMP[4].y, TEMP[3], SAMP[2], 2D\n"330"138: MOV TEMP[3].x, TEMP[4].yyyy\n"331"139: MOV TEMP[4], TEMP[1].zwww\n"332"140: MOV TEMP[4].w, IMM[0].xxxx\n"333"141: TXL TEMP[1].y, TEMP[4], SAMP[2], 2D\n"334"142: MOV TEMP[3].y, TEMP[1].yyyy\n"335"143: MUL TEMP[4].xy, IMM[2].zzzz, TEMP[3].xyyy\n"336"144: ROUND TEMP[1].xy, TEMP[4].xyyy\n"337"145: MOV TEMP[3].xy, |TEMP[2].xyyy|\n"338"146: MAD TEMP[2].xy, IMM[2].wwww, TEMP[1].xyyy, TEMP[3].xyyy\n"339"147: MUL TEMP[3].xyz, TEMP[2].xyyy, IMM[0].zzzz\n"340"148: MOV TEMP[3].w, IMM[0].xxxx\n"341"149: TXL TEMP[1].xy, TEMP[3], SAMP[0], 2D\n"342"150: MOV TEMP[0].zw, TEMP[1].yyxy\n"343"151: ENDIF\n"344"152: MOV OUT[0], TEMP[0]\n"345"153: END\n";346347#endif348349350