在cpu上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置制造方法
【專利摘要】本發(fā)明涉及一種在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,在每條指令轉(zhuǎn)換時(shí)執(zhí)行如下步驟:判斷著色器變換是可行的和有益的,如是,取得所述像素著色器的輸入?yún)?shù),將指定個(gè)數(shù)的不同坐標(biāo)的像素點(diǎn)形成一個(gè)塊,將所述塊作為一個(gè)單元,形成一個(gè)依次對所述單元中每個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行圖形處理的線程;輸出所述線程并在CPU硬件內(nèi)核上執(zhí)行。本發(fā)明還涉及一種實(shí)現(xiàn)上述方法的裝置。實(shí)施本發(fā)明的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置,具有以下有益效果:其系統(tǒng)開銷較小、效率較高。
【專利說明】在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及處理器領(lǐng)域,更具體地說,涉及一種在在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置。
【背景技術(shù)】
[0002]多核多線程CPU已經(jīng)成為主流,當(dāng)GPU演化成為可編程處理器之后,CPU和GPU融合技術(shù)成為熱點(diǎn)。為了追求更好畫質(zhì),更豐富的用戶交互,手持設(shè)備的顯示端已經(jīng)接近甚至超過百萬像素級別(720p的畫質(zhì)要求90萬個(gè)像素)。像素著色器是以一個(gè)像素為處理對象的程序。因?yàn)楹A康南袼匦枰幚?,像素著色器成為GPU性能的關(guān)鍵。因?yàn)檫@種程序是DirectX和OpenGL標(biāo)準(zhǔn)為GPU的硬件著色器單元量身定制的專用語言,所以并不適合通用的多線程CPU上執(zhí)行。一方面而言,CPU和GPU在體系結(jié)構(gòu)上差異顯著,例如,GPU比CPU有更多的硬件線程;GPU的處理單元結(jié)構(gòu)簡單,并且利用大量的線程隱藏延遲;CPU適合標(biāo)量運(yùn)算和復(fù)雜的控制流因?yàn)橹饕糜趫?zhí)行三維計(jì)算機(jī)圖形學(xué)的著色器程序,因此GPU長于簡單控制流和向量運(yùn)算。從另一方面來講,像素著色器一般實(shí)現(xiàn)數(shù)學(xué)或者物理公式,指令相對較少。因?yàn)橄鄬τ贑PU的線程開銷,一個(gè)像素的計(jì)算粒度太?。黄浯?,GPU使用比CPU多的線程來隱藏紋理請求的延遲。而多核多線程CPU上的同時(shí)線程個(gè)數(shù)有限。此外,雖然著色器程序設(shè)計(jì)語言是為3D圖形學(xué)而設(shè)計(jì)的,但是因?yàn)樗梢造`活簡潔地表達(dá)數(shù)據(jù)并行,所以在通用計(jì)算領(lǐng)域已經(jīng)有相似編程語言,包括CUDA/OpenCL等,這些程序用于融合處理器時(shí),同樣存在上述問題。綜上所述,在現(xiàn)代CPU上使用現(xiàn)有技術(shù)執(zhí)行像素著色器程序時(shí),處理器的效率低下。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述系統(tǒng)開銷代價(jià)較大、效率較低的缺陷,提供一種系統(tǒng)開銷代價(jià)較小、效率較高的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置。
[0004]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,按照事先設(shè)定的規(guī)則,將適合傳統(tǒng)圖形處理器(GPU)上執(zhí)行的程序轉(zhuǎn)變成適合CPU執(zhí)行的等效代碼;其中,在每條指令轉(zhuǎn)換時(shí)執(zhí)行如下步驟:
A)判斷本程序變換是否是可行的和有益的,如否,按照通常的著色器程序編譯并輸出;如是,執(zhí)行下一步驟;其中,所述指定的像素著色器程序是使用專用于3D圖形處理的編程語言寫成的、對一個(gè)像素點(diǎn)進(jìn)行圖形處理的程序;所述程序在傳統(tǒng)的編譯情況下將轉(zhuǎn)換一個(gè)獨(dú)立線程在圖形處理器上執(zhí)行;多個(gè)像素點(diǎn)通過多個(gè)獨(dú)立線程并發(fā)處理;
B)取得所述著色器程序中包含或隱含的、表示該程序處理的所有點(diǎn)的輸入?yún)?shù)或/和使用指定的差值算法,通過對頂點(diǎn)的參數(shù)插值得到像素的輸入?yún)?shù);
C)將指定個(gè)數(shù)的不同坐標(biāo)的像素點(diǎn)形成一個(gè)塊,將所述塊作為一個(gè)單元,形成一個(gè)依次對所述單元中每個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行圖形處理的線程; D)輸出所述線程并在CPU硬件內(nèi)核上執(zhí)行。
[0005]更進(jìn)一步地,所述步驟C)進(jìn)一步包括如下步驟:
Cl)按照設(shè)定的規(guī)定選擇多個(gè)點(diǎn)或多個(gè)點(diǎn)的數(shù)據(jù);
C2)按照設(shè)定規(guī)則排列上述被選擇點(diǎn)或點(diǎn)數(shù)據(jù),使其形成一個(gè)隊(duì)列或表;
C3)形成一個(gè)新的塊著色器線程或紋理請求線程,該線程依次對上述隊(duì)列或表中的點(diǎn)進(jìn)行圖形處理。
[0006]更進(jìn)一步地,在所述步驟C)中,如需要處理的點(diǎn)多于一次選擇規(guī)定的點(diǎn),則按照設(shè)定規(guī)定進(jìn)行多次選擇,形成多個(gè)隊(duì)列或表,得到多個(gè)線程。
[0007]更進(jìn)一步地,在所述步驟C)中,當(dāng)形成多個(gè)線程時(shí),其最后形成的線程處理的點(diǎn)數(shù)可以小于規(guī)定的點(diǎn)數(shù)。
[0008]更進(jìn)一步地,在所述步驟Cl)中,按照點(diǎn)的位置的相鄰程度選擇一個(gè)線程所處理的點(diǎn)。
[0009]本發(fā)明還涉及一種實(shí)現(xiàn)上述方法的裝置,按照事先設(shè)定的規(guī)則,將適合GPU上執(zhí)行的程序轉(zhuǎn)變成適合CPU執(zhí)行的等效代碼;其中,所述裝置包括:
判斷單元:用于判斷當(dāng)前的著色器是否能夠應(yīng)用本變換,變換后是否有益處。如否,按照通常的指令編譯并輸出;如是,調(diào)用像素點(diǎn)輸入?yún)?shù)插值單元;所述指定的像素著色器程序是使用專用于3D圖形處理的編程語言寫成的、對一個(gè)像素點(diǎn)進(jìn)行圖形處理的程序;所述程序在傳統(tǒng)的編譯情況下將轉(zhuǎn)換一個(gè)獨(dú)立線程在圖形處理器上執(zhí)行;多個(gè)像素點(diǎn)通過多個(gè)獨(dú)立線程并發(fā)處理。
[0010]像素點(diǎn)輸入?yún)?shù)插值單元:用于取得所述著色器程序中包含或隱含的、表示該程序處理的所有點(diǎn)的輸入?yún)?shù)或/和使用指定的差值算法,通過對頂點(diǎn)的參數(shù)插值得到像素的輸入?yún)?shù);
線程形成單元:用于將將指定個(gè)數(shù)的不同坐標(biāo)的點(diǎn)形成一個(gè)塊,將所述塊作為一個(gè)單元,形成一個(gè)依次對所述單元中每個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行圖形處理的線程;
線程輸出單元:用于輸出所述線程并在CPU硬件上執(zhí)行。
[0011]更進(jìn)一步地,所述判斷單元判斷著色器程序是像素著色器,并且包含至少一個(gè)紋理請求操作。
[0012]更進(jìn)一步地,所述線程形成單元包括:
點(diǎn)選擇模塊:用于按照設(shè)定的規(guī)定選擇多個(gè)點(diǎn)或多個(gè)點(diǎn)的數(shù)據(jù);
點(diǎn)排列模塊:用于按照設(shè)定規(guī)則排列上述被選擇點(diǎn)或點(diǎn)數(shù)據(jù),使其形成一個(gè)隊(duì)列或
表;
線程形成模塊:用于形成一個(gè)頂點(diǎn)著色器線程或像素著色器線程或紋理請求線程,該線程依次對上述隊(duì)列或表中的點(diǎn)進(jìn)行圖形處理。
[0013]更進(jìn)一步地,所述點(diǎn)選擇模塊依據(jù)點(diǎn)的位置的相鄰程度選擇一個(gè)線程所處理的點(diǎn)。
[0014]實(shí)施本發(fā)明的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置,具有以下有益效果:由于在編程時(shí)仍然使用現(xiàn)有的、高效的專用編程語言,同時(shí),在執(zhí)行時(shí)將這種編程語言寫成的指令通過一個(gè)線程處理多個(gè)點(diǎn)的方式使得其適于通用CPU內(nèi)核運(yùn)行,從而減小每個(gè)線程的開銷,使得一個(gè)程序或指令執(zhí)行后具有較小的系統(tǒng)開銷。從而提高了效率;同時(shí),在涉及圖形處理的幾個(gè)關(guān)鍵步驟中,例如,頂點(diǎn)著色、像素著色或紋理請求,均采用上述的一個(gè)線程處理多個(gè)點(diǎn)的方法,進(jìn)一步提高了整個(gè)圖形處理過程中的效率。因此,其系統(tǒng)開銷較小、效率較高。
【專利附圖】
【附圖說明】
[0015]圖1是本發(fā)明在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置實(shí)施例的中該方法的執(zhí)行流程圖;
圖2是所述實(shí)施例中裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0016]下面將結(jié)合附圖對本發(fā)明實(shí)施例作進(jìn)一步說明。
[0017]如圖1所示,在本發(fā)明在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法及裝置實(shí)施例中,該程序轉(zhuǎn)換的方法包括如下步驟:
步驟Sll判斷變換的可行性和是否有益:在本實(shí)施例中,處理器是能夠執(zhí)行傳統(tǒng)意義上(PU程序和GTO程序的融合處理器,其具有多個(gè)硬件內(nèi)核,可以同時(shí)執(zhí)行多個(gè)并行的線程。在這種情況下,該處理器上執(zhí)行的程序具有使用通用的高級編程語言(例如,C語言)編寫的程序,也有使用專用于圖形處理的高級語言編寫(著色器程序設(shè)計(jì)語言)的圖形處理程序。在現(xiàn)有的技術(shù)中,上述硬件內(nèi)核執(zhí)行使用通用的高級編程語言編寫的系統(tǒng)軟件或傳統(tǒng)意義上CPU執(zhí)行的軟件肯定是不存在問題的,但是,這些硬件內(nèi)核在執(zhí)行用專用的圖形處理高級編程語言編寫的圖形處理程序時(shí),由于這些語言是針對傳統(tǒng)的GPU結(jié)構(gòu)的,因此在融合處理器的硬件內(nèi)核上運(yùn)行是將出現(xiàn)效率低下的問題;例如,線程開銷較大,而且存在大量的線程,從而使得處理器效率較低。當(dāng)然,可能使用通用的編程語言可以避免這個(gè)問題。但是,通用的編程語言又會出現(xiàn)編程效率低下、編程難度較大的問題。為此,在本實(shí)施例中,提出了一個(gè)在現(xiàn)有的硬件內(nèi)核和編程習(xí)慣的基礎(chǔ)上,解決圖形處理程序在融合處理器上運(yùn)行效率低下的方法。在本步驟中,對在融合處理器上將要運(yùn)行的著色器程序進(jìn)行判斷,判斷其是否為像素著色器并且包含至少一個(gè)紋理請求操作,如是,執(zhí)行步驟S13 ;否則,執(zhí)行步驟S12。值得一提的是,由于在融合處理器上運(yùn)行的軟件時(shí)多樣化的,所以并不是所有的程序均需要執(zhí)行本實(shí)施例中的步驟S13-S15 ;如果程序已經(jīng)適合在傳統(tǒng)CPU上執(zhí)行,則不需要任何變換,僅僅需要將其轉(zhuǎn)換為機(jī)器碼或可執(zhí)行文件格式即可;如程序是滿足S11,則需要執(zhí)行步驟S13-S15,以提高融合處理器的硬件內(nèi)核執(zhí)行的效率。在本實(shí)施例中,上述設(shè)定包括
步驟S12按照傳統(tǒng)的方式轉(zhuǎn)換指令并形成相應(yīng)線程:在本步驟中,對不需要進(jìn)行步驟S13-15變換的指進(jìn)行通常的轉(zhuǎn)換,使其能夠轉(zhuǎn)換為機(jī)器碼或其他可執(zhí)行的文件格式。在本實(shí)施例中,這些轉(zhuǎn)換(包括步驟S13-S15中的轉(zhuǎn)換)可以是在編譯器中進(jìn)行的,也可以是在一個(gè)類似于編譯器中的特殊的轉(zhuǎn)換裝置中進(jìn)行的。
[0018]步驟S13取得像素著色器中包含或隱含的像素點(diǎn)的輸入?yún)?shù):在本步驟中,取得上述指定著色器中的像素點(diǎn)的輸入?yún)?shù)。對于上述設(shè)定像素著色器而言,其采用專用的編程語言編寫的目的是降低編程的難度,使得編程變得簡單。同時(shí),在這些使用專用編程語言編寫的程序中,必然帶有或隱含由該指令需要處理的點(diǎn)的參數(shù)。在現(xiàn)有技術(shù)中,如果按照現(xiàn)有的方式轉(zhuǎn)換該著色器的話,就會生成多個(gè)線程,每個(gè)線程針對上述點(diǎn)中的一個(gè)進(jìn)行相應(yīng)的處理。這樣,融合處理器的硬件內(nèi)核就必須處理生成的多個(gè)線程。由于在CPU的結(jié)構(gòu)中,每個(gè)線程的開銷將大于傳統(tǒng)的GPU線程的開銷。所以,在本實(shí)施例中,不會按照傳統(tǒng)的方法來轉(zhuǎn)換該指令。在本步驟中,就是得到這些與被處理的點(diǎn)的位置相關(guān)的參數(shù);并在后續(xù)的轉(zhuǎn)換過程中減小生成的線程數(shù),進(jìn)而提高融合處理器的效率。
[0019]步驟S14按照設(shè)定方式將符合條件的點(diǎn)組成一個(gè)塊:在本步驟中,將上述取得的參數(shù)中的點(diǎn)按照一定的規(guī)律,將其中設(shè)定數(shù)量個(gè)點(diǎn)形成或劃為一個(gè)數(shù)據(jù)塊,并將這個(gè)數(shù)據(jù)塊作為一個(gè)線程要處理的數(shù)據(jù)單元。在一些情況下,可能存在多個(gè)點(diǎn),并不能全部包括在一個(gè)單元之內(nèi),例如,可能有100個(gè)點(diǎn),但是,設(shè)定的數(shù)量是32,這樣,就需要多次劃分這100點(diǎn),得到多個(gè)單元。在這種情況下,對于最后劃分的那個(gè)單元而言,其包括6個(gè)點(diǎn)。在本實(shí)施例中,每個(gè)單元的劃分是按照其所在位置的相關(guān)程度和圖元進(jìn)行的,即選擇一個(gè)基點(diǎn),并選擇與該基點(diǎn)相鄰且在圖元內(nèi)的設(shè)定數(shù)量的點(diǎn)作為一個(gè)單元。
[0020]在取得的點(diǎn)的數(shù)量較大,形成多個(gè)數(shù)據(jù)塊的情況下,也可以按照設(shè)定的規(guī)定首先選擇多個(gè)點(diǎn)或多個(gè)點(diǎn)的數(shù)據(jù);然后按照設(shè)定規(guī)則排列上述被選擇點(diǎn)或點(diǎn)數(shù)據(jù),使其形成一個(gè)隊(duì)列或表;最后形成一個(gè)新的塊著色器線程,該線程依次對上述隊(duì)列或表中的點(diǎn)進(jìn)行圖形處理。
[0021]步驟S15對于每個(gè)塊形成一個(gè)相應(yīng)的線程并輸出:在本步驟中,按照上述步驟中得到單元的順序,形成一個(gè)線程,按照該順序依次處理一個(gè)塊內(nèi)的各點(diǎn)。也就是說程序轉(zhuǎn)換改變了像素著色器程序的語義,對多個(gè)像素點(diǎn)生成一個(gè)塊著色器,一個(gè)線程處理塊內(nèi)的多個(gè)像素,從而降低了總線程的數(shù)量。
[0022]總之,在本實(shí)施例中,是將在傳統(tǒng)GPU處理器中的多個(gè)像素著色器湊到一起(一次)執(zhí)行。這樣可以增加計(jì)算粒度,降低平均一個(gè)像素的開銷。因?yàn)橄袼刂飨嗷ブg完全獨(dú)立,為此,將像素著色器自動(dòng)變換成塊著色器。一個(gè)塊包含若干個(gè)像素。一個(gè)塊著色器在一個(gè)CPU線程上執(zhí)行。這個(gè)程序變換是在著色器編譯器(或相同功能的硬件單元)中完成的。程序變換本身也可應(yīng)用在頂點(diǎn)著色器上。像素著色器編譯器在進(jìn)行塊著色器變換之后,可以將紋理請求函數(shù)前提,并且將一個(gè)塊內(nèi)的多個(gè)像素生成一個(gè)紋理請求。這樣只用一次紋理請求就能取得一個(gè)塊內(nèi)多個(gè)紋理像素,有效地降低平均一個(gè)像素的紋理請求開銷。
[0023]本發(fā)明還涉及一種實(shí)現(xiàn)上述方法的裝置,如圖2所示,在該裝置中,按照事先設(shè)定的規(guī)則,將適合GPU上執(zhí)行的程序轉(zhuǎn)變成適合CPU執(zhí)行的等效代碼;該裝置包括判斷單元
11、像素點(diǎn)輸入?yún)?shù)插值單元12、線程形成單元13和線程輸出單元14。其中,指令判斷單元11用于判斷該指令是否指定的程序,如否,按照通常的程序編譯并輸出;如是,調(diào)用像素點(diǎn)輸入?yún)?shù)插值單元;其中,所述指定的著色器程序是使用專用于圖形處理的編程語言寫成的、分別對多個(gè)點(diǎn)進(jìn)行并行圖形處理的程序;所述著色器在傳統(tǒng)的編譯情況下將轉(zhuǎn)換為對其中一個(gè)點(diǎn)進(jìn)行處理的單獨(dú)線程;像素點(diǎn)輸入?yún)?shù)插值單元12用于取得所述著色器中包含或隱含的、表示該指令處理的所有點(diǎn)的輸入?yún)?shù);在本實(shí)施例,是使用指定的插值算法,通過對頂點(diǎn)的參數(shù)插值得到像素的輸入?yún)?shù)的。線程形成單元13用于將將指定個(gè)數(shù)的不同坐標(biāo)的點(diǎn)形成一個(gè)塊,將所述塊作為一個(gè)單元,形成一個(gè)依次對所述單元中每個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行圖形處理的線程;線程輸出單元14用于輸出所述線程并在CPU硬件內(nèi)核上執(zhí)行。
[0024]在本實(shí)施例中,判斷單元判斷的指定程序是包含至少一個(gè)紋理請求操作的像素著色程序。改程序使用指定的、適于傳統(tǒng)意義上GPU運(yùn)行的圖像處理高級語言編寫而成。這些語言是DirectX和OpenGL標(biāo)準(zhǔn)為GPU的硬件著色器單元量身定制的專用語言或其他類似的語目。
[0025]此外,在本實(shí)施例中,線程形成單元13進(jìn)一步包括點(diǎn)選擇模塊131、點(diǎn)排列模塊132以及線程形成模塊133。點(diǎn)選擇模塊131用于按照設(shè)定的規(guī)定選擇多個(gè)點(diǎn)或多個(gè)點(diǎn)的數(shù)據(jù);在本實(shí)施例中,點(diǎn)選擇模塊依據(jù)點(diǎn)的位置的相鄰程度選擇一個(gè)線程所處理的點(diǎn)作為一個(gè)線程處理的數(shù)據(jù)單元,使用一個(gè)線程對其進(jìn)行處理;點(diǎn)排列模塊132用于按照設(shè)定規(guī)則排列上述被選擇點(diǎn)或點(diǎn)數(shù)據(jù),使其形成一個(gè)隊(duì)列或表;線程形成模塊133用于形成一個(gè)新的塊色器線程,該線程依次對上述隊(duì)列或表中的點(diǎn)進(jìn)行圖形處理。
[0026]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,其特征在于,按照事先設(shè)定的規(guī)則,將適合傳統(tǒng)圖形處理器上執(zhí)行的程序轉(zhuǎn)變成適合CPU執(zhí)行的等效代碼;其中,在程序轉(zhuǎn)換時(shí)執(zhí)行如下步驟: A)判斷當(dāng)前指令是否使用指定語言寫的像素著色器程序,如否,按照通常的指令編譯并輸出;如是,執(zhí)行下一步驟;其中,所述指定語言寫的像素著色器程序是使用專用于3D圖形處理的編程語言寫成的、對一個(gè)像素點(diǎn)進(jìn)行圖形處理的程序;所述程序在傳統(tǒng)的編譯情況下將轉(zhuǎn)換一個(gè)獨(dú)立線程在圖形處理器上執(zhí)行;多個(gè)像素點(diǎn)通過多個(gè)獨(dú)立線程并發(fā)處理; B)取得所述著色器程序中包含或隱含的、表示該程序處理的所有點(diǎn)的輸入?yún)?shù)或/和使用指定的差值算法,通過對頂點(diǎn)的參數(shù)插值得到像素的輸入?yún)?shù); C)將指定個(gè)數(shù)的不同坐標(biāo)的像素點(diǎn)形成一個(gè)塊,將所述塊作為一個(gè)單元,形成一個(gè)依次對所述單元中每個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行圖形處理的線程; D)輸出所述線程并在CPU硬件上執(zhí)行。
2.根據(jù)權(quán)利要求1所述的在CPU上執(zhí)行像素著色器變換方法,其特征在于,所述指定的程序是至少包含一個(gè)紋理請求的像素著色程序,該程序在圖像處理器中對應(yīng)多個(gè)處理單個(gè)點(diǎn)數(shù)據(jù)的線程。
3.根據(jù)權(quán)利要求2所述的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,其特征在于,所述步驟C)進(jìn)一步包括如下步驟: Cl)按照設(shè)定的規(guī)定 選擇多個(gè)點(diǎn)或多個(gè)像素點(diǎn)的數(shù)據(jù); C2)按照設(shè)定規(guī)則排列上述被選擇點(diǎn)或點(diǎn)數(shù)據(jù),使其形成一個(gè)隊(duì)列或表; C3)形成一個(gè)新的塊著色器線程,該線程依次對上述隊(duì)列或表中的點(diǎn)進(jìn)行圖形處理。
4.根據(jù)權(quán)利要求3所述的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,其特征在于,在所述步驟C)中,如需要處理的點(diǎn)多于一次選擇規(guī)定的點(diǎn),則按照設(shè)定規(guī)定進(jìn)行多次選擇,形成多個(gè)隊(duì)列或表,得到多個(gè)線程。
5.根據(jù)權(quán)利要求4所述的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,其特征在于,在所述步驟C)中,當(dāng)形成多個(gè)線程時(shí),其最后形成的線程處理的點(diǎn)為剩余的、小于規(guī)定的點(diǎn)數(shù)的所有點(diǎn)。
6.根據(jù)權(quán)利要求5所述的在CPU上執(zhí)行像素著色器的程序轉(zhuǎn)換方法,其特征在于,在所述步驟Cl)中,按照點(diǎn)的位置的相鄰程度選擇一個(gè)線程所處理的點(diǎn);被選中點(diǎn)的集合構(gòu)成塊。
7.—種在CPU上執(zhí)行像素著色器的程序變換裝置,其特征在于,所述裝置按照事先設(shè)定的規(guī)則,將適合傳統(tǒng)圖形處理器上執(zhí)行的程序轉(zhuǎn)變成適合CPU執(zhí)行的等效代碼;其中,所述裝置包括: 判斷單元:用于當(dāng)前指令是否使用指定語言寫的像素著色器程序,如否,按照通常的指令編譯并輸出;如是,調(diào)用像素點(diǎn)輸入?yún)?shù)插值單元;所述指定的像素著色器程序是使用專用于3D圖形處理的編程語言寫成的、對一個(gè)像素點(diǎn)進(jìn)行圖形處理的程序;所述程序在傳統(tǒng)的編譯情況下將轉(zhuǎn)換一個(gè)獨(dú)立線程在圖形處理器上執(zhí)行;多個(gè)像素點(diǎn)通過多個(gè)獨(dú)立線程并發(fā)處理; 像素點(diǎn)輸入?yún)?shù)插值單元:用于取得所述著色器程序中包含或隱含的、表示該程序處理的所有點(diǎn)的輸入?yún)?shù)或/和使用指定的差值算法,通過對頂點(diǎn)的參數(shù)插值得到像素的輸入?yún)?shù); 線程形成單元:用于將將指定個(gè)數(shù)的不同坐標(biāo)的點(diǎn)形成一個(gè)塊,將所述塊作為一個(gè)單元,形成一個(gè)依次對所述單元中每個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行圖形處理的線程; 線程輸出單元:用于輸出所述線程并在CPU硬件上執(zhí)行。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述判斷單元判斷的著色器是包含紋理請求的像素著色器。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述線程形成單元包括: 點(diǎn)選擇模塊:用于按照設(shè)定的規(guī)定選擇多個(gè)點(diǎn)或多個(gè)點(diǎn)的數(shù)據(jù); 點(diǎn)排列模塊:用于按照設(shè)定規(guī)則排列上述被選擇點(diǎn)或點(diǎn)數(shù)據(jù),使其形成一個(gè)隊(duì)列或表; 線程形成模塊:用于形成新塊著色器線程,該線程依次對上述隊(duì)列或表中的像素點(diǎn)進(jìn)行圖形處理。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述點(diǎn)選擇模塊依據(jù)點(diǎn)的位置的相鄰程度選擇一個(gè)線程所處 理的點(diǎn)。
【文檔編號】G06F9/45GK103995725SQ201410166052
【公開日】2014年8月20日 申請日期:2014年4月24日 優(yōu)先權(quán)日:2014年4月24日
【發(fā)明者】劉鑫, 冀謙祥, 周志德 申請人:深圳中微電科技有限公司