锘??xml version="1.0" encoding="utf-8" standalone="yes"?> SALVIA 0.5.2 鐨勪紭鍖栫粡鍘嗘槸涓涓滆穼瀹曡搗浼忊濈殑榪囩▼銆傝繖涓繃紼嬬殑緇撴灉寰堢畝鍗曪細 鍦–ore 2 Duo T5800(2.0GHz x 2)涓婏紝Sponza鐨勬ц兘鎻愬崌浜?0%錛孋omplexMesh鎬ц兘鎻愬崌浜?6%銆?/p> SALVIA鐨勬暣涓覆鏌撴祦紼嬩富瑕佹槸浠ヤ笅鍑犻儴鍒嗭細 鐢ㄤ簬嫻嬭瘯鐨勫満鏅細 鏈鍒濈殑鐗堟湰錛圴1231錛変腑錛屾ц兘鐨勪富瑕佺摱棰堝湪鎻掑奸樁孌碉紝鍚勭鑰楁椂鏋楁灄鎬繪誨崰浜嗕竴鍗婁互涓婏紙50% - 70%錛夈?/p> 鐩告瘮涔嬩笅鍏朵粬闃舵瀵規ц兘鐨勫獎鍝嶈涔堟湁闄愶紝瑕佷箞娌℃湁澶氬皯浼樺寲絀洪棿銆傛墍浠ユ渶榪戜竴鍛ㄧ殑浼樺寲錛屽氨閮介泦涓湪浜嗏滄彃鍊尖濅笂銆?/p> 綰挎х殑鎻掑肩畻娉?/strong>甯歌鐨勫疄鐜版湁涓ょ錛?/p> 絎竴縐嶆槸鎷縐V鎻掑鹼紝絎簩縐嶆槸鐢╠dx鍜宒dy绱Н銆?/p> UV鏄厛璁$畻鍍忕礌鐨剈鍜寁錛堝熀鏈柟娉曟槸鐢ㄩ潰縐瘮錛屼笉璁板緱灝卞涔犱竴涓嬩腑瀛﹀嚑浣曞惂錛夛紝鐒跺悗鐢ㄦ彃鍊煎叕寮忥細 pixel = v0 * u + v1 * v + v2 * (1-u-v) 鍚庤呯殑姝ラ鏄変竴涓富欏剁偣錛岀劧鍚庤綆楄繖涓《鐐圭殑ddx鍜宒dy錛屾渶鍚庣敤 pixel = v0 + ddx * offset_x + ddy * offset_y 璁$畻鍑虹浉搴旈《鐐廣?/p> 浣嗘槸鍦ㄥ浘褰㈠涓紝鎴戜滑榪橀渶瑕佸鎻掑艱繘琛岄忚淇錛岃幏寰楀湪3D絀洪棿涓嚎鎬х殑鎻掑肩粨鏋溿?/p> 鎴戜滑灝嗘楠や慨姝e埌閫忚絀洪棿錛?/p> 鍏堝皢v0錛寁1錛寁2寮勫埌閫忚絀洪棿涓紝鍙樻垚projected_v0, projected_v1, projected_v2 瀵逛簬UV鐨勬彃鍊兼槸 pixel = ( projected_v0*u + projected_v1*v + projected_v2 * (1-u-v) ) / pixel_w 瀵逛簬鐢╠dx鍜宒dy鐨勭瘡縐叕寮忔槸錛?/p> pixel = ( projected_v0 + projected_ddx * offset_x + projected_ddy * offset_y ) / pixel_w 浣曞拸錛圙raphixer錛夊ぇ紲炰箣鍓嶄篃鍐欎簡涓涓覆鏌撳櫒錛屾瘮鎴戝揩璁稿錛堝ぇ姒傛槸4-6鍊嶏級錛岀敤鐨勬槸UV錛?/p> gameKnife澶х涓や釜紺兼嫓鍐欐垚鐨勬覆鏌撳櫒錛岄熷害姣旀垜鐢ㄤ簲騫村啓鍑烘潵鐨勫崐鎴愬搧瑕佸揩7鍊嶏紝鐢ㄧ殑鍔炴硶鏄疞erp鍒癝canline涓婏紝鍐峀erp鍒板儚绱犮?/p> SALVIA閲囩敤浜嗙瘡縐硶錛?/p> 娉ㄦ剰閭d釜MAX_ATTRIBUTE_COUNT錛岃繖涓奸氬父姣旇緝澶э紝鍦╲1231涓紝瀹冩槸32銆?/p>
涓嶈繃錛屾樉鐒舵垜浠笉闇瑕佸鎵鏈夌殑灞炴ц繘琛岃綆椼傛晱鏁忓湪榪欓噷榪愮敤浜嗕竴鐐瑰皬灝忕殑鎶宸ц繘琛屼簡浼樺寲錛氬彧璁$畻蹇呰鐨勫睘鎬с傚悓鏃訛紝涓轟簡鍑忓皯鍒嗘敮鐨勪嬌鐢紝浠栫敋鑷崇敤 騫墮厤鍚堝嚱鏁版寚閽堢殑鏂規硶錛屼互淇冧嬌緙栬瘧鍣ㄥ睍寮寰幆錛屽噺灝戝垎鏀?/p>
涓嶈繃浠庡疄闄呯敓鎴愮殑姹囩紪鏉ョ湅錛岃繖涓儴鍒嗗茍娌℃湁琚睍寮鍒版湡鏈涚殑褰㈠紡錛屽彲鑳芥槸緙栬瘧鍣ㄨ涓簒86鐨凚ranch Predication鎬ц兘宸茬粡瓚沖楂樹簡鍚с?/p>
榪欎釜鈥滀紭鍖栤濆湪v1231涓氨宸茬粡鍏峰浜嗐?/p>
絎竴涓狿rofiling鏄敤BenchmarkPartOfSponza鍜孲ponza璺戠殑錛泆nproject錛宱perator +=鍜宱perator = 鍔犲湪涓璧峰ぇ綰﹀崰鐢ㄤ簡15-20%鐨勬椂闂淬傚崟鐙殑unproject 鏈鍒濈殑瀹炵幇灝辨槸鏅氱殑鏍囬噺銆傛棦涓嶈姹傚榻愶紝涔熸病鏈変嬌鐢⊿IMD銆?/p>
鎵浠ュ綋鐒朵細浠ヤ負鐢ㄤ簡SIMD鍚庯紝浼樺寲鏁堟灉浼氬緢濂姐備簬鏄湪v1232涓紝涓棿欏剁偣鍜屽儚绱犺緭鍏ョ殑鍒嗛厤閮戒互16瀛楄妭瀵歸綈錛寀nproj錛?=鍜?涔熼兘浣跨敤浜哠SE榪涜浜嗛噸鍐欍?/p>
浠庤窇鍒嗘潵鐪嬶紝PartOfSponza鎬ц兘鎻愬崌浜?0%銆備絾鏄紝鍦ㄦ祴璇旵omplexMesh鍜孲ponza鏃訛紝騫舵湭鍙戠幇甯х巼鏈夋樉钁楁彁鍗囥?/p>
鍏跺疄鍦ㄨ繘琛屼紭鍖栦箣鍓嶏紝浣曞拸灝卞憡璇繃鎴戯紝鍥犱負鐜頒唬CPU鐨勪竴浜涙妧鏈紝姣旀柟璇磋秴鏍囬噺鍟ョ殑錛屽洓涓暟鎹搴︾殑SSE鍜屾爣閲忚繍綆楃浉姣旓紝灝卞彧鏈?0%鐨勬ц兘宸窛銆?/p>
騫朵笖榪欎簺鍑芥暟鐨勬寚浠ゅ凡緇忔瀬涓虹畝鍗曪紝鐡墮涔熷緢鏄庣‘鐨勮惤鍦ㄨ綆楁寚浠や笂銆備緥濡俇nproject浼樺寲鍚庯紝鎬ц兘鐒︾偣灝辮惤鍦╛mm_mul_ps涓婏紙3.7%錛夛紝鍑犳棤浼樺寲浣欏湴銆?/p>
鍦ㄨ繘琛岀浜岃疆浼樺寲涔嬪墠鍚屾牱榪愯浜嗕竴嬈rofiling銆傚洜涓哄PartOfSponza鎬ц兘鍩烘湰婊℃剰錛屽洜姝よ繖嬈′紭鍖栫殑鐩爣涓昏鍦⊿ponza涓娿?/p>
鎺掑悕鍓嶅嚑浣嶇殑灝忓嚱鏁幫紝鍒嗗埆鏄痵ub_n錛寀nproj錛?= 鍜宼ex2D銆傚sub_n渚嬭浼樺寲鍚庯紝鎬ц兘娌′粈涔堝彉鍖栥傚綋鐒訛紝榪欎篃鏄剰鏂欎箣涓殑浜嬫儏浜嗐?/p>
鍥犳錛岀浜岃疆浼樺寲渚跨潃閲嶈冭檻鍦ㄦ彃鍊肩畻娉曟湰韜笂銆?/p>
鍦ㄤ紭鍖栦箣鍓嶏紝鎴戝皾璇曞浠g爜鎴愭湰鍋氫釜綺楃暐鐨勮瘎浼幫細 鍦ㄧ幇鏈夌畻娉曚笅錛屽亣璁炬瘡涓儚绱犳湁N涓渶瑕佹彃鍊肩殑灞炴э紝鍒欏鉤鍧囨瘡涓儚绱犳湁 錛坈orner錛?N/16涓 + 2N/16涓箻娉?+ 2N/16涓姞娉?+ N/16涓啓 錛坸錛?=錛?N涓 + N涓姞娉?+ N涓啓 錛坸錛?錛?nbsp; N涓 + 1涓爣閲忛櫎娉?+ N涓箻娉?+ N涓啓 錛坹錛?=錛?N/4涓 + N/4涓姞娉?+ N/4涓啓 錛坹錛?錛?N/4涓 + N/4涓啓 鍥犱負姣忎釜閮芥槸鍑芥暟鎸囬拡錛屾墍浠ヨ繖浜涢兘鏄紭鍖栦笉鎺夌殑銆傚洜姝ら鍏堝皢涓浜涙搷浣滃悎騫朵簡涓涓嬶紝姣斿鎶?= 鍜?鍚堝茍浠ュ噺灝戜竴涓嬭鍐欐搷浣溿傚彧鍙儨鏁堟灉涔熶笉鏄緢鏄庢樉銆?/p>
絎簩鍒灝辯爫鍒扮畻娉曠殑澶翠笂銆傚洜涓虹瘡鍔犳湰韜槸涓轟簡鍑忓皯涔樻硶鐨勮繍鐢紝浣嗘槸榪欏彲鑳藉甫鏉ヤ簡澶氫綑鐨勫瓨鍙栧紑閿銆?/p>
鍥犳鐩存帴濂楃敤鍏紡錛?/p>
pixel = ( projected_v0 + projected_ddx * offset_x + projected_ddy * offset_y ) / pixel_w 榪欐牱灝辨湁錛?N璇伙紝2N涔樻硶錛?N鍔犳硶錛孨涓箻娉曞拰N涓啓錛堝亣璁懼瘎瀛樺櫒澶熺敤鐨勮瘽錛夈備笉綆桟orner鐨勮綆楁垚鏈紝榪欐牱姣旇緝涓涓嬶紝灝辯瓑浜庢槸3N/4涓錛孨/2+N涓啓錛孨/4涓姞娉曟潵鎹㈠彇2N涓箻娉曠殑鏃墮棿銆傛湰鏉ヤ互涓轟綔涓篒O鐡墮鐨勫簲鐢紝榪欐牱鍙互鎻愰珮涓浜涙ц兘銆備笉榪囩粨鏋滆瘉瀹炶繖涓拱鍗栧疄鍦ㄦ槸寰堜笉鍒掔畻錛屾暣浣撴ц兘涓嶅鍙嶅噺銆?/p>
铏界劧鎵鏈夌殑鎿嶄綔鍙拡瀵瑰凡浣跨敤鐨勫睘鎬э紝浣嗘槸絀洪棿涓婅繕鏄氮璐逛簡璁稿銆?/p>
鑰冭檻鍒板唴瀛樺崰鐢ㄨ緝澶т篃浼氬鑷翠竴浜涙ц兘鎹熷け錛屼簬鏄皢MAX_ATTRIBUTE_COUNT浠?2涓嬭皟鍒頒簡8銆?/p>
緇撴灉浠や漢澶ц穼鐪奸暅銆傛ц兘鐬棿鎻愬崌浜?0-30%涔嬪銆?/p>
鍐嶅姞涓奡SE涔熶笉鐭ラ亾涓轟粈涔堝紑濮嬪彂鍔涗簡錛屼嬌鐢ㄤ笂涔嬪悗鎬ц兘澶х害鍙堟湁浜?0-15%鐨勬彁鍗囥?/p>
鎴戠寽嫻嬪彲鑳芥槸鍥犱負鎹㈤〉棰戠巼涓嬮檷錛屼互鍙奀ache鐨勫懡涓巼鎻愬崌銆備笉榪囨墜涓婃病鏈塚Tune榪欑宸ュ叿錛屾墍浠ヤ篃涓嶅お濂介獙璇併?/p>
鍦ㄨ繖杞紭鍖栦箣鍚庯紝PartOfSponza鍑虹幇浜嗙簿搴﹂棶棰樸傚洜涓鴻閿ヤ綋鐨勪笂涓嬪乏鍙沖洓涓潰閮芥病鏈塁lip錛屾墍浠ュ彲鑳戒細鍑虹幇闈炲父澶х殑涓夎褰€傝繖鏍風瘡縐殑鏃跺欎竴鏃﹁搗濮嬬偣閫夋嫨鐨勪笉濂斤紝灝變細鍑虹幇姣旇緝澶х殑璇樊銆傚湪涔嬪墠鐗堟湰涓紝浣跨敤/fp: precise鏉ュ噺灝戣繖涓闂鍑虹幇鐨勬満浼氥備絾鏄洜涓轟嬌鐢ㄤ簡SSE錛屼篃璁╄繖涓棶棰樺啀闅捐В鍐熾傚洜姝ゆ垜閫夌敤浜嗕竴浜涘姙娉曪紝鏉ユ敼鍠勭簿搴﹂棶棰樸傚湪澶ч棶棰橀兘淇浠ュ悗錛屾崲鐢?fp: fast鏉ョ紪璇戞暣涓猄ALVIA錛屾渶緇堜篃鑾峰緱浜?-10%宸﹀彸鐨勬ц兘鏀剁泭銆?/p>
瀵逛簬榪愮畻鍜孖O閮藉瘑闆嗙殑紼嬪簭鏉ヨ錛屼紭鍖栫湡鍙兘鏄壍涓鍙戣屽姩鍏ㄨ韓鐨勯棶棰樸傛瘮濡傚湪鎴戠殑渚嬪瓙涓紝鎵鏈夌寽嫻嬫槸鎬ц兘鐡墮鐨勫湴鏂癸紝閮芥病鏈夊緱鍒伴鎯充腑鐨勬敼鍠勩?/p>
鍊掓槸鍦ㄥ唴瀛樺崰鐢ㄨ繖涓湴鏂規棤蹇冩彃鏌籌紝鎵嶅緱浠ユ煶鏆楄姳鏄庯紝鑰屼笖榪樿鍒殑浼樺寲鏂規浣撶幇浜嗕環鍊箋傛墍浠ュ鏋滀綘涓嶅儚qiaojie澶х墰閭f牱瀵箈86浜嗗鎸囨帉錛岃繕鏄涔犳儻浜庝粠澶氭柟闈㈢寽嫻嬶紝渚嬪鍐呭瓨鍗犵敤錛屽榻愭垨绱х緝錛岃綆楀己搴︼紝璁垮瓨瀵嗗害錛屽茍琛屽害絳夊涓搴﹁繘琛岃鎯沖茍鐢ㄥ疄璺靛幓楠岃瘉銆傚敖綆″彲鑳戒細閬囧埌寰堝鎸姌錛屼絾鏄紝鍙鏄洿瑙変笂鏈変紭鍖栫殑浣欏湴錛屼竴鑸兘鍙互鎵懼埌鍚堥傜殑鏂規銆?/p> 璋ㄤ互姝ゆ枃錛岀邯蹇墊垜鍦ㄤ簲騫翠腑浣滃嚭鏉ョ殑鍚勭鍌婚煎喅瀹氥? SALVIA鍑虹幇鐨勫師鍥犲叾瀹炲緢鍙瑧銆?7騫村簳鐨勬椂鍊欐垜姝e湪鍐欎竴綃噋aper錛岃GP-GPU鐨勩傞偅涓椂鍊欒繕娌℃湁CUDA涓綾葷殑涓滆タ錛屼竴鍒囬兘瑕侀潬Shader鏉ャ傛湰鏉ユ垜鎵嬩笂鐨勬樉鍗℃槸涓鍧?550鐨凷DRAM鐨勭畝鐗堛備絾鏄鏂囧揩緇撴潫鐨勬椂鍊欙紝紿佺劧榪欏崱鐨勯鎵囧氨緗㈠伐浜嗐傜劧鍚庢垜闄嶉鐢ㄤ簡澶ф涓涓鏈堬紝鍗′篃搴熸帀浜嗐傚洜涓烘病閽變拱鏂版樉鍗★紝鎴戝氨鎵撶畻鍐欎竴涓瘮D3D REF蹇殑杞歡娓叉煋鍣ㄣ?/p> 07騫村簳鐨勬椂鍊欙紝瀹炵幇浜嗙涓鐗堢殑SALVIA錛屽綋鏃惰繕鍙玈oftArt銆傜涓鐗堢殑SALVIA鍏跺疄榪樼畻涓嶉敊錛屾祦姘寸嚎鐨勫畬鏁寸▼搴﹀埌鐜板湪閮借繕娌¤秴榪囷紝鍖呮嫭Cpp鐨刅ertex Shader鍜孭ixel Shader銆佺汗鐞嗛噰鏍楓佸厜鐓т粈涔堢殑涓搴斾勘鍏ㄣ傚湪寮鍙戣繃紼嬩腑錛屼富瑕佸弬鑰僄L 2.0鐨凷pecification錛屼篃闃呰浜嗕竴浜涘悓綾誨瀷杞歡鐨勪唬鐮侊紝渚嬪Muli3D鍜孧esa銆?/p> 涓浜涘綆$嚎鑷沖叧閲嶈鐨勬蹇碉紝渚嬪閫忚淇銆佸浐瀹氱綰夸笂綰圭悊閲囨牱鐨凩oD Level銆丆lip閮芥槸鍊熷姪浜嶴pec鍜岃繖浜涘疄鐜板緩绔嬬殑銆?/p> 濡傛灉鏄浐瀹氱綰跨殑璇濓紝閭d箞SALVIA鍋氬埌榪欎簺鐗規т篃灝辮凍澶熶簡銆備絾鏄粠SALVIA涓寮濮嬶紝鎴戝氨甯屾湜璁╁畠鎴愪負涓涓狿ure Shader鐨勭綰匡紝鍥哄畾綆$嚎鐨勯偅浜涚姸鎬佸疄鍦ㄥお鐑︿漢浜嗐傛湰鏉pp瀹炵幇鐨凷hading language鑳芥弧瓚崇粷澶ч儴鍒嗙殑闇瑕佷簡錛屼絾鏄湁涓涓壒鎬у交搴曢毦鍊掍簡鎴戯細Pixel Shader鐨勫樊鍒嗗嚱鏁癲dx/ddy銆?/p> 榪欎釜涓滆タ鐨勫伐浣滃師鐞嗘槸榪欐牱鐨勶細 姣旀柟璇存垜鏈変竴孌祍hader鍑芥暟錛?/p> 鍦≒ixel Shader榪愯鐨勬椂鍊欙紝瀹冧竴嬈℃ф墽琛?x2鐨勪竴涓皬鍧楋紝鎵鏈夌殑鎸囦護瀵逛簬鏁翠釜鍧楀唴閮芥槸鍚屾鎵ц鐨勩傞亣鍒癲dx(x)鍚庯紝鍥涗釜鍍忕礌閮芥濂芥墽琛屽埌榪欓噷錛岀劧鍚庢妸x鏂瑰悜涓婄殑鐩擱偦涓や釜鍍忕礌鐨勫眬閮ㄥ彉閲弜姹備釜宸紝灝卞彲浠ュ緱鍑篸dx浜嗐?/p>
榪欎釜瑕佹眰鍦–++涓緢闅懼疄鐜般?/p>
鍏跺疄濡傛灉瑕佽緝鐪燂紝褰撶劧榪樻槸鏈夊姙娉曠殑錛?/p>
浣嗘槸榪欎簺瀹炵幇錛岃涔堝洜涓哄垏鎹笂涓嬫枃鑰屽彉寰楀鎱㈡棤姣旓紱瑕佷箞灝辨槸瀹屽叏娌℃湁騫沖彴縐繪鎬с傛兂鏉ユ兂鍘伙紝榪樻槸瑕佽浠g爜鎸夌収紜歡鐨勬柟寮廠IMD鎵ц銆?/p>
鎵浠ユ垜鏈緇堟í涓嬩竴鏉″績錛氳涓哄畠鍋歋hading Language Compiler銆傜劧鍚庡紑濮嬩簡婕暱鐨凜ompiler寮鍙戙傚悗鏉ユ垜鐪嬪洟闀塊偅涓婃極鏃犳澧冪殑鍏湀銆嬬殑鏃跺欙紝綆鐩村氨鏄鐫闀滃瓙鐓ц嚜宸辯殑鍌婚箋傛墍浠ユ垜鎵嶆洿榛戝洟闀褲?/p>
08騫村埌09騫存垜閮藉湪澶栭潰瀹炰範錛屼竴鍛ㄤ笂鍏ぉ鐝紝涓澶╁緱騫蹭笂鍗佷釜澶氬皬鏃躲備粠2008騫村垵鍒?鏈堜喚錛屾垜閮戒竴鐩村湪鐪嬬紪璇戝師鐞嗗拰鎴愮啛鐨勮娉曞簱銆傚簳瀛愯杽錛岀湅璧鋒潵寰堝悆鍔涖傚埌浜?鏈堜喚寮濮嬭璁hader鐨凟BNF銆傝璁¤璦錛屼笉澶栦箮鏄笁涓柟闈細搴旂敤鍦烘櫙銆佽娉曞拰搴撶殑鏀寔銆傚敖綆℃湁鐜版垚鐨凥LSL鍜孏LSL浣滃弬鑰冿紝浣嗗浜庢垜浠?寮濮嬭璁¤璦鏉ヨ錛岃繖浜涜璦鐨勮娉曞拰璇箟閮借繃浜庡鏉備簡銆傛垜闇瑕佽璇█鐗規ф參鎱㈢殑娣誨姞榪涙潵銆?/p>
鑰冭檻鍒癏LSL鍜孋姣旇緝鎺ヨ繎錛孋鐨勬枃娉曞弬鑰冭祫鏂欏張寰堝錛屼簬鏄垜閫夋嫨浜嗕粠C寮濮嬭鍓娉曘備絾鏄枃娉曡繖涓笢瑗匡紝騫朵笉綆綆鍗曞崟鏄爲鐘剁殑緇撴瀯錛屾爲涓婄殑浠諱綍涓涓娉曡妭鐐癸紝閮藉彲鑳戒細寮曠敤鍒板叾瀹冪殑鏂囨硶瑙勫垯銆傚洜姝や慨鏀逛簡涓鏉¤鍒欏悗錛屼綘浼氬彂鐜板畠鍙兘浼氬拰鍏跺畠瑙勫垯鍐茬獊浜嗭紝浜屼箟浜嗐備簬鏄鍓鍒掑畬铔嬩簡銆?/p>
褰撶劧錛屽鏋滄垜鐜板湪鏉ヨ璁¤娉曪紝鑲畾浼氬拰闄堟眽瀛愪竴鏍鳳紝鐩存帴浠嶶se Case灝辮兘鎶奅BNF鍐欏嚭鏉ワ紝鍐嶇◢寰鑼冧竴涓嬶紝涓闂ㄤ笉閭d箞澶嶆潅鐨勮璦灝辨垚浜嗐傚綋鐒跺儚C++榪欑鍙樻佽璦錛岃繖鏍峰仛鏄仛涓嶅嚭鏉ョ殑銆備絾褰撴椂鎴戞樉鐒朵笉鍏峰閭f牱鐨勮兘鍔涖備粠涓冩湀浠藉紑濮嬪氨紓曠緇婄粖鍦拌鍓簡涓浜涜娉曠壒鎬т箣鍚庣殑璇█錛屽埌浜嗗叓鏈堜喚鎵嶅嚭浜嗕釜鍗冪柈鐧懼瓟鐨勬柟妗堛?/p>
浣滀負瀹屽叏涓嶆噦緙栬瘧鍣ㄧ殑鐭揣錛岃璁¤璦涓瀹氳鍜岀紪璇戝櫒鐨勫紑鍙戞斁鍦ㄤ竴璧鋒墠鑳芥湁鐐規敹鑾楓傛垜鐢ㄨ繃Flex/Bison錛岀敤榪嘇NTLR銆備絾鏄綋鏃舵垜瀵圭紪璇戝櫒鐗瑰埆鐨勯檶鐢燂紝緇勭粐Build鐨勮兘鍔涗篃姣旇緝寮憋紝鍥犳瀹冧滑鍦ㄤ嬌鐢ㄤ笂綣佺悙鍜岄毦浜庤皟璇曠粰鎴戝甫鏉ヤ簡寰堝ぇ鐨勫洶鎵般備笉榪囬偅鏃舵垜瀵規ā鏉褲佸厓緙栫▼鍜孊oost灝卞凡緇忕浉褰撶啛鎮変簡錛屾棤璁烘槸寮鍙戙侀槄璇諱唬鐮佽繕鏄疍ebug閮借兘杞繪澗搴斾粯錛屾墍浠ユ垜鎸戜簡鍗婂ぉ錛岄変簡Boost.Spirit銆?/p>
Boost.Spirit鏄釜寰堝钁╃殑涓滆タ銆傚畠鎯沖湪C++閲岄潰鎻愪緵涓涓被浼間簬EBNF銆佸彲浠ュ畾涔夎娉曞垎鏋愯鍒欑殑鏂硅█銆傝璁〤++鐪嬭搗鏉ュ儚涓涓柟璦錛屽綋鐒舵槸瑕佷嬌鐢ㄧ鍑洪娌$殑鎿嶄綔絎﹂噸杞姐傚綋鐒訛紝鍗充究鏄慨楗板悗鐨勮娉曪紝鐪嬭搗鏉ヤ篃榪樻槸浼氭湁鐐規殑銆侲BNF涓殑瑙勫垯 鍦–pp涓渶綆鍗曞彲浠ヨ〃紺烘垚 铏界劧鐪嬭搗鏉ユ湁鐐逛笐闄嬶紝浣嗘槸瀹冨凡緇忓畬鍏ㄦ弧瓚充竴涓狣SL鐨勮姹備簡錛氱洿瑙傜殑闈㈠悜瑙e喅鏂規銆?/p>
涓嶈繃濡傛灉鐗墊秹鍒板疄鐜扮粏鑺傦紝鍦–++閲岄潰瑕佸啓涓涓張綆鍗曘佸張鍙敤Parser Generator錛岄偅鍑犱箮鏄笉鍙兘瀹屾垚鐨勪換鍔°傝搗鐮佸浜嶤ombinator-based Parser鏉ヨ錛屽畠澶熺畝鍗曪紝浣嗘槸娌℃湁CPS鐨勬敮鎸佷細浠ら敊璇仮澶嶈繖涓綾葷殑鍛ㄩ伃璁捐鍙樺緱鏋佷負鍙曪紱濡傛灉Rule鍙槸grammar definition錛屼笉鐗墊秹鍒頒換浣昉arser鐨勬瀯閫狅紝閭hВ鏋愯繖涓猟efinition鐨勫鏉傚害鍜岃皟璇曢毦搴﹀張涓嶄簹浜嶢NTLR鎴栬匶acc榪欐牱鏈夊崟鐙剼鏈殑宸ュ叿銆傛墍浠ヨ繖欏瑰伐浣滐紝榪樻槸浜ょ粰Haskell榪欐牱鐨勮璦鏉ュ畬鎴愬惂銆?/p>
閫氳繃浣跨敤Spirit銆佽璁$紪璇戝櫒銆佹姌鑵炬枃娉曪紝璁╂垜瀵笴ompiler鍜孋pp鐨勭悊瑙i兘閫掕繘浜嗕竴澶ф銆傚啀鍔犱笂08騫村叏騫撮兘鍦ㄥ仛GUI鐩稿叧鐨勪笢瑗匡紝涔熻鎴戝緙栬瘧鍣ㄧ殑鐞嗚В鏈夋墍鍔犳繁銆?/p>
09騫翠笅鍗婂勾鎴戜竴鐩撮兘姣旇緝鍔ㄨ崱錛屼笉榪囧埌騫村簳鎬葷畻鏄畨瀹氫簡涓嬫潵銆?/p>
09騫?2鏈堜喚鐨勬椂鍊欙紝Boost鍗囩駭浜嗭紝Spirit涔熷埌浜哣2銆傚埌浜?鏈堜喚錛屾垜璐逛簡鐐瑰姛澶紝鎶奦2鐨凷pirit鎶樿吘鍒癝ALVIA鐨勫墠绔笂銆侾arser涔熸湁鎵鍙樺寲錛氬墠涓鐗堢殑Parser榪樻瘮杈冭崏鐜囷紝榪欎竴鐗堢殑Parser鎴戝嚑涔庢槸瀹屽叏鎸夌収Spirit鐨凞emo涓殑鏂規榪涜鐨勩傛鏃舵垜涔熷紑濮嬪皾璇曠潃鎾板啓璇箟鍒嗘瀽銆傛庝箞鍋氬嚱鏁伴噸杞介兘鏄湪閭d釜鏃跺欏紑濮嬬偣鐨勬妧鑳芥爲錛岃櫧鐒跺湪鐜板湪鐪嬫潵閮芥槸姝殑銆備負浜嗘墽琛岀敓鎴愮殑浠g爜錛屾垜璁捐浜嗗崐涓櫄鎷熸満錛岀劧鍚庤繕鍑嗗鍐欑偣鏁欑▼銆備絾鏄垜鎬濆墠鎯沖悗錛屽浜嶴hader榪欐牱涓縐掗挓瑕佽皟鐢?0M嬈$殑鍑芥暟錛屾棤璁哄浣曡櫄鎷熸満閮芥槸涓嶅悎閫傜殑銆?/p>
鎵浠ユ垜灝卞紑濮嬬澶囪嚜宸辯殑鍚庣銆傝姹傚氨鏄竴涓瓧錛氬揩銆傞偅涓椂鍊欙紝闄堟眽瀛愭鍦ㄥ鎬庝箞鍐檟86鐨凧IT銆備絾鏄垜鐨勮璦鍒皒86鏈夊緢闀跨殑璺璧般傛庝箞鍘誨垎閰嶅瘎瀛樺櫒錛屾庝箞鎶婄被鍨嬭漿鎹㈠埌x86鐨凬ative錛屾庝箞閫夋嫨鎸囦護錛屾垜閮芥槸涓鐭ュ崐瑙g殑銆傚嚟鎴戝綋鏃剁殑鐭ヨ瘑錛岃繖涓瀹氭槸涓嶅彲鑳藉畬鎴愮殑銆?/p>
浜庢槸鍦ㄩ槄璇誨畬Intel Architecture鎵嬪唽鍜屼紭鍖栨寚鍗楀悗錛屾垜鍐沖畾鍘繪壘涓涓悎鐢ㄧ殑鍚庣銆傝冭檻榪囧緢澶氬彲閫夌殑鍔炴硶錛屼緥濡傜敓鎴怌++鐨凜ode鐒跺悗緙栬瘧鎴怐LL錛涗嬌鐢═iny C錛圱CC錛夛紱鎴栬呮槸JIT銆備絾鏄畠浠己鐐歸兘鏄緢鏄庢樉鐨勩傜紪璇戞垚DLL蹇呴』瑕佽嚜宸辮鍓竴涓狦CC鍑烘潵錛汿iny C鐨勬晥鐜囧茍涓嶆槸寰堝ソ錛汮IT寰堝鏉傦紙璧風爜鍦ㄩ偅涓椂鍊欐槸榪欐牱錛夈備笉榪?鏈堜喚鐨勬椂鍊欙紝鏁忔晱榪樻槸璋佹寚鐐逛簡鎴戜竴涓嬶紝璇翠綘鍙互鍘葷湅鐪婰LVM銆傜劧鍚庢垜鍘諱竴鐪嬶紝鐗涢鹼紝灝辨槸鎴戣鐨勪笢瑗匡紒鐒跺悗鎴戝氨寮濮嬪LLVM銆侺LVM鐨処R寰堝ソ瀛︼紝涓涓笅鍗堝氨鎼炰簡涓狧ello world銆?/p>
榪欎釜鏃跺欙紝minmin涔熷湪SALVIA涓婂疄鐜頒簡Half-Space鐨勫厜鏍呭寲綆楁硶銆?/p>
閭d釜鏃跺欐垜韙岃簢婊″織錛屾剰姘旈鍙戯紝涓夋湀璧惰嫳錛屼簲鏈堣秴緹庛?/p>
鍙病鎯崇潃灝辮繖涔堟帀鍧戦噷闈㈠幓浜嗐?/p>
涓諱綋澶т漢鐪熸槸紲烇紝浜斾釜瀛楀氨姒傛嫭浜嗘垜2010騫翠竴騫寸殑鍔姏銆?/p>
鎵浠ユ暣涓竴騫翠腑錛孲ALVIA鐨勫紑鍙戝氨鏄啓鍐欏仠鍋滐紝鍋滃仠鍐欏啓銆傚彲浠ヨ08騫村垵鐨勯攼姘旓紝宸茬粡娑堢(鐨勫樊涓嶅浜嗐傚埌浜?鏈堜喚鐨勬椂鍊欙紝鎴戞瘯涓氫簡錛屾柊宸ヤ綔涔熷熀鏈笂紜畾鍜岀啛鎮変簡錛屾垜灝卞拰minmin璇達紝浠庣幇鍦ㄥ紑濮嬫垜鍐欏崐騫存姤鍚э紝璁茶堪涓涓嬪崐騫存潵鐨勮繘灞曘備簬鏄究鏈変簡絎竴綃囬」鐩畝鎶ャ?/p>
涔熸鏄粠閭d釜鏃跺欙紝鎴戝喅瀹氳鎶奡ALVIA浣滀負涓嬈懼疄楠屽搧鏉ュ寰咃紝鐢ㄤ笂鎵鏈夋垜涓嶄細鐨勬垨鑰呮柊瀛︾殑涓滆タ銆傚崟鍏冩祴璇曪紝CMake宸ュ叿閾撅紝涓篠hader璁捐鐨凱ipeline錛岃涔夊垎鏋愬拰鍚庣鐨勫師鍨嬮兘鍦ㄩ偅涓騫村姞鍏ヤ簡SALVIA銆傝櫧鐒朵粠瀹炵幇涓婂畠浠凡緇忎笌鐜板湪鐩歌窛鐢氳繙錛屼絾鏄搗鐮佷竴鍒囬兘榪樻槸寰濂界殑鏂瑰悜鍙戝睍銆?/p>
鍙﹀錛?8騫村埌09騫存湡闂村湪瀹炰範鐨勬椂鍊欑Н绱殑鏁欒寮濮嬫參鎱㈢殑閰濋吙鍜屽彂閰碉紝鏁忔嵎涔熼愭笎鎴愪負浜嗘垜寮鍙戣繃紼嬩腑鐨勪富瑕佹寚鍗椼?/p>
鍩烘湰涓婏紝閭d釜鏃跺欑Н绱簡寰堝蹇呰鐨勭粡楠屽拰鏁欒銆傚綋鐒剁粷澶у鏁版槸鏁欒銆?/p>
鍦?1騫寸殑鏄ヨ妭鏈熼棿錛屾垜緇堜簬鏃犳硶蹇嶅彈Spirit鐨勯夯鐑︿簡錛?/p>
瑕佺煡閬擄紝浠ヤ笂榪欎簺榪樻槸搴旂敤浜哠pirit鎸囧崡涓殑緙栬瘧閫熷害浼樺寲鏂規涔嬪悗鐨勭粨鏋溿?/p>
榪欎竴鍒囧師鍥狅紝閮芥槸鍥犱負Boost.Spirit瀵逛簬Parser Tree錛屾槸鐢ㄤ簡瀹屽叏闈欐佺殑鍒嗘瀽鏍戠粨鏋勩傛瘡鏉¤鍒欑殑榪斿洖鍊奸兘浼氭槸瀹屽叏涓嶅悓鐨勭被鍨嬨傝繖鐩存帴瀵艱嚧綾誨瀷鏁伴噺鏋佷負搴炲ぇ錛屼唬鐮佽啫鑳鐨勫帀瀹熾?/p>
浜庢槸11騫寸殑瀵掑亣鎴戣姳浜?澶╃殑鏃墮棿閲嶆柊灞卞浜嗕竴涓枃娉曞垎鏋愬櫒鐨勪駭鐢熷櫒錛屽茍鍋氬埌DSL鍑犱箮瀹屽叏鍜孲pirit涓鑷淬傚彧涓嶈繃Parser Tree涓嶅啀鏄潤鎬佺被鍨嬶紱妯℃澘鐨勭敤閲忎篃鍑忚交浜嗗緢澶氥?/p>
鍒頒簡鍥涙湀浠界殑鏃跺欙紝Shading Language Semantic/System Value宸茬粡鍦ㄨ娉曚笂鏀寔浜嗭紝璇箟涓婁篃鑳藉垎鏋愬嚭鍝簺鍙橀噺鏄疭ystem Value錛屽摢浜涘彉閲忔槸Uniform鐨勩傚茍涓旈氳繃鐢熸垚鐗規畩鐨勫嚱鏁扮鍚嶏紝Shader婊¤凍浜嗕互涓嬪嚑涓渶姹傦細 鍒頒簡11騫?鏈堜喚鐨勬椂鍊欙紝緇堜簬鎶奡hader鍏ㄧ嚎璐氥傝櫧鐒跺緢澶歄perator鍜孖nstrinsic榪樹笉鏀寔錛屼絾鏄搗鐮佹湁浜嗕釜鍙互鐪嬬殑Demo銆?/p>
LLVM鐢ㄤ笂浜嗭紱VS瀹屾暣浜嗭紝PS涔熸湁浜嗕釜闆忓艦錛涢澶勭悊鍣ㄤ粈涔堢殑閮芥湁浜嗐?/p>
Unit Test涔熸湁浜嗗師鍨嬨傛垜涓烘瘡涓猄tage閮藉仛浜哢nit test錛歅arser錛孲emantic錛孋odeGen鍜孞IT銆?/p>
鏌愮鎰忎箟涓婃潵璇達紝榪欏嚑涓湀鏉ュ湪鍚庣涓婇『鍒╄繘灞曪紝璁╂垜澶氬皯鏈夌偣寰楁剰蹇樺艦銆傚啀鍔犱笂姊佹葷殑甯姪錛孲oftArt榪欎釜鍚嶅瓧鏀規垚SALVIA錛孡OGO涔熸湁浜嗭紝鎴戝湪閮ㄩ棬鍐呴儴鍋氱殑涓浜汭ntroduction涔熷府鍔╂垜姊崇悊浜嗘濊礬銆備簬鏄粠4鏈堜喚寮濮嬶紝鎴戝氨絳瑰鐫瑕佹妸SALVIA姝e紡鍙戝竷鍑哄幓銆?/p>
11騫?鏈?鍙鳳紝SALVIA Milestone 1.0 鍙戝竷銆傛湁Change Log錛屾湁Binary Demo錛屾湁Snapshot銆?/p>
涓夊懆鍚庯紝鍙戝竷浜嗙涓涓湁Vertex Shader鐨凞emo 鍦∕ilestone 1.0鍙戝竷鍚庯紝鎴戝紑濮嬪仛Pixel Shader鐨勭壒鎬с傛湰浠ヤ負鍗婂勾涔嬪唴灝辮兘鎼炲畾錛屽彂涓?.0鎵湁鍚愭皵涓涓嬨備絾鏄疄璺佃瘉鏄庯紝鎴戠湡鏄粬濡堢殑澶洸鐩箰瑙備簡銆?/p>
鎴戝厛鏉ヨ涓璇碢ixel Shader鐨勭壒鐐瑰拰闇姹傘傛瘮鏂硅鎴戞湁鍥涗釜pixel錛屾瘡涓猵ixel閮芥槸涓涓猣loat銆?/p> 鐒跺悗鎴戣璁$畻涓涓嬶紝榪欎釜data鍔犱笂1.0涔嬪悗鏄灝戙傛垜鍓嶉潰璇磋繃錛屾垜瑕佽鎸囦護鐪嬭搗鏉ユ槸鍥涗釜鍍忕礌鍚屼竴鏃跺埢鎵ц鐨勶紝閭d箞鏄劇劧鎴戠敓鎴愮殑浠g爜灝變細綾諱技浜庤繖鏍鳳細 鏄劇劧榪欓噷鏄彲浠ヤ紭鍖栫殑錛氬皢鍥涙潯鎸囦護騫朵綔涓鏉IMD鎸囦護銆?/p>
閭d箞榪欎釜鏃跺欙紝鏈変袱涓渶姹傛槸瑕佹弧瓚崇殑錛?/p>
鍙湁涓涓煙褰撶劧濂藉姙銆傚鏋渟truct寰堝鏉傚憿錛屾瘮鏂硅涓嬮潰榪欐牱錛?/p> 閭e氨浼氳鐢熷嚭鍚勭闂錛?/p>
姣忎釜鏂規閮戒竴瀹氳兘瀹屾垚錛屾瘡涓柟妗堥兘鏈夋槑鏄劇殑緙洪櫡銆傛渶鍒濇垜鏄兂灝濊瘯鍥涗釜鍍忕礌瀹屽叏鐙珛鐨勫姙娉曪紝榪欐牱瀹炵幇璧鋒潵鏈鏂逛究銆備絾鏄嚭浜庡鎬ц兘鐨勮拷姹傦紝鎴戝張鎯沖仛灞曞鉤鐨勩傚睍騫崇殑鏂規鍋氬埌涓鍗婏紝鍙戠幇澶鏉備簡銆?/p>
姝ゅ錛岃繕鏈夊嚑涓潪甯鎬弗閲嶇殑闂錛屽彂鐢熷湪LLVM涓娿?/p>
涓涓槸ABI銆備竴涓鍚圕 Calling Convention鐨凩LVM鍑芥暟錛屽畠瀵瑰爢鏍堢殑鐞嗚В涓嶸S瀹屽叏涓嶅悓錛岀壒鍒槸鍙傛暟浼犲叆鎴栬呰繑鍥濻truct鐨勬椂鍊欍傝繖鏍鳳紝鐩存帴鐢↙LVM鐨勫嚱鏁癊xport鍑烘潵鍚庯紝璁¬C鍘籆all瀹冨氨涓瀹氫細澶辮觸銆備負浜嗚В鍐沖畠錛屾垜鑺變簡榪戜袱鍛ㄧ殑鏃墮棿錛岃璁′簡涓涓狿roxy錛岃鍑芥暟閬垮厤鐢⊿truct鏉ヤ紶閫掞紝涓鍒囨暟鎹紝闄や簡鍜屽瘎瀛樺櫒鍚屾牱澶у皬鐨刦loat鍜宨nt錛屽叾浣欐暟鎹兘閫氳繃鎸囬拡鏉ュ仛銆傚悓鏃訛紝鎴戦渶瑕佸皢涓浜涘嚱鏁版敞鍏ュ埌LLVM涓紝姣旀柟璇寸汗鐞嗛噰鏍鳳紝姝ゆ椂ABI鍚屾牱鏄釜紲告偅銆備負浜嗚Code Gen姝g‘鐨勮瘑鍒嚱鏁版槸LLVM鐨勮皟鐢ㄥ崗璁繕鏄垜鑷繁瀹氬埗鐨勮皟鐢ㄥ崗璁紝騫朵駭鐢熸紜殑浠g爜銆傛垜鍋氫簡鍚勭濂囪懇鍜屽偦閫肩殑鏂規銆傛湁涓浜涙柟妗堣搴熷純浜嗭紝浣嗘槸涓昏鐨処dea錛屼粛鐒舵部鐢ㄥ埌鐜板湪銆?/p>
涓涓槸涓存椂鍙橀噺錛堝寘鎷琒piller錛夌殑瀵歸綈銆傚湪Linux/GCC涓婏紝鏍堥《鍜屾爤鍩烘寚閽堜竴瀹氭槸16瀛楄妭瀵歸綈鐨勩傚鏋滅紪璇戝櫒闇瑕佸垎閰嶄竴涓復鏃跺彉閲忥紝閭d箞瀹冨彧瑕侀氳繃ESP - 0x10*n灝辮兘鑾峰緱涓涓榻愮殑鍦板潃銆備絾鏄湪VC涓紝x86涓嬪畬鍏ㄦ病鏈夎繖鏍風殑闄愬埗錛堥櫎闈炲嚱鏁頒腑浣跨敤浜哶_m128錛岃繖涓椂鍊欏湪榪涘叆Frame涔嬪悗浼氭湁涓涓猄UB/AND鐨勬寚浠ゆ妸鏍堥《鎼炲埌16瀛楄妭瀵歸綈銆傦級銆備絾LLVM鐢熸垚鐨勬墍鏈変唬鐮侊紝鍙堟槸鍩轟簬GCC鐨勫亣璁俱係ALVIA鐢熸垚鐨勫眬閮ㄥ彉閲忥紝榪樺彲浠ユ帶鍒跺湴鍧錛屼絾鏄浜庣紪璇戝櫒涓存椂鐢熸垚鐨勫彉閲忔潵璇達紝灝卞畬鍏ㄤ笉鍙帶浜嗐傚湪3.1涔嬪悗鍥犱負寮曞叆浜咥VX錛岄渶瑕?2瀛楄妭瀵歸綈錛岃繖涓棶棰樺氨鏇村姞鍙樻湰鍔犲帀浜嗐傚湪x86涓婏紝鎴戣繕鍙互閫氳繃宓屽叆姹囩紪錛屾潵寮哄埗璋冩暣鏍堝撫銆備絾鏄湪x64涓婏紝鍙堝惎鍔ㄤ簡AVX鐨勬儏鍐典笅錛屾垜灝卞交搴曟病鏈夊姙娉曚簡銆傝繖涓棶棰樹竴鐩村歡緇埌鐜板湪錛屽鏋滄垜涓嶅姩鎵嬪幓Debug LLVM鐨勮瘽錛屽氨鍙兘絳変粬浠粈涔堟椂鍊欐兂璧鋒潵淇榪欎釜闂浜嗐?/p>
Pixel Shader鐨勬墽琛屾ā鍨嬫槸SIMD鐨勶紝榪欒姹傛瘡涓儚绱犱笂鍚屼竴鏃跺埢閮芥墽琛岀浉鍚岀殑鎸囦護銆傚鏋滄病鏈夊垎鏀紝閭h嚜鐒舵槸綆鍗曟棤姣斻備竴鏃︽湁浜嗗垎鏀氨鎵撶牬浜嗚繖涓害瀹氥傚湪DX9.0b鍙婁箣鍓嶏紝榪欏綋鐒舵病闂銆?/p>
浣嗘槸Shader Model 3.0姝e紡鏀寔Dynamic Branch寮濮嬶紝榪欎釜闂灝卞嚫鐜板嚭鏉ヤ簡錛氬垎鏀鎬庝箞澶勭悊錛?/p>
瀵逛簬Pixel Shader鏉ヨ錛屼細闈復涓夌鍒嗘敮錛氶潤鎬佸垎鏀紝鍑嗛潤鎬佸垎鏀紙榪欎釜鍚嶅瓧鏄垜鐬庤搗鐨勶級鍜屽姩鎬佸垎鏀?/p> 鎴戜滑鏉ュ垎鎯呭喌璁ㄨ涓涓嬶細 瀹為檯涓婏紝鎴戜滑鐪熸瑕佽В鍐崇殑錛屽氨鏄姩鎬佸垎鏀?/p>
瀵逛簬SIMD妯″瀷鏉ヨ錛屽姩鎬佸垎鏀湁涓夌澶勭悊鍔炴硶銆?/p>
瀵逛簬SAVLIA鏉ヨ錛岃煩杞墽琛屽拰鍐欐帺鐮佹槸涓や釜鍙兘鐨勯夋嫨銆傚洜涓哄啓鎺╃爜鐨勪唬鐮佺敓鎴愯搗鏉ユ洿鍔犺交鏉句竴浜涳紝鎵浠ョ洰鍓嶇殑SALVIA鐨勫疄鐜版槸鍐欐帺鐮佺殑銆傚湪x86/x64騫沖彴涓婏紝瀵逛簬AVX浠ヤ笂鐨勬寚浠わ紝榪樺彲浠ョ敤blend銆備絾鏄浜庡叾浠栨寚浠よ岃█錛屽熀鏈笂鍙兘鏄氳繃璺寵漿瀹炵幇鍐欐帺鐮併傛墍浠ヨ繖閮ㄥ垎鐨勫紑閿鍏跺疄寰堝ぇ銆傜瓑鍒伴犲嚭浜嗚嚜宸辯殑SSA涔嬪悗錛屽啀鏉ヨ冭檻鍒嗘敮鎵ц鐨勪簨鎯呭惂銆?/p>
瀵逛簬鍐欐帺鐮佺殑鎺╃爜瑕佹庝箞璁$畻錛屼竴寮濮嬫垜蹇冮噷鎸烘病璋辯殑銆傜壒鍒槸鏈変簡錛孋ontinue鍜孊reak涔嬪悗錛屾儏鍐靛氨浼氬彉寰楀鏉傝搗鏉ャ備竴寮濮嬫垜娌℃硶紜俊鑷繁鐨勬柟妗堟槸姝g‘鐨勩傚悗鏉ョ湅浜哅ESA鐨凣allinum浠ュ悗錛岀湅瑙佷簡Continue Mask鍜孊reak Mask涓や釜鍙橀噺錛岀灛闂村氨鏄庣櫧浜嗐?/p>
鍏蜂綋鎬庝箞鎬濊冪殑涓嶅璇翠簡錛岃繖閲屽啓涓嬪嚑涓粨璁猴細 灝界閬囧埌浜嗗悇縐嶉毦澶勶紝浣嗘槸寰堝鏂規榪樻槸欏哄埄鐨勫仛鍑烘潵浜嗐傛柟妗堝拰鏂規涔嬮棿宸紓寰堝ぇ錛岃鎯抽『鍒╃Щ妞嶏紝蹇呴』瑕佹湁Test銆?/p>
涔嬪墠涔熻榪囷紝涓寮濮嬫垜鐨凾est鏄寜鐓arser錛孲emantic錛孋ode Gen錛孞IT鍒嗗紑鍋氱殑銆備絾鏄憿錛岃繖鏍蜂竴鏉ワ紝涓嶅悓Stage涔嬮棿鐨凾est澶嶇敤鎬ч潪甯擱珮銆傝屼笖鍥犱負Stage緇忓父鍙樺寲錛屽寘鎷琒tage鐨勬帴鍙c傝繖鏃跺橳est灝卞畬铔嬩簡銆俆est鏈韓涔熷緢鏋嚗錛堝彉閲忓悕閮戒笉濂借搗錛夛紝鎵浠est閲嶅啓璧鋒潵闅捐繃鐨勮姝匯?/p>
浜庢槸鎴戦噸鏂板瑙嗕簡涓涓嬮渶姹傘傚彂鐜版垜鏈緇堝彧鍏沖績JIT緙栬瘧鍑烘潵鐨勫嚱鏁扮殑榪愯緇撴灉錛屽叾瀹炲茍涓嶅叧蹇冧腑闂寸殑榪囩▼銆傝屼笖闅忕潃鎴戝緙栬瘧榪囩▼鐞嗚В鐨勯愭鍙樺寲錛孋ompiler Stages鍑犱箮姣忛殧涓や釜鏈堝氨瑕佽繘琛屾瘮杈冨ぇ鐨勪慨姝c傛祴璇曠殑閲忕◢寰ぇ涓鐐癸紝灝辨病鏈夊姙娉曠淮鎶est Case浜嗐傚茍涓旓紝瀵逛簬鍗曟潯璇彞鎴栬呴潪甯哥煭鐨勫嚱鏁版潵璇達紝浠庤瘝娉曞埌鏈緇圝IT鍑烘潵鐨勫嚱鏁版墍瑕嗙洊鐨勭紪璇戝櫒浠g爜闈炲父涔嬪皯錛屽彲鑳?-4涓嚱鏁幫紝浠g爜灝卞嚭鏉ヤ簡銆傚嵆渚挎湁闂錛屽姣旇繃鍘葷殑鐗堟湰杞繪澗灝辮兘鍒嗘瀽鍑烘潵銆傚啀鍔犱笂澶ч噺鐨凙ssertion錛岃瘖鏂搗鏉ユ洿鍔犲鏄撱?/p>
鍥犳錛屽湪榪欏嚑涓湀涓垜瀹屽叏閲嶅啓浜員est Case錛氳JIT鐨勬祴璇曠矑搴︽洿浣庯紝嫻嬭瘯鏇翠赴瀵岋紱鍙栨秷鎵鏈夌殑涓棿Level鐨勬祴璇曘傛柊鐨勬祴璇曞洖褰掕搗鏉ラ潪甯稿鏄擄紝鍑轟簡闂涔熷緢濂芥壘鍒般傚湪Test Case鍐欏畬鍚庯紝姝eソ鐪嬪埌Martin Fowler鍠瘋繃搴DD鐨勯棶棰橈紝鐪熸槸鎰熷悓韜彈銆?/p>
嫻嬭瘯闇瑕佸悧錛熷綋鐒墮渶瑕併備絾鏄夋嫨鍚堥傜殑Level錛屽仛鍚堥傜殑嫻嬭瘯鏄潪甯擱噸瑕佺殑銆傜粨鍚堜箣鍓嶅疄涔犵殑鏃跺欑殑Unit Test緇忛獙錛屾湁浠ヤ笅鍑犵偣鎰熷彈錛?/p>
鍦ㄥ畬鎴愪簡Test鐨勬敼閫犲悗錛岀粓浜庢湁浜嗕竴涓悎閫傜殑鍙戝竷鍓嶈瘎浼般傛墍浠ュ埌浜?1騫?1鏈堝悗錛屽彂甯冪殑閫熷害灝辨槑鏄懼彉蹇簡璁稿銆傚揩閫熺殑鍙戝竷瀵逛簬鍋氫竴涓暱鏈熼」鐩潵璇撮潪甯擱噸瑕併傝繖涔熷拰鏁忔嵎鐨勬兂娉曚笉璋嬭屽悎銆備笉綆℃槸浠庡搧璐ㄦ帶鍒朵笂銆佽繕鏄繘搴﹁拷韙笂錛屾垨鑰呮槸璇村寮鍙戣呰嚜淇″績鐨勫寮猴紝閮介渶瑕佹湁鐭鉤蹇殑寮鍙戝懆鏈熴?1騫翠篃姝eソ鏄疉utodesk鎺ㄨ鏁忔嵎鐨勪竴騫淬傚悓浜嬮噷闈㈡湁寰堝鐨勪漢鍙嶅簲璇存晱鎹蜂細瀵艱嚧杞歡鍝佽川鐨勪笅闄嶏紝鐭湡鐩爣浼氬鑷磋繃浜庤拷閫愮溂鍓嶅埄鐩娿?/p>
浣嗘槸浠庢垜鐨勭粡楠屾潵鐪嬶紝瀵逛簬涓漢錛屾晱鎹瘋鐭鉤蹇備絾瀵逛簬鍥㈤槦錛屾晱鎹瘋浠庨暱璁¤銆備笉鏄墍鏈夌殑iteration閮介渶瑕佸紑鍙戞柊鐗規э紝蹇呴』瑕佷繚鐣欒凍澶熺殑iteration鏉ュ畬鎴愰噸鏋勩佹暣鐞嗐佽璁℃柟妗堢殑鍙嶇渷鍜岃璁恒傚浜庝互騫翠負鍗曚綅鐨勯暱鍛ㄦ湡浜у搧鏉ヨ錛屽彲浠ユ瘡涓搴︽湁3-5澶╃殑鏃墮棿錛屾瘡涓漢閮芥彁鍑哄妗嗘灦鐨勬敼榪涜鍒掞紱姣忓勾鏈変袱鍛ㄧ殑鏃墮棿錛屽畬鎴愭鏋剁殑閲嶆瀯鍜屼慨姝c傛洿灝忕殑閲嶆瀯錛屽彲浠ュ畨鎺掔殑鏇村姞鐭皬鐨勬椂闂淬?/p>
浠?1騫?鏈堜喚寮濮嬪埌鐜板湪錛屽氨涓鐩村湪鍋欴emo銆佷紭鍖栥佺壒鎬х殑瀹屽杽錛涗互鍙婁竴浜涙柊鐗規х殑鎬濊冦?/p>
鎬葷殑鏉ヨ錛岃繖涓騫村崐鐨勬椂闂撮噷闈紝寰堝宸ヤ綔宸茬粡涓嶅儚鏃╁厛鍑犲勾鍋氱殑閭d箞鍚冨姏錛屼絾鏄粛鐒跺湪寰堝鐨勭偣涓婃湁鎵鏂╄幏銆?/p>
鍦?012騫村簳涓篠ALVIA榪涜浜嗗眬閮ㄧ殑閲嶆柊璁捐錛屼篃鏄滃鈥濅笌鈥滀範鈥濈殑鏂頒竴杞滀範鈥濄傛柊鐨凷SA鍙奡hader浼樺寲銆丣IT鍖栫殑綆$嚎銆佸鎬ц兘鏈夎姹傜殑鏂板墠绔佺瀯鍑咲X11浠ヤ笂Shader Model Features銆丣IT鐨勮皟璇曠鍙鳳紝榪欎簺涓瀹氫細緇欐垜甯︽潵璁稿緇炲敖鑴戞眮鎯充笉鏄庣櫧鐨勯棶棰橈紝浣嗗悓鏃舵垜涔熶細瀛︿範鍒般佸疄璺靛埌璁稿鏂扮殑鐭ヨ瘑銆?/p>
鎴戠浉淇℃椂闂翠細鏁欑粰鎴戜滑涓鍒囥?/p> 鍑洪敊澶勭悊鍜岄敊璇彁紺猴紝鏄紪璇戝櫒寮鍙戣繃紼嬩腑閲嶈鑰岀箒鐞愮殑閮ㄥ垎銆?/p> 璇婃柇淇℃伅鐨勬牸寮忓洜緙栬瘧鍣ㄥ拰IDE鑰屼笉鍚屻?/p> SALVIA灝嗛噰鐢╒isual Studio鐨勬牸寮忥紝鍗?鏂囦歡 + 琛屽垪 + 綾誨埆錛堢瓑綰э級 + 緙栧彿 + 鍑洪敊淇℃伅銆備緥濡傦細 d:\programming\salvia\sasl\test\cgllvm_test\function_test_basic.cpp(16): error C2061: syntax error : identifier 'te' 鍥犳鍦ㄥ嚭閿欏垎鏋愮殑鏃跺欙紝涔熼渶瑕佹彁渚涘涓婄殑涓浜涗俊鎭?/p> 鍦ㄤ互涓婁俊鎭腑錛屾枃浠跺悕鍜岃鍒楀彿鍙互鍦ㄨ瘝娉曞垎鏋愮殑鏃跺欒幏寰楋紝鎴戜滑灝嗗畠浣滀負灞炴ч檮鍔犲湪Token涓?/p> 綾誨埆鍜岀紪鍙鳳紝瀵逛簬鍚屼竴涓紪璇戝櫒鑰岃█鏄浉瀵瑰浐瀹氱殑錛屽敖綆℃垜浠彲浠ョ敤ID鏉ヨ〃紺猴紝浣嗘槸瀹冨茍涓嶇洿瑙傦紝緙栬瘧鍣ㄦ鏌ヤ篃杈冨皯銆備笌鍙傛暟鍖歸厤鏃訛紝涔熸瘮杈冨鏄撳嚭閿欍?/p> SASL涓殑璇婃柇淇℃伅灝嗘瘡涓敊璇兘浣跨敤涓涓被鍨嬫潵琛ㄨ揪錛?/p> 榪欐牱鐨勫ソ澶勫湪浜庡彲浠ョ敤Combinator鐨勯鏍兼潵鎾板啓閿欒淇℃伅銆備緥濡傝繖鏍鳳細 diagnostic_chat.report<unrecognized_identifier>().token( err_tok );
騫朵笖鐢變簬緙栬瘧鍣ㄧ殑淇濊瘉涔熸瘮杈冧笉瀹規槗鍐欓敊銆?
浣嗘槸榪欑鍐欐硶涔熸湁涓涓緢鍏抽敭鐨勯棶棰橈紝闇瑕佷負姣忎釜閿欒閮藉畾涔変竴涓被錛屽伐浣滈噺寰堝ぇ銆係ASL瀵硅繖涓闂鐨勫鐞嗭紝鑷劧鏄紶緇熺殑澶ф潃鍣細榪愮敤鑴氭湰榪涜鐢熸垚銆?
Clang浣跨敤浜嗗畠鍐呯疆鐨勪唬鐮佺敓鎴愬伐鍏穞d鏉ュ畬鎴愮敓鎴愮殑宸ヤ綔銆?
3. 璇婃柇淇℃伅綆$悊鍣―iagnostic Chat
Chat鏄瘖鏂俊鎭殑綆$悊宸ュ叿銆傚畠涓昏瑕佸畬鎴愪互涓嬮渶姹傦細娣誨姞鍜屾竻鐞嗚瘖鏂俊鎭紝浠ュ強鍦ㄨ瘖鏂俊鎭殑娣誨姞娓呯悊鏃舵彁渚涘洖璋冩搷浣溿?
鍚庤呮槸寰堟湁鐢ㄧ殑錛屽挨鍏舵槸鍦ㄨ皟璇曠紪璇戝櫒鐨勬椂鍊欍備綘寰楀垎娓呮絀剁珶鏄湡姝g殑紼嬪簭閿欒鍛紝榪樻槸緙栬瘧鍣ㄥ嚭浜嗛敊銆?
Diagnostic Chat鐨勫師鍨嬪涓嬶細 鍚屾椂錛屾垜浠篃灝員reat Warning As Error錛孍rror Count錛孌isable Warning錛孲top compiling when error occurs絳夌姸鎬佸拰鍔熻兘鎵闇瑕佺殑鏀寔娣誨姞鍒癈hat涓?
鎵浠ワ紝Chat闄や簡鎻愪緵綆$悊涔嬪錛屼篃瑕佸叿鏈夌浉搴旂殑璇婃柇淇℃伅鐨勭粺璁″姛鑳姐?
4. 榪囨護鍣―iagnostic Filter
Filter涓昏閰嶅悎IDE浣跨敤錛屼粠Chat涓彇鍑虹鍚堟潯浠剁殑璇婃柇淇℃伅銆侲rror Count鍜孌isable Warnings絳夊姛鑳戒篃鍙互閫氳繃瀹冩潵瀹屾垚銆?
5. Formatter
Formatter鐢ㄤ簬灝咲iagnosticItems涓殑淇℃伅杞崲鎴愪漢鍙鐨勫瓧絎︿覆銆傜洰鍓峉ASL鍙墦綆楁敮鎸乂isual Studio鐨勬牸寮忥紝浣嗘槸鐩鎬俊鏀寔GCC鐨勬牸寮忎互鏇村ソ鐨勫拰Eclipse絳夌涓夋柟IDE闆嗘垚騫朵笉鍥伴毦銆?
鍦–#閲岄潰錛屾垜浠彲浠ョ敤鈥淲e need 鈥榹0}鈥?not 鈥榹1}鈥?鈥濊繖鏍風殑鏂瑰紡鏉ュ垎紱籨escription template騫跺歡鏈熺殑浜х敓鏍煎紡鍖栫殑瀛楃涓層備絾鏄湪C++涓紝榪欑鍋氭硶騫朵笉瀹規槗銆侰鐨剆printf寰堥毦鍏鋒湁寤舵湡銆佹笎澧炵殑緇戝畾妯℃澘鐨勭壒瀹氾紝瀵硅嚜瀹氫箟綾誨瀷鐨勫瓧絎︿覆鍖栫殑鏀寔涔熶笉瓚籌紝綾誨瀷瀹夊叏涔熸瘮杈冨樊錛涜宻tream鐨勮瘽錛屼篃浼氶潰涓寸潃灝嗗ソ绔鐨勬牸寮忓寲瀛楃涓插壊瑁傜殑闂銆係ASL浣跨敤浜哹oost.format錛屼粠涓瀹氱▼搴︿笂鎼炲畾浜嗚繖涓や釜闂錛屼粠鑰屽儚C#涓鏍鳳紝浣跨敤鏍煎紡鍖栧瓧絎︿覆鐨勫姛鑳姐?/p>
]]>
鑳屾櫙
鎻掑肩畻娉?/h1>
鎻掑肩畻娉曠殑閫夋嫨
struct transformed_vertex { float4 attributes[MAX_ATTRIBUTE_COUNT]; };
transformed_vertex projected_corner;
// 璁$畻瑙掔偣鐨勫潗鏍?
projected_scanline_start = projected_v0 + projected_ddx * offset_x + projected_ddy * offset_y;
// 鍍忕礌鐨勯忚淇鍊?
float inv_w;
// 鏈緇堣緭鍑虹殑4x4涓儚绱?
pixel_input px_in[4][4];
for(int i = 0; i < 4; ++i)
{
projected_pixel = projected_scanline_start;
for(int j = 0; j < 4; ++j)
{
// 閫忚絀洪棿杞崲鍒扮嚎鎬х┖闂村茍杈撳嚭鍒皃x_in涓?
px_in[i][j] = unproject( projected_pixel );
// 绱姞x鏂瑰悜涓婄殑鍊鹼紙閫忚絀洪棿錛?
projected_pixel += projected_ddx;
}
// 绱姞y鏂瑰悜涓婄殑鍊鹼紙閫忚絀洪棿錛?
projected_scanline_start += projected_ddy;
}
鏈疆浼樺寲涔嬪墠瀵規彃鍊肩畻娉曠殑浼樺寲灝濊瘯
template <int N>
void sub_n(out, v0, v1 )
{
for(int i = 0; i < N; ++i) {
out.attributes[i] = v0.attributes[i] 鈥?v1.attributes[i];
}
}
棣栬疆浼樺寲錛歶nproject鍑芥暟錛宱perator += 涓?operator =
浜岃疆浼樺寲錛氭彃鍊肩畻娉曠殑璋冩暣
涓夎疆浼樺寲錛氬噺灝戝唴瀛樺崰鐢紝鏌蟲殫鑺辨槑
鍥涜疆浼樺寲錛氱簿搴︽晱鎰熸т笅闄嶇殑棰濆綰㈠埄
緇撹
1. 2007騫?鏈?- 2007騫?2鏈堬細鍙瑧鐨勫姩鏈猴紝鍙瑧鐨勯洀褰?/h1>
鍔ㄦ満涓庡師鍨?/h2>
涓轟粈涔堣鏈塖hader Compiler
float shading_pixel( ... ): COLOR0
{
float x;
// Expression for calculating x
return ddx(x);
}
2. 2008騫村垵 - 2009騫?2鏈堬細榛庢槑鍓嶇殑榛戞殫
Shader鐨勬枃娉?/h2>
紲烇細Boost.Spirit
Rule ::= Token SubRule0 [OptionalSubRule1]
rule = token >> subrule0 >> optional(OptionalSubRule1)
3. 2009騫?2鏈堚?010騫?鏈堬細闀垮緛鐨勫紑濮?/h1>
鍚庣涓庡墠绔?/h2>
4. 2010騫?鏈堚?011騫存柊騫達細鑻﹂毦鐨勮鍐?/h1>
鑻﹂毦錛氬鏉傜殑闂
琛屽啗錛氫簺寰殑榪涘睍
5. 2011騫?鏈堚?011騫?鏈堬細鏂癝hader鐨勮搗鐐?/h1>
鍧戠錛欱oost.Spirit鐨勭伃浜?/h2>
Shader鐨勯樁孌墊ф垚鏋?/h2>
絎竴涓増鏈笌鍙戝竷鍓嶇殑瀹屽杽宸ヤ綔
6. 2011騫?鏈堚?012騫?鏈堬細鍧傞亾銇?.0
Pixel Shader錛氶渶姹備笌璁捐
struct pixel_input
{
float data;
};
pixel_input pixel_block[4];
struct pixel_input
{
float data;
};
struct pixel_output
{
float data;
};
void shading_pixel(pixel_input* in_data, pixel_output* out_data)
{
// TMP = IN_DATA.DATA + 1.0
float tmp0 = in_data[0].data + 1.0;
float tmp1 = in_data[1].data + 1.0;
float tmp2 = in_data[2].data + 1.0;
float tmp3 = in_data[3].data + 1.0;
// OUT_DATA.DATA = TMP
out_data[0].data = tmp0;
out_data[1].data = tmp1;
out_data[2].data = tmp2;
out_data[3].data = tmp3;
}
Pixel Shader錛氫紭鍖栦笌闂
struct
{
float;
float2;
int3;
struct
{
float2[3];
float;
};
};
鍧戠II錛歀LVM
SIMD鎵ц妯″瀷涓嬪垎鏀殑澶勭悊
float branches( uniform float udata, float vdata: POSITION): COLOR0
{
const float zero = 0.0;
if(zero < 1.0)
{
// Static branch
}
if(udata)
{
// Semi-Static Branch (鎴戣嚜宸遍犵殑)
}
if(vdata)
{
// Dynamic Branch
}
}
鍧傞亾銇甌est
鍧¢暱璺繙錛屽皬姝ュ揩璧?/h2>
6. 2012騫?鏈堝強浠ュ悗錛氱幇鍦ㄤ笌鏈潵
鏂扮壒鎬э紝鏂版濊?/h2>
2. 璇婃柇淇℃伅Diagnostic Itemclass diagnostic_item
{
};
class unrecognized_identifier: public diagnostic_item
{
public:
unrecognized_identifier& token( token_t tok );
private:
static int level;
static int id;
static std::string description_template;
private:
std::string ident;
size_t row, col;
// Other properties
};
class diagnostic_chat
{
public:
template <typename T> T& report();
void add_report_diagnostic_handler( DiagnosticHandlerT handler );
};
榪欐槸鑷?010騫?鏈堜喚浠ユ潵錛?SALVIA Milestone 1.0涔嬪悗鏈閲嶈鐨勫彂甯冿紒
0.3寮濮嬶紝SALVIA姝e紡鏀寔浜哖ixel Shader銆?/p>
鑷?008騫翠腑寮濮嬬殑Shader璁捐涓庡疄鐜板伐浣滃熀鏈畬鎴愩?/p>
鏈潵涓騫村唴錛孲ALVIA鐨勫伐浣滃皢闆嗕腑浠ヤ笅鍑犵偣錛?/p>
闅忕潃SALVIA鏁翠綋鐨勯愭笎鎴愮啛錛屾垜浠篃甯屾湜鏈夊叾浠栫殑鏈嬪弸鑳芥潵鍙備笌鍜屾敮鎸佽繖涓」鐩紝涓鍚岃繘姝ャ?/p>
濡傛灉鎮ㄥ笇鏈涘弬涓庡埌榪欎釜欏圭洰涓紝璇穖ail鑱旂郴鎴戯細wuye9036 __at__ gmail dota com.
欏圭洰涓婚〉錛?http://code.google.com/p/softart/
鏇存柊鍒楄〃濡備笅錛?/p>
0.2.2 - 0.2.5 (Feb 24, 2012)
欏圭洰涓婚〉錛?a title="http://code.google.com/p/softart/" >http://code.google.com/p/softart/
鏂扮殑緙栬瘧姝ラ濡備笅錛?/p>
1. 涓嬭澆鏈鏂扮殑CMake騫跺畨瑁呫?/p>
2. 涓嬭澆Python 2.7騫跺畨瑁呫?/p>
3. 涓嬭澆boost 1.44鎴栨洿鏂扮殑鐗堟湰錛岃В鍘嬪埌鏌愪釜鐩綍涓嬨?/p>
4. Clone鎴栦笅杞絊ALVIA浠g爜鍖咃紝鎵ц鏍圭洰褰曚笅鐨刡uild_all.py鏂囦歡銆傜涓嬈¤繍琛岀殑鏃跺欎細鐢熸垚涓涓猵roject.py錛岀紪杈憄roject.py璁劇疆鐩稿簲灞炴э紝鍖呮嫭boost浠g爜鐩綍錛岀紪璇戝櫒錛宑onfiguration絳夈?/p>
5. 鍐嶆榪愯build_all.py錛岀紪璇戠▼搴忋?/p>
鏈枃灝嗚璁哄浣曞湪LLVM涓婄敓鎴愭紜殑鍐呭瓨瀵歸綈鍜岃皟鐢ㄥ崗璁殑浠g爜銆?/p>
鍦ㄨ繖閲屼負浜嗘柟渚垮拰鏍囧噯璧瘋錛屽亣瀹氬簲鐢↙LVM鐨勮璦鐨凟xtending鍜孍mbedding鐨勫璞¢兘鏄疌銆?/p>
璋冪敤鍗忚
鍏堟潵璁ㄨ璋冪敤鍗忚銆傝皟鐢ㄥ崗璁敤浜庝繚璇佽皟鐢ㄦ柟鍜岃璋冪敤鏂瑰湪浜岃繘鍒?姹囩紪涓綰т笂鏄浉瀹圭殑銆傚悎閫傜殑璋冪敤鍗忚鍙互甯姪鏋勯犲嚭浠ヤ笅浠g爜錛?/p>
涓鑸潵璇磋皟鐢ㄥ崗璁寘鎷弬鏁頒紶閫掑拰榪斿洖鍊間紶閫掑拰鍫嗘爤騫寵 涓変釜閮ㄥ垎銆傚湪x86騫沖彴涓婄殑C/C++緙栬瘧鍣ㄤ腑甯歌鐨勮皟鐢ㄥ崗璁湁cdecl, fastcall鍜宻tdcall銆傚叿浣撶殑鍗忚鍐呭璇峰弬瑙丮SDN銆?/p>
鍦–++涓繕鏈変竴綾葷壒孌婄殑璋冪敤鍗忚thiscall錛岀敤浜庤皟鐢ㄥ璞$殑鎴愬憳鍑芥暟銆備絾鏄繖涓綾昏皟鐢ㄥ崗璁笉鍚岀殑騫沖彴錛屼笉鍚岀殑緙栬瘧鍣ㄥ疄鐜扮殕鏈変笉鍚岋紝鏃㈡棤涔﹂潰鏍囧噯錛屼篃鏃犱簨瀹炴爣鍑嗭紝鍐嶅姞涓妚irtual call絳夊鏉傜殑鎯呭喌瀛樺湪錛屽茍涓嶉傚悎鐢ㄤ簬鍋氳法璇█鐨勮皟鐢ㄣ?/p>
瀵逛簬x64騫沖彴鑰岃█錛屽湪windows涓嬪拰linux涓嬪垎鍒湁涓ょ璋冪敤鍗忚銆?/p>
鍏堟潵鐪媥86銆傜敱浜巟86鍦╟decl鍜宖astcall涓婃槸鏈夌潃璺ㄥ鉤鍙扮殑鏍囧噯鐨勶紝鍥犳LLVM瀵瑰畠鐨勬敮鎸佹槸姣旇緝瀹屾暣鐨勩傜▼搴忓彧瑕佸湪鍒涘緩Function鐨勬椂鍊欐寚瀹欳all Convention鍗沖彲銆?/p>
浣嗘槸瀵逛簬x64錛孡LVM鐨勬敮鎸佷究涓嶆槸閭d箞瀹屽杽銆備互windows涓轟緥錛寃indows鐨剎64璋冪敤鍗忚瑕佹眰浠cx錛宺dx錛宺8錛宺9瀵勫瓨鍣ㄤ紶閫掑墠鍥涗釜涓嶅ぇ浜?4bit鐨勫弬鏁幫紝鍏朵綑鍙傛暟鏀懼湪鏍堜笂銆傚鏋滃弬鏁板ぇ浜?4bit錛屽垯瑕佹眰浼犻掑畠鐨勬寚閽堛傛誕鐐逛嬌鐢▁mm0-3鏉ヤ紶閫掋備絾鏄浜嶭LVM鑰岃█錛屼竴鏃﹀弬鏁板ぇ浜?4bit錛屽畠渚夸細灝嗘暣涓璞¤屼笉鏄寚閽堝帇鍒版爤涓婁紶閫掋傚洜姝ゅ湪閬囧埌x64鏃訛紝闇瑕佸皬蹇冨鐞咥PI閮ㄥ垎鐨勮皟鐢ㄥ崗璁?/p>
鍦ㄨ繖閲岋紝鎴戜滑闇瑕佸皢鎵鏈夎秴榪?4bit鐨勭粨鏋勪綋澶勭悊鎴愭寚閽堬紙鎴栬呮嫹璐濆悗澶勭悊鎴愭寚閽堬級浼犻掋?/p>
鍚屾椂錛孡LVM鎻愪緵浜唕eadonly鍜宐yval涓や釜鍙傛暟灞炴э紙Attribute錛夋潵紜繚鍙傛暟鐨勫艱涔夈傚墠鑰呮剰鍛崇潃浼犲叆鐨勬寚閽堟墍鎸囧悜鐨勫兼槸涓嶈淇敼鐨勶紝錛堢被浼間簬T const*錛夛紝鑰屽悗鑰呬細瀵逛紶鍏ョ殑鎸囬拡鍋氫竴浠藉唴瀛樻嫹璐濓紝紜繚鍐欏間笉琚紶閫掑嚭鍑芥暟錛堢被浼間簬鍊兼嫹璐濓級銆傝繖鏍鳳紝LLVM鐢熸垚鐨勫嚱鏁頒究鍙互MSVC鐢熸垚鐨剎64浠g爜姝g‘璋冪敤浜嗐?/p>
鍐呭瓨瀵歸綈
涓庣Щ鍔ㄥ鉤鍙扮殑浣撶郴緇撴瀯鐩告瘮錛寈86瀵瑰唴瀛樺榻愮殑鏉′歡綆楁槸鐩稿綋瀹芥澗鐨勪簡銆傚ぇ閮ㄥ垎鐨勬寚浠ゅ鍐呭瓨瀵歸綈鍩烘湰涓婃槸娌℃湁鐗規畩瑕佹眰鐨勩傚彧鏈変竴浜汼IMD鐨勬寚浠や細瀵瑰唴瀛樺榻愭湁鎵闄愬畾錛屼緥濡俶ovaps銆?/p>
涓轟簡鏂逛究鍚庣鐢熸垚SIMD浠g爜錛孡LVM鎻愪緵浜唙ector綾誨瀷錛屼緥濡倂ector<float, 1>銆傚湪浠g爜鐢熸垚鐨勬椂鍊欙紝vector浼氱紪璇戞垚鏈鏈夊彲鑳界殑SIMD綾誨瀷銆傚洜姝ゅ湪x86騫沖彴涓婏紝vector<float, 1-4>閮借澶勭悊鎴愮被浼間簬__m128鐨勭被鍨嬶紝鏇撮暱鐨剉ector鍒欒鎷嗗垎鎴愬涓猒_m128綾誨瀷銆?/p>
榪欏疄闄呬笂鎰忓懗鐫錛屾墍鏈夌殑vector閮藉簲璇ラ伒寰?6Bytes瀵歸綈鐨勫師鍒欍?/p>
鑰冭檻鍒版垜浠殑闇姹傦紝綾諱技浜巗truct{ float[3]; }榪欐牱鐨勭粨鏋勶紝濡傛灉鑳借〃紺轟負vector<float, 3>鏄劇劧閫傚悎涓浜涙暟瀛﹁繍綆楋紝渚嬪shuffle錛岄愬厓绱犵殑add錛宻ub錛宮ul錛屽悓鏃禠LVM鎸囦護鐨勯夋嫨涔熸洿鍔犵伒媧匯備絾鏄樉鐒訛紝榪欎釜緇撴瀯浣撴湁涓や釜鏉′歡鏄笉婊¤凍鐨勶細16瀛楄妭瀵歸綈鍜?6瀛楄妭鐨勫ぇ灝忥紙movups鍜宮ovaps閮芥槸涓嬈″彇16瀛楄妭錛夈傝繖浼氶犳垚杈圭晫涓嬭鍐欑殑鍐呭瓨瓚婄晫銆傚洜姝ら潪甯稿彲鎯滐紝榪欎簺鏁版嵁蹇呴』琛ㄧず涓簊truct{ float ,float, float }銆傚湪璇誨彇鐨勬椂鍊欙紝涔熶細鐢熸垚姝g‘鐨勬寚浠わ細movss銆?/p>
閭d箞錛屽浜庝竴鑸殑闈炲榻愮殑vec4搴旂敤vector<float,4>琛屼笉琛屽憿錛?/p>
絳旀鏄紝寰堝洶闅俱傚浜嶭LVM鑰岃█錛屼粬浠湪璁捐鐨勬椂鍊欏氨娌℃湁榪囧鐨勮冭檻vector鍦ㄩ潪瀵歸綈鏃跺欑殑搴旂敤銆傚敖綆oad鍜宻tore閮借兘澶熸寚瀹歛lignment浠ョ敓鎴愰潪瀵歸綈鐨勫唴瀛樻搷浣滐紙渚嬪movups錛夊茍涓旂‘瀹炰細璧鋒晥錛屼絾鏄敱浜庝唬鐮佷紭鍖栥佷復鏃跺瓨鍙栫瓑鐗規х殑瀛樺湪錛屽鑷翠竴浜涢潪load鍜宻tore鐨勫唴瀛樻搷浣滀粛鐒舵槸瑕佹眰瀵歸綈鐨勶紙渚嬪鐢熸垚浜哸ddaps xmm, [addr]錛夈傛鏃朵粛鐒舵湁鍙兘涓洪潪瀵歸綈鐨勬暟鎹敓鎴愪簡鍐呭瓨瀵歸綈鐨勬寚浠ゃ?/p>
鍥犳緇煎悎鏉冭 錛孲ASL鍦ˋPI鐣岄潰涓婁嬌鐢ㄤ簡struct{float x,y,z,w;} 榪欐牱鐨凙BI鏉ヨ〃紺烘暟鎹紝鍦ㄤ唬鐮佺敓鎴愭椂錛屼細棣栧厛灝唖truct鐨勬暟鎹漿鎹㈡垚vector錛岀劧鍚庡啀鎵ц鍏跺畠鐨勬搷浣滐紝鍏奸【ABI涓嶴IMD錛涘悓鏃跺浜嶪ntrinsic錛岀敱浜庡茍涓嶆毚闇茬粰Host錛屾墍浠ュ畠浠粛鐒跺敖鍙兘浣跨敤Vector錛屼究浜嶭LVM榪涜浼樺寲銆?/p>
婧愮爜涓嬭澆鍦板潃錛?/font>
Demo鎴浘錛?/strong>