欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理未對(duì)準(zhǔn)塊傳送操作的制作方法

文檔序號(hào):11635280閱讀:197來源:國知局
處理未對(duì)準(zhǔn)塊傳送操作的制造方法與工藝

本發(fā)明涉及圖形處理,且更確切地說,涉及用于利用圖形處理器執(zhí)行塊傳送(blt)操作的技術(shù)。



背景技術(shù):

圖形處理單元(gpu)通常執(zhí)行blt操作以將源表面區(qū)域復(fù)制到目的地表面區(qū)域,或?qū)⒍鄠€(gè)源表面的對(duì)應(yīng)區(qū)域合成到目的地表面的單個(gè)對(duì)應(yīng)區(qū)域中。gpu可包含用于將表面寫入到存儲(chǔ)器和從存儲(chǔ)器讀取表面作為blt操作的部分的專用硬件。用于寫入和讀取的gpu硬件可能具有需要滿足的各種對(duì)準(zhǔn)約束條件,以便成功地服務(wù)blt命令。如果blt命令不滿足此類對(duì)準(zhǔn)約束條件,則所述gpu硬件可能不能夠服務(wù)所述blt命令。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明描述用于處理未對(duì)準(zhǔn)blt命令的技術(shù)。未對(duì)準(zhǔn)blt命令可指不滿足對(duì)準(zhǔn)約束gpu的對(duì)準(zhǔn)約束條件且因此可能不能夠被gpu處理的blt命令。本發(fā)明的技術(shù)可涉及將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,其中所述多個(gè)對(duì)準(zhǔn)blt命令可集體地產(chǎn)生與未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。然而,不同于未對(duì)準(zhǔn)blt命令,多個(gè)對(duì)準(zhǔn)blt命令可滿足gpu的對(duì)準(zhǔn)約束條件,并且因此能夠被gpu處理。

相對(duì)于使用中央處理單元(cpu),使用gpu來處理blt命令可加快blt命令的執(zhí)行和/或減小與blt命令的執(zhí)行相關(guān)聯(lián)的功率消耗。因此,通過將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,在不需要cpu預(yù)處理和/或后處理基礎(chǔ)未對(duì)準(zhǔn)表面的情況下,可實(shí)現(xiàn)針對(duì)未對(duì)準(zhǔn)blt命令的相對(duì)低功率的gpu加速blt處理的益處。以此方式,可改善在基于對(duì)準(zhǔn)約束gpu的系統(tǒng)中與處理未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的性能和/或功率消耗。

在一個(gè)實(shí)例中,本發(fā)明描述一種方法,其包含利用一或多個(gè)處理器將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令。

在另一實(shí)例中,本發(fā)明描述一種裝置,其包含經(jīng)配置以將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令的一或多個(gè)處理器。

在另一實(shí)例中,本發(fā)明描述一種設(shè)備,其包含用于接收未對(duì)準(zhǔn)blt命令的裝置。所述設(shè)備進(jìn)一步包含用于將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令的裝置。

在另一實(shí)例中,本發(fā)明描述一種計(jì)算機(jī)可讀存儲(chǔ)媒體存儲(chǔ)指令,其在執(zhí)行時(shí)致使一或多個(gè)處理器將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令。

在附圖和下文描述中闡述本發(fā)明的一或多個(gè)實(shí)例的細(xì)節(jié)。本發(fā)明的其它特征、目標(biāo)和優(yōu)勢將從所述描述和圖式以及從權(quán)利要求書中顯而易見。

附圖說明

圖1是說明可用以實(shí)施本發(fā)明的blt操作處理技術(shù)的實(shí)例計(jì)算裝置的框圖。

圖2是更詳細(xì)地說明圖1的計(jì)算裝置的部分的框圖。

圖3是說明根據(jù)本發(fā)明的實(shí)例單源blt操作的概念圖。

圖4是說明根據(jù)本發(fā)明的實(shí)例多源blt操作的概念圖。

圖5是說明用于圖1和2的實(shí)例計(jì)算裝置的實(shí)例命令處理流程的概念圖。

圖6是說明根據(jù)本發(fā)明的用于通過組合表面的線來產(chǎn)生對(duì)準(zhǔn)表面的實(shí)例技術(shù)的概念圖。

圖7和8是說明使用圖6中所說明的技術(shù)將未對(duì)準(zhǔn)blt操作轉(zhuǎn)換為兩個(gè)對(duì)準(zhǔn)blt操作的實(shí)例的概念圖。

圖9是說明根據(jù)本發(fā)明的用于界定多個(gè)對(duì)準(zhǔn)虛擬表面的實(shí)例技術(shù)的概念圖。

圖10和11是說明根據(jù)本發(fā)明的使用圖9中所界定的多個(gè)對(duì)準(zhǔn)虛擬表面將未對(duì)準(zhǔn)blt操作轉(zhuǎn)換為兩個(gè)對(duì)準(zhǔn)blt操作的實(shí)例的概念圖。

圖12是說明根據(jù)本發(fā)明的用于處理未對(duì)準(zhǔn)blt操作的實(shí)例技術(shù)的流程圖。

具體實(shí)施方式

本發(fā)明描述用于處理未對(duì)準(zhǔn)塊傳送(blt)命令的技術(shù)。未對(duì)準(zhǔn)blt命令可指不滿足對(duì)準(zhǔn)約束圖形處理單元(gpu)的對(duì)準(zhǔn)約束條件并且因此可能不能夠被gpu處理的blt命令。本發(fā)明的技術(shù)可涉及將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,其中所述多個(gè)對(duì)準(zhǔn)blt命令可集體地產(chǎn)生與未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。然而,不同于未對(duì)準(zhǔn)blt命令,多個(gè)對(duì)準(zhǔn)blt命令可滿足gpu的對(duì)準(zhǔn)約束條件,并且因此能夠被gpu處理。

相對(duì)于使用中央處理單元(cpu),使用gpu來處理blt命令可加快blt命令的執(zhí)行和/或減小與blt命令的執(zhí)行相關(guān)聯(lián)的功率消耗。因此,通過將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,在不需要cpu預(yù)處理和/或后處理基礎(chǔ)未對(duì)準(zhǔn)表面的情況下,可實(shí)現(xiàn)針對(duì)未對(duì)準(zhǔn)blt命令的相對(duì)低功率的gpu加速blt處理的益處。以此方式,可改善在基于對(duì)準(zhǔn)約束gpu的系統(tǒng)中與處理未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的性能和/或功率消耗。

blt命令可指發(fā)指令給gpu以執(zhí)行blt操作的命令。blt操作可指涉及將源表面區(qū)域復(fù)制到目的地表面區(qū)域、或?qū)⒍鄠€(gè)源表面的對(duì)應(yīng)區(qū)域合成到目的地表面的單個(gè)對(duì)應(yīng)區(qū)域中的操作。源表面區(qū)域可稱作源區(qū)域,且目的地表面區(qū)域可稱作目的地區(qū)域。所述源區(qū)域和目的地區(qū)域或者可稱為blt區(qū)域和/或復(fù)制區(qū)域,以指示復(fù)制和合成相對(duì)于這些區(qū)域內(nèi)的像素而發(fā)生。blt區(qū)域中的每一者可以是包含相應(yīng)blt區(qū)域的表面的連續(xù)子集。在一些實(shí)例中,blt區(qū)域可為矩形區(qū)域。

gpu可包含用于將表面寫入到存儲(chǔ)器和從存儲(chǔ)器讀取表面作為blt操作的部分的專用硬件。所述硬件可具有對(duì)準(zhǔn)約束條件,其要求表面的每一行的開始對(duì)應(yīng)于是預(yù)定對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)的存儲(chǔ)器地址。滿足對(duì)準(zhǔn)約束條件的表面稱為對(duì)準(zhǔn)表面,而不滿足對(duì)準(zhǔn)約束條件的表面稱為未對(duì)準(zhǔn)表面。

時(shí)常,編譯器或應(yīng)用程序可存取將執(zhí)行blt操作的特定gpu硬件的對(duì)準(zhǔn)約束條件,且可因此基于所述對(duì)準(zhǔn)約束條件而產(chǎn)生blt指令以使得所得表面被對(duì)準(zhǔn)。然而,并非所有系統(tǒng)使gpu的對(duì)準(zhǔn)約束條件可供編譯器或應(yīng)用程序使用?;蚣幢憧捎?,一些編譯器或應(yīng)用程序也可能因?yàn)楦鞣N原因(例如,為了減小編譯器或應(yīng)用程序的復(fù)雜度)而確定不優(yōu)化所產(chǎn)生的代碼來滿足此類對(duì)準(zhǔn)約束條件。

如果用于blt操作的一或多個(gè)表面并不滿足gpu硬件的對(duì)準(zhǔn)約束條件,則gpu驅(qū)動(dòng)程序可能不能夠直接使用gpu來加快blt操作的性能。gpu驅(qū)動(dòng)程序可能改為需要利用中央處理單元(cpu)執(zhí)行blt操作。在其它情況下,gpu驅(qū)動(dòng)程序可使用cpu來將未對(duì)準(zhǔn)表面復(fù)制到對(duì)準(zhǔn)表面中,使用gpu對(duì)對(duì)準(zhǔn)表面執(zhí)行blt操作,且使用cpu將blt操作的結(jié)果復(fù)制回到未對(duì)準(zhǔn)表面中。在任一情況下,使用cpu執(zhí)行blt操作自身或在未對(duì)準(zhǔn)表面與對(duì)準(zhǔn)表面之間轉(zhuǎn)變會(huì)增大blt操作的功率消耗且降低blt操作的性能。

對(duì)準(zhǔn)blt命令可指其中與blt命令相關(guān)聯(lián)的所有表面是對(duì)準(zhǔn)表面的blt命令。未對(duì)準(zhǔn)blt命令可指其中所述表面中的至少一者是未對(duì)準(zhǔn)表面的blt命令。類似地,對(duì)準(zhǔn)blt操作可指其中與blt操作相關(guān)聯(lián)的所有表面是對(duì)準(zhǔn)表面的blt操作,且未對(duì)準(zhǔn)blt操作可指其中所述表面中的至少一者是未對(duì)準(zhǔn)表面的blt命令。

在概念上,對(duì)準(zhǔn)表面可指其中所述表面的每一行的開始對(duì)應(yīng)于是預(yù)定對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)的存儲(chǔ)器地址的表面。在一些實(shí)例中,所述預(yù)定對(duì)準(zhǔn)寬度可對(duì)應(yīng)于gpu存儲(chǔ)器存取硬件所需的用于適當(dāng)執(zhí)行blt操作的對(duì)準(zhǔn)寬度。對(duì)準(zhǔn)邊界可指是預(yù)定對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)的存儲(chǔ)器地址。

表面可由表面指針、表面寬度參數(shù)和表面高度參數(shù)界定。所述表面指針可指示(或指向)對(duì)應(yīng)于所述表面的起始的存儲(chǔ)器地址。所述表面寬度參數(shù)(或跨距參數(shù))可指示表面中每一行的寬度。所述表面高度參數(shù)可指示表面中包含多少行。

對(duì)準(zhǔn)表面可指以下情況下的表面:(1)表面指針指向?qū)?zhǔn)邊界;和(2)表面寬度是對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)。如果這些條件中的任一者未滿足,則將所述表面稱為未對(duì)準(zhǔn)。

根據(jù)本發(fā)明的第一方面,在滿足條件(1)且不滿足條件(2)的情況下(即,blt命令的基礎(chǔ)表面的表面寬度并非對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)),針對(duì)與blt命令相關(guān)聯(lián)的源表面和目的地表面中的每一者,圖形驅(qū)動(dòng)程序可將相應(yīng)表面的多個(gè)行組合為單個(gè)行以形成具有對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)的表面寬度的對(duì)準(zhǔn)虛擬表面。因?yàn)樘摂M表面的表面寬度是對(duì)準(zhǔn)寬度的整數(shù)倍數(shù),所以虛擬表面是可被對(duì)準(zhǔn)約束gpu處理的對(duì)準(zhǔn)表面。

然而,組合行以形成虛擬表面可導(dǎo)致blt區(qū)域(即,將被復(fù)制和/或合成的區(qū)域)轉(zhuǎn)變,使得所述區(qū)域不再是連續(xù)區(qū)域(例如,不再是單個(gè)連續(xù)矩形)。舉例來說,如果與傳入blt命令相關(guān)聯(lián)的源blt區(qū)域是單個(gè)連續(xù)矩形,那么將源表面轉(zhuǎn)變?yōu)樘摂M源表面可將源blt區(qū)域轉(zhuǎn)變?yōu)榭赡鼙舜瞬贿B續(xù)的兩個(gè)單獨(dú)矩形。通常,無法針對(duì)不連續(xù)blt區(qū)域執(zhí)行單blt操作。

為了解決這個(gè)問題,圖形驅(qū)動(dòng)程序可確定轉(zhuǎn)變的blt區(qū)域的連續(xù)子集并產(chǎn)生多個(gè)blt命令,其中blt命令中的每一者致使gpu針對(duì)轉(zhuǎn)變的blt區(qū)域的連續(xù)子集中的相應(yīng)一者執(zhí)行blt操作。舉例來說,在一矩形源blt區(qū)域被轉(zhuǎn)變?yōu)閮蓚€(gè)矩形源blt區(qū)域的情況下,圖形驅(qū)動(dòng)程序可產(chǎn)生針對(duì)第一矩形源blt區(qū)域的第一blt命令和針對(duì)第二矩形源blt區(qū)域的第二blt命令。

多個(gè)blt命令的源和目的地表面中的每一者可對(duì)應(yīng)于一或多個(gè)對(duì)準(zhǔn)虛擬表面,由此致使所述多個(gè)blt命令成為對(duì)準(zhǔn)blt命令。所述多個(gè)對(duì)準(zhǔn)blt命令可集體地處理整個(gè)源和目的地blt區(qū)域,由此產(chǎn)生與單個(gè)未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。以此方式,圖形驅(qū)動(dòng)程序可將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為可由對(duì)準(zhǔn)約束gpu服務(wù)的多個(gè)對(duì)準(zhǔn)blt命令。

根據(jù)本發(fā)明的第二方面,在條件(1)和(2)都未滿足的情況下(即,表面指針不指向?qū)?zhǔn)邊界,且blt命令的基礎(chǔ)表面的表面寬度并非對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)),圖形驅(qū)動(dòng)程序可按與上文相對(duì)于本發(fā)明的第一方面所描述的類似的方式加寬未對(duì)準(zhǔn)表面的寬度。這將使加寬表面寬度對(duì)應(yīng)于對(duì)準(zhǔn)寬度。然而,因?yàn)榧訉挶砻娴谋砻嬷羔槻辉趯?duì)準(zhǔn)邊界處開始,所以加寬表面仍未對(duì)準(zhǔn)。

用于解決這個(gè)問題的一個(gè)途徑是移位表面指針,使得移位的表面指針指向最近的對(duì)準(zhǔn)邊界。與上文相對(duì)于本發(fā)明的第一方面所描述的類似,加寬所述表面可將blt區(qū)域轉(zhuǎn)變?yōu)槎鄠€(gè)連續(xù)子集,且圖形驅(qū)動(dòng)程序可產(chǎn)生多個(gè)blt命令,其中blt命令中的每一者致使gpu針對(duì)轉(zhuǎn)變的blt區(qū)域的連續(xù)子集中的相應(yīng)一者執(zhí)行blt操作。然而,如果虛擬表面的寬度保持相同,那么移位表面指針可致使在所述表面的邊界附近的轉(zhuǎn)變的blt區(qū)域子集卷包虛擬表面的邊緣。換句話說,此類轉(zhuǎn)變的blt區(qū)域子集可能不再連續(xù),且可能不能夠通過單blt操作服務(wù)。

為了解決這個(gè)問題,圖形驅(qū)動(dòng)程序可產(chǎn)生兩個(gè)虛擬表面以用于源表面和目的地表面中的每一者。所述兩個(gè)虛擬表面可具有相同加寬的表面寬度,但具有單獨(dú)的對(duì)準(zhǔn)表面指針。虛擬表面中的每一者的表面指針可對(duì)應(yīng)于未對(duì)準(zhǔn)表面指針的任一側(cè)上的對(duì)準(zhǔn)邊界。舉例來說,gpu驅(qū)動(dòng)程序可針對(duì)第一虛擬表面產(chǎn)生指向小于未對(duì)準(zhǔn)表面指針的對(duì)準(zhǔn)邊界的表面指針,且針對(duì)第二虛擬表面產(chǎn)生指向大于未對(duì)準(zhǔn)表面指針的對(duì)準(zhǔn)邊界的表面指針。

如果轉(zhuǎn)變的blt區(qū)域子集卷包虛擬表面中的一者的邊緣,則所述子集將不卷包另一虛擬表面的邊緣。因此,當(dāng)產(chǎn)生針對(duì)轉(zhuǎn)變的blt區(qū)域子集中的每一者的blt命令時(shí),圖形驅(qū)動(dòng)程序可針對(duì)相應(yīng)blt命令選擇虛擬表面,其中對(duì)應(yīng)的轉(zhuǎn)變的blt區(qū)域子集不卷包虛擬表面的邊緣。換句話說,圖形驅(qū)動(dòng)程序可選擇允許轉(zhuǎn)變的blt區(qū)域子集中的每一者被表示為連續(xù)區(qū)域(例如,連續(xù)矩形區(qū)域)的虛擬表面。

多個(gè)blt命令的源和目的地表面中的每一者可對(duì)應(yīng)于多個(gè)對(duì)準(zhǔn)虛擬表面中的一者,由此致使所述多個(gè)blt命令成為對(duì)準(zhǔn)blt命令。所述多個(gè)對(duì)準(zhǔn)blt命令可集體地處理整個(gè)源和目的地blt區(qū)域,由此產(chǎn)生與單個(gè)未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。

不同于未對(duì)準(zhǔn)blt命令,多個(gè)對(duì)準(zhǔn)blt命令可能能夠被對(duì)準(zhǔn)約束圖形處理單元(gpu)處理,這相對(duì)于中央處理單元(cpu)可能能夠加快blt命令的執(zhí)行和/或減小與blt命令的執(zhí)行相關(guān)聯(lián)的功率消耗。通過將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,在不需要cpu預(yù)處理和/或后處理基礎(chǔ)未對(duì)準(zhǔn)表面的情況下,可實(shí)現(xiàn)針對(duì)未對(duì)準(zhǔn)blt命令的相對(duì)低功率的gpu加速blt處理的益處。以此方式,可改善與處理未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的性能和/或功率消耗。

圖1是說明可用以實(shí)施本發(fā)明的blt操作處理技術(shù)的實(shí)例計(jì)算裝置2的框圖。計(jì)算裝置2可包括個(gè)人計(jì)算機(jī)、桌上型計(jì)算機(jī)、膝上型計(jì)算機(jī)、計(jì)算機(jī)工作站、視頻游戲平臺(tái)或控制臺(tái)、無線通信裝置(例如,移動(dòng)電話、蜂窩式電話、衛(wèi)星電話和/或移動(dòng)電話手持機(jī))、陸線電話、因特網(wǎng)電話、手持裝置(例如,便攜式視頻游戲裝置或個(gè)人數(shù)字助理(pda))、個(gè)人音樂播放器、視頻播放器、顯示裝置、電視、電視機(jī)頂盒、服務(wù)器、中間網(wǎng)絡(luò)裝置、主機(jī)計(jì)算機(jī),或處理和/或顯示圖形數(shù)據(jù)的任何其它類型的裝置。

如圖1的實(shí)例中所說明,計(jì)算裝置2包含用戶輸入接口4、cpu6、存儲(chǔ)器子系統(tǒng)8、gpu10、顯示接口12、顯示器14和總線16。用戶輸入接口4、cpu6、存儲(chǔ)器子系統(tǒng)8、gpu10及顯示接口12可使用總線16彼此通信。應(yīng)注意,圖1中展示的不同組件之間的總線和通信接口的特定配置僅是示范性的,且具有相同或不同組件的計(jì)算裝置和/或其它圖形處理系統(tǒng)的其它配置可用于實(shí)施本發(fā)明的技術(shù)。

用戶輸入接口4可允許一或多個(gè)用戶輸入裝置(未展示)以通信方式耦合到計(jì)算裝置2。用戶輸入裝置可允許用戶經(jīng)由用戶輸入接口4將輸入提供到計(jì)算裝置2。實(shí)例用戶輸入裝置包含鍵盤、鼠標(biāo)、軌跡球、麥克風(fēng)、觸摸墊、觸敏或存在敏感(presence-sensitive)顯示器,或另一輸入裝置。在觸敏或存在敏感顯示器用作用戶輸入裝置的實(shí)例中,用戶輸入接口4的全部或部分可與顯示器14集成。

cpu6可包括控制計(jì)算裝置2的操作的通用或?qū)S锰幚砥?。cpu6可執(zhí)行一或多個(gè)軟件應(yīng)用程序。所述軟件應(yīng)用程序可包含(例如)視頻游戲應(yīng)用程序、圖形應(yīng)用程序、字處理器應(yīng)用程序、電子郵件應(yīng)用程序、總分析表應(yīng)用程序、媒體播放器應(yīng)用程序、圖形用戶接口應(yīng)用程序、操作系統(tǒng)或任何其它類型的軟件應(yīng)用或程序。

在cpu6上執(zhí)行的軟件應(yīng)用程序可包含發(fā)指令給gpu10以使圖形數(shù)據(jù)呈現(xiàn)到顯示器14的一或多個(gè)圖形呈現(xiàn)指令。在一些實(shí)例中,軟件指令可符合圖形應(yīng)用程序編程接口(api),例如,開放圖形庫api、開放圖形庫嵌入系統(tǒng)(opengles)api、direct3dapi、directxapi、rendermanapi、webglapi或任何其它公共或?qū)S袠?biāo)準(zhǔn)圖形api。為了處理圖形呈現(xiàn)指令,cpu6可將一或多個(gè)圖形呈現(xiàn)命令發(fā)布到gpu10以使gpu10執(zhí)行圖形數(shù)據(jù)的呈現(xiàn)的一些或全部。在一些實(shí)例中,待呈現(xiàn)的圖形數(shù)據(jù)可包含例如點(diǎn)、線、三角形、四邊形、三角形帶、分塊等圖形基元的列表。

存儲(chǔ)器子系統(tǒng)8可經(jīng)配置以服務(wù)從計(jì)算裝置2內(nèi)的其它組件接收的存儲(chǔ)器存取請(qǐng)求。舉例來說,存儲(chǔ)器子系統(tǒng)8可服務(wù)來自cpu6、gpu10和/或顯示接口12的存儲(chǔ)器存取請(qǐng)求。存儲(chǔ)器存取請(qǐng)求可包含讀取存取請(qǐng)求和寫入存取請(qǐng)求。存儲(chǔ)器子系統(tǒng)8經(jīng)由總線16以通信方式耦合到cpu6、gpu10、用戶輸入接口4和顯示接口12。

存儲(chǔ)器子系統(tǒng)8包含存儲(chǔ)器控制器20和存儲(chǔ)器22。存儲(chǔ)器控制器20促進(jìn)進(jìn)出存儲(chǔ)器22的數(shù)據(jù)的傳送。舉例來說,存儲(chǔ)器控制器20可接收來自cpu6和/或gpu10的存儲(chǔ)器讀取請(qǐng)求和存儲(chǔ)器寫入請(qǐng)求,且相對(duì)于存儲(chǔ)器22服務(wù)于此類請(qǐng)求以便向計(jì)算裝置2中的組件提供存儲(chǔ)器服務(wù)。

存儲(chǔ)器控制器20經(jīng)由專用存儲(chǔ)器總線以通信方式耦合到存儲(chǔ)器22,且經(jīng)由總線16耦合到其它組件(例如,cpu6和gpu10)。雖然存儲(chǔ)器控制器20在圖1的實(shí)例計(jì)算裝置2中說明為與cpu6和存儲(chǔ)器22兩者分開的處理模塊,但在其它實(shí)例中,存儲(chǔ)器控制器20的功能性中的一些或全部可在cpu6、gpu10和存儲(chǔ)器22中的一或多者中實(shí)施。

存儲(chǔ)器22可存儲(chǔ)可由cpu6存取以用于執(zhí)行的程序模塊及/或指令及/或由在cpu6上執(zhí)行的程序使用的數(shù)據(jù)。舉例來說,存儲(chǔ)器22可存儲(chǔ)用戶應(yīng)用程序和與所述應(yīng)用程序相關(guān)聯(lián)的圖形數(shù)據(jù)。存儲(chǔ)器22還可存儲(chǔ)用于由計(jì)算裝置2的其它組件使用和/或由其產(chǎn)生的信息。舉例來說,存儲(chǔ)器22可充當(dāng)用于gpu10的裝置存儲(chǔ)器,且可存儲(chǔ)將由gpu10操作的數(shù)據(jù)以及由gpu10執(zhí)行的操作所產(chǎn)生的數(shù)據(jù)。舉例來說,存儲(chǔ)器22可存儲(chǔ)表面、源表面、目的地表面、紋理緩沖器、深度緩沖器、模板緩沖器、頂點(diǎn)緩沖器、幀緩沖器或其類似者的任何組合。另外,存儲(chǔ)器22可存儲(chǔ)用于由gpu10處理的命令流。存儲(chǔ)器22可包含一或多個(gè)易失性或非易失性存儲(chǔ)器或存儲(chǔ)裝置,例如,隨機(jī)存取存儲(chǔ)器(ram)、靜態(tài)ram(sram)、動(dòng)態(tài)ram(dram)、同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(sdram)、只讀存儲(chǔ)器(rom)、可擦除可編程rom(eprom)、電可擦除可編程rom(eeprom)、快閃存儲(chǔ)器、磁性數(shù)據(jù)媒體或光學(xué)存儲(chǔ)媒體。在一些實(shí)例中,存儲(chǔ)器22可為雙數(shù)據(jù)速率(ddr)sdram,例如,ddr1sdram、ddr2sdram、ddr3sdram、ddr4sdram等。

gpu10可經(jīng)配置以執(zhí)行由cpu6發(fā)布到gpu10的命令。由gpu10執(zhí)行的命令可包含圖形命令、繪制調(diào)用命令、gpu狀態(tài)編程命令、blt命令、通用計(jì)算命令、內(nèi)核執(zhí)行命令等。blt命令可包含例如存儲(chǔ)器復(fù)制命令、存儲(chǔ)器合成命令和傳圖命令(即,塊傳送命令)。

在一些實(shí)例中,gpu10可經(jīng)配置以呈現(xiàn)和顯示從cpu6接收的圖形數(shù)據(jù)。在此類實(shí)例中,cpu6可向gpu10提供圖形數(shù)據(jù)以用于呈現(xiàn)到顯示器14,且發(fā)布一或多個(gè)圖形命令到gpu10。圖形命令可包含例如繪制調(diào)用命令、gpu狀態(tài)編程命令、blt命令、傳圖命令等。圖形數(shù)據(jù)可包含頂點(diǎn)緩沖器、紋理數(shù)據(jù)、表面數(shù)據(jù)等。在一些實(shí)例中,cpu6可通過將命令和圖形數(shù)據(jù)寫入到存儲(chǔ)器22(其可由gpu10存取)而將所述命令和圖形數(shù)據(jù)提供給gpu10。

在其它實(shí)例中,gpu10可經(jīng)配置以針對(duì)在cpu6上執(zhí)行的應(yīng)用程序執(zhí)行通用計(jì)算。在此類實(shí)例中,cpu6可將通用計(jì)算數(shù)據(jù)提供到gpu10,且將一或多個(gè)通用計(jì)算命令發(fā)布到gpu10。通用計(jì)算命令可包含例如內(nèi)核執(zhí)行命令、blt命令等。在一些實(shí)例中,cpu6可通過將命令和圖形數(shù)據(jù)寫入到存儲(chǔ)器22(其可由gpu10存取)而將命令和通用計(jì)算數(shù)據(jù)提供到gpu10。

在一些情況下,與cpu6相比,gpu10可內(nèi)置有提供更有效的向量操作處理的高度并行結(jié)構(gòu)。舉例來說,gpu10可包含多個(gè)處理元件,其經(jīng)配置而以并行方式對(duì)多個(gè)頂點(diǎn)、控制點(diǎn)、像素和/或其它數(shù)據(jù)進(jìn)行操作。在一些情況下,與使用cpu6呈現(xiàn)圖像相比,gpu10的高度并行性質(zhì)可允許gpu10更快地將圖形圖像(例如,gui和二維(2d)和/或三維(3d)圖形場景)呈現(xiàn)到顯示器14上。另外,gpu10的高度并行性質(zhì)可允許gpu10比cpu6更快速地處理用于通用計(jì)算應(yīng)用程序的某些類型的向量和矩陣運(yùn)算。

在一些實(shí)例中,gpu10可集成到計(jì)算裝置2的母板中。在其它情況下,gpu10可存在于安裝在計(jì)算裝置2的母板中的端口中的圖形卡上,或可以其它方式并入經(jīng)配置以與計(jì)算裝置2交互操作的外圍裝置內(nèi)。在其它情況下,gpu10可位于與cpu6相同的微芯片上,從而形成片上系統(tǒng)(soc)。gpu10可包含一或多個(gè)處理器,例如,一或多個(gè)微處理器、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)、數(shù)字信號(hào)處理器(dsp)或其它等效的集成或離散邏輯電路。

在一些實(shí)例中,gpu10可包含gpu高速緩沖存儲(chǔ)器,其可針對(duì)存儲(chǔ)器22的全部或一部分提供高速緩存服務(wù)。在此類實(shí)例中,gpu10可使用高速緩沖存儲(chǔ)器以利用本地存儲(chǔ)裝置而非片外存儲(chǔ)器來本地處理數(shù)據(jù)。這可允許gpu10通過減少gpu10經(jīng)由總線16(其可能經(jīng)受繁重的總線業(yè)務(wù))存取存儲(chǔ)器22的需要而以更有效的方式操作。然而,在一些實(shí)例中,gpu10可不包含單獨(dú)的高速緩沖存儲(chǔ)器,而改為經(jīng)由總線16利用存儲(chǔ)器22。gpu高速緩沖存儲(chǔ)器可包含一或多個(gè)易失性或非易失性存儲(chǔ)器或存儲(chǔ)裝置,例如,隨機(jī)存取存儲(chǔ)器(ram)、靜態(tài)ram(sram)、動(dòng)態(tài)ram(dram)、可擦除可編程rom(eprom)、電可擦除可編程rom(eeprom)、快閃存儲(chǔ)器、磁性數(shù)據(jù)媒體或光學(xué)存儲(chǔ)媒體。

cpu6和/或gpu10可將呈現(xiàn)的圖像數(shù)據(jù)存儲(chǔ)在分配于存儲(chǔ)器22內(nèi)的幀緩沖器中。顯示接口12可從幀緩沖器檢索數(shù)據(jù)且對(duì)顯示器14進(jìn)行配置以顯示由呈現(xiàn)的圖像數(shù)據(jù)表示的圖像。在一些實(shí)例中,顯示接口12可包含經(jīng)配置以將從幀緩沖器檢索的數(shù)字值轉(zhuǎn)換為可由顯示器14消耗的模擬信號(hào)的數(shù)/模轉(zhuǎn)換器(dac)。在其它實(shí)例中,顯示接口12可將數(shù)字值直接傳遞到顯示器14以進(jìn)行處理。

顯示器14可包含監(jiān)視器、電視、投影裝置、液晶顯示器(lcd)、等離子顯示面板、發(fā)光二極管(led)陣列、陰極射線管(crt)顯示器、電子紙、表面?zhèn)鲗?dǎo)電子發(fā)射顯示器(sed)、激光電視顯示器、納米晶體顯示器或另一類型的顯示單元。顯示器14可集成于計(jì)算裝置2內(nèi)。舉例來說,顯示器14可為移動(dòng)電話手持機(jī)或平板計(jì)算機(jī)的屏幕?;蛘?,顯示器14可為經(jīng)由有線或無線通信鏈路耦合到計(jì)算裝置2的獨(dú)立裝置。舉例來說,顯示器14可為經(jīng)由電纜或無線鏈路連接至個(gè)人計(jì)算機(jī)的計(jì)算機(jī)監(jiān)視器或平板顯示器。

總線16可使用總線結(jié)構(gòu)和總線協(xié)議(包含第一代、第二代和第三代總線結(jié)構(gòu)和協(xié)議、共享總線結(jié)構(gòu)和協(xié)議、點(diǎn)對(duì)點(diǎn)總線結(jié)構(gòu)和協(xié)議、單向總線結(jié)構(gòu)和協(xié)議以及雙向總線結(jié)構(gòu)和協(xié)議)的任何組合來實(shí)施??捎靡詫?shí)施總線16的不同總線結(jié)構(gòu)和協(xié)議的實(shí)例包含例如超傳輸總線、infiniband總線、高級(jí)圖形端口總線、外圍組件互連(pci)總線、pci高速總線、高級(jí)微控制器總線架構(gòu)(amba)、高級(jí)高性能總線(ahb)、amba高級(jí)外圍總線(apb)和amba高級(jí)exentisible接口(axi)總線。也可使用其它類型的總線結(jié)構(gòu)和協(xié)議。

gpu10可接收blt命令,且通過執(zhí)行對(duì)應(yīng)的blt操作服務(wù)所述blt命令。在一些情況下,gpu10可包含經(jīng)配置以執(zhí)行blt操作的存儲(chǔ)器存取硬件,且此硬件可具有需要滿足以便成功地服務(wù)blt操作的各種對(duì)準(zhǔn)約束條件。舉例來說,此類存儲(chǔ)器存取硬件可經(jīng)配置以要求用于blt操作的表面中的一些或全部對(duì)準(zhǔn)。

對(duì)于待對(duì)準(zhǔn)的表面,存儲(chǔ)器存取硬件可要求(1)所述表面的表面指針指向?qū)?zhǔn)邊界;和(2)所述表面的表面寬度是對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)。如果這些條件中的任一者未滿足,則將所述表面稱為未對(duì)準(zhǔn)。

在一些情況下,在cpu6上執(zhí)行的軟件應(yīng)用程序可發(fā)布未對(duì)準(zhǔn)blt命令。當(dāng)編譯軟件應(yīng)用程序的編譯器或編寫的軟件應(yīng)用程序在編譯和/或運(yùn)行時(shí)間之時(shí)并不具有可供所述編譯器或應(yīng)用程序使用的對(duì)準(zhǔn)約束條件或并不決定優(yōu)化所產(chǎn)生的代碼以滿足對(duì)準(zhǔn)約束條件(例如,為了減小編譯器或應(yīng)用程序的復(fù)雜度)時(shí),未對(duì)準(zhǔn)blt命令可產(chǎn)生。因?yàn)閎lt命令未對(duì)準(zhǔn),所以gpu10可能不能夠直接服務(wù)此類命令。

根據(jù)本發(fā)明的實(shí)例,cpu6和/或gpu10可經(jīng)配置以將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,其中所述多個(gè)對(duì)準(zhǔn)blt命令可集體地產(chǎn)生與未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。所述多個(gè)對(duì)準(zhǔn)blt命令可滿足gpu10的對(duì)準(zhǔn)約束條件,且因此能夠被gpu10處理。以此方式,可獲得針對(duì)未對(duì)準(zhǔn)blt命令的相對(duì)低功率的gpu加速blt處理的益處,由此改善與處理未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的性能和/或功率消耗。

圖2是更詳細(xì)地說明圖1中的計(jì)算裝置2的部分的框圖。如圖2中所展示,cpu6以通信方式耦合到gpu10和存儲(chǔ)器子系統(tǒng)8,且gpu10以通信方式耦合到cpu6和存儲(chǔ)器子系統(tǒng)8。在一些實(shí)例中,gpu10可集成到具有cpu6的母板上。在額外實(shí)例中,gpu10可實(shí)施在安裝于包含cpu6的母板的端口中的圖形卡上。在其它實(shí)例中,gpu10可并入在經(jīng)配置以與cpu6交互操作的外圍裝置內(nèi)。在額外實(shí)例中,gpu10可位于與cpu6相同的微芯片上,從而形成片上系統(tǒng)(soc)。

在圖2的實(shí)例系統(tǒng)中,cpu6執(zhí)行軟件應(yīng)用程序24、圖形api26、gpu驅(qū)動(dòng)程序28和操作系統(tǒng)30。軟件應(yīng)用程序24可包含使圖形圖像被顯示的一或多個(gè)指令和/或使非圖形任務(wù)(例如,通用計(jì)算任務(wù))在gpu10上執(zhí)行的一或多個(gè)指令。在一些實(shí)例中,軟件應(yīng)用程序24可包含一或多個(gè)blt指令,其可替換地稱為blt命令、軟件blt命令或應(yīng)用程序blt命令。軟件應(yīng)用程序24可將指令發(fā)布到圖形api26。圖形api26可為將從軟件應(yīng)用程序24接收的指令轉(zhuǎn)譯為可由gpu驅(qū)動(dòng)程序28消耗的格式的運(yùn)行時(shí)間服務(wù)。

gpu驅(qū)動(dòng)程序28經(jīng)由圖形api26從軟件應(yīng)用程序24接收指令,且控制gpu10的操作以服務(wù)所述指令。舉例來說,gpu驅(qū)動(dòng)程序28可調(diào)配一或多個(gè)命令,將所述命令放置到存儲(chǔ)器22中,且發(fā)指令給gpu10以執(zhí)行所述命令。在一些實(shí)例中,gpu驅(qū)動(dòng)程序28可將命令放置到存儲(chǔ)器22中,且經(jīng)由操作系統(tǒng)30(例如經(jīng)由一或多個(gè)系統(tǒng)調(diào)用)與gpu10通信。

在一些實(shí)例中,gpu驅(qū)動(dòng)程序28(或cpu6上的另一軟件組件)可經(jīng)配置以從軟件應(yīng)用程序24接收未對(duì)準(zhǔn)blt命令,且根據(jù)本發(fā)明中描述的技術(shù)中的任一者將所述未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令。gpu驅(qū)動(dòng)程序28可將所述多個(gè)對(duì)準(zhǔn)blt命令提供到gpu10以用于執(zhí)行。

gpu10包含命令引擎32、光柵操作單元34、緩沖器36、讀取引擎38和寫入引擎40。在一些實(shí)例中,gpu10可包含三維(3d)圖形呈現(xiàn)管線(未展示)。在此類實(shí)例中,光柵操作單元34可形成3d圖形呈現(xiàn)管線的一部分。

在一些實(shí)例中,gpu10可包含多個(gè)處理單元(未展示),其中每一者可為可編程處理單元或固定功能處理單元。在gpu10包含3d圖形呈現(xiàn)管線的情況下,所述多個(gè)處理單元可一起操作以實(shí)施3d圖形呈現(xiàn)管線。在一些實(shí)例中,3d圖形呈現(xiàn)管線可符合由一或多個(gè)公共和/或?qū)S?d圖形標(biāo)準(zhǔn)api(例如,開放圖形庫api、開放圖形庫嵌入系統(tǒng)(opengles)api、direct3dapi、directxapi等)指定的3d圖形管線。

可編程處理單元可包含例如經(jīng)配置以執(zhí)行通過cpu6加載到gpu10上的一或多個(gè)著色器程序的可編程著色器單元。在一些實(shí)例中,著色器程序可為用高級(jí)著色語言(例如,opengl著色語言(glsl)、高級(jí)著色語言(hlsl)、用于圖形的c(cg)著色語言等)編寫的程序的經(jīng)編譯版本。在一些實(shí)例中,可編程著色器單元可包含經(jīng)配置以并行操作的多個(gè)處理單元,例如,simd管線??删幊讨鲉卧删哂写鎯?chǔ)著色器程序指令的程序存儲(chǔ)器和執(zhí)行狀態(tài)寄存器,例如指示程序存儲(chǔ)器中正執(zhí)行的當(dāng)前指令或待提取的下一指令的程序計(jì)數(shù)器寄存器。所述可編程著色器單元可包含(例如)頂點(diǎn)著色器單元、像素著色器單元、幾何著色器單元、外殼著色器單元、域著色器單元、計(jì)算著色器單元等。

固定功能處理單元可包含含經(jīng)硬連線以執(zhí)行某些功能的硬件。盡管固定功能硬件可經(jīng)由例如一或多個(gè)控制信號(hào)而配置以執(zhí)行不同功能,但所述固定功能硬件通常并不包含能夠接收用戶編譯程序的程序存儲(chǔ)器。gpu10中包含的固定功能處理單元可包含(例如)執(zhí)行例如光柵操作、深度測試、剪刀測試、阿爾法(alpha)混合等的處理單元。

在光柵操作單元34包含在3d呈現(xiàn)管線中的實(shí)例中,光柵操作單元34在一些實(shí)例中可為可配置固定功能處理單元。在一些實(shí)例中,光柵操作單元34可實(shí)施為3d呈現(xiàn)管線的輸出合并器處理單元。

命令引擎32經(jīng)配置以從cpu6接收命令且使gpu10執(zhí)行所述命令。在一些實(shí)例中,cpu6可將命令放置于存儲(chǔ)器22中,且命令引擎32可從存儲(chǔ)器22檢索所述命令。所述命令可包含(例如)改變gpu10的狀態(tài)(例如,呈現(xiàn)狀態(tài))的狀態(tài)命令、發(fā)指令給gpu10以將特定著色器程序加載到3d呈現(xiàn)管線中的可編程處理單元中的一或多者中的著色器程序綁定命令、發(fā)指令給gpu10以呈現(xiàn)存儲(chǔ)在存儲(chǔ)器22中的特定數(shù)據(jù)的繪制命令、發(fā)指令給gpu10以相對(duì)于存儲(chǔ)在存儲(chǔ)器22中的特定數(shù)據(jù)執(zhí)行一或多個(gè)通用計(jì)算內(nèi)核的通用計(jì)算命令,和/或發(fā)指令給gpu10以執(zhí)行一或多個(gè)blt操作的blt命令。

響應(yīng)于接收到狀態(tài)命令,命令引擎32可經(jīng)配置以基于所述狀態(tài)命令將gpu10中的一或多個(gè)狀態(tài)寄存器設(shè)置到特定值,和/或基于所述狀態(tài)命令對(duì)用于gpu10的3d呈現(xiàn)管線(未展示)中的固定功能處理單元中的一或多者進(jìn)行配置。響應(yīng)于接收到繪制調(diào)用命令,命令引擎32可經(jīng)配置以使gpu10中的3d呈現(xiàn)管線(未展示)從存儲(chǔ)器22檢索3d幾何形狀,且將所述3d幾何形狀數(shù)據(jù)呈現(xiàn)為2d圖形圖像。響應(yīng)于接收到著色器程序綁定命令,命令引擎32可將一或多個(gè)特定著色器程序加載到3d呈現(xiàn)管線中的可編程處理單元中的一或多者中。

響應(yīng)于接收到blt命令,命令引擎32可使gpu10執(zhí)行對(duì)應(yīng)于所述blt命令的blt操作。為了執(zhí)行所述blt操作,在一些實(shí)例中,命令引擎32可基于所述blt命令對(duì)光柵操作單元34、緩沖器36、讀取引擎38和寫入引擎40中的一或多者進(jìn)行配置,且使經(jīng)配置的組件執(zhí)行對(duì)應(yīng)于所述blt命令的blt操作。

光柵操作單元34可基于源數(shù)據(jù)執(zhí)行一或多個(gè)光柵操作以產(chǎn)生目的地?cái)?shù)據(jù)。所述源數(shù)據(jù)可對(duì)應(yīng)于blt操作的一或多個(gè)源blt區(qū)域。在一些實(shí)例中,光柵操作單元34可從緩沖器36和/或從寫入引擎40接收源數(shù)據(jù)。所述目的地?cái)?shù)據(jù)可寫入到與所述blt操作相關(guān)聯(lián)的目的地blt區(qū)域。

由光柵操作單元34執(zhí)行的光柵操作類型可例如由命令引擎32配置。所述光柵操作類型可指定目的地?cái)?shù)據(jù)如何基于源數(shù)據(jù)而產(chǎn)生以用于特定blt操作。在光柵操作單元34組合兩個(gè)不同源區(qū)域以產(chǎn)生目的地?cái)?shù)據(jù)(例如,合成操作)的情況下,光柵化操作類型可指定所述兩個(gè)不同源區(qū)域如何組合以產(chǎn)生目的地?cái)?shù)據(jù)。在一些實(shí)例中,光柵操作類型可為逐位運(yùn)算,其指定如何基于源區(qū)域中的對(duì)應(yīng)像素位置產(chǎn)生針對(duì)目的地區(qū)域中的特定像素位置的目的地?cái)?shù)據(jù)。所述源區(qū)域中的對(duì)應(yīng)像素位置可為當(dāng)像素位置處于目的地區(qū)域中時(shí)處于其相應(yīng)源區(qū)域的同一相對(duì)位置中的像素位置。逐位運(yùn)算可包含(例如)布爾型(boolean)運(yùn)算,例如逐位and、or、not和/或xor運(yùn)算。逐位運(yùn)算還可包含位復(fù)制操作、位反轉(zhuǎn)操作、實(shí)心填充操作等。

在額外實(shí)例中,光柵操作類型可包含混合操作(例如,阿爾法混合操作)。在一些實(shí)例中,混合操作可指定在混合操作的執(zhí)行期間將使用的源像素乘數(shù)和目的地像素乘數(shù)。在此類實(shí)例中,在混合操作的執(zhí)行期間,源像素值(例如,源像素色彩和/或源阿爾法值)可乘以源像素乘數(shù)以產(chǎn)生第一乘積,對(duì)應(yīng)的目的地像素值(例如,目的地像素色彩和/或目的地阿爾法值)可乘以目的地像素乘數(shù)以產(chǎn)生第二乘積,且兩個(gè)乘積的總和可加在一起以產(chǎn)生針對(duì)像素位置的目的地值。其它類型的混合操作也是可能的。

在一些實(shí)例中,命令引擎32可基于由gpu10從cpu6接收的blt命令中所包含的數(shù)據(jù)來對(duì)光柵操作單元34進(jìn)行配置。舉例來說,命令引擎32可基于blt命令中所指定的光柵操作類型而選擇將由光柵操作單元34執(zhí)行的光柵操作類型,且對(duì)光柵操作單元34進(jìn)行配置以使用所選擇的光柵化操作類型執(zhí)行blt操作。

雖然光柵操作單元34在本文中描述為組合不同源區(qū)域以產(chǎn)生用于blt操作的目的地?cái)?shù)據(jù),但在其它實(shí)例中,可另外或代替光柵操作單元34使用gpu10中的一或多個(gè)其它組件來執(zhí)行所述blt操作。舉例來說,在gpu10的著色器單元(未展示)上執(zhí)行的著色器程序可根據(jù)所述著色器程序中指定的組合技術(shù)將不同源區(qū)域組合以產(chǎn)生用于blt操作的目的地?cái)?shù)據(jù)。

緩沖器36可存儲(chǔ)在blt操作的執(zhí)行期間從存儲(chǔ)器22檢索的源數(shù)據(jù)。在一些實(shí)例中,緩沖器36可實(shí)施為gpu10內(nèi)的多個(gè)寄存器。緩沖器36可利用包括例如先進(jìn)先出(fifo)緩沖方案的多種緩沖方案中的任一者。根據(jù)fifo緩沖方案,存儲(chǔ)在緩沖器36中的源數(shù)據(jù)按源數(shù)據(jù)放置到緩沖器36中的次序由消耗者(例如,寫入引擎40)消耗。

讀取引擎38可經(jīng)配置以發(fā)布讀取請(qǐng)求到存儲(chǔ)器子系統(tǒng)8且響應(yīng)于所述讀取請(qǐng)求將所接收的源數(shù)據(jù)放置到緩沖器36中。所述讀取請(qǐng)求可集體地從在接收自cpu6的blt命令中指定的一或多個(gè)源blt區(qū)域讀取數(shù)據(jù)。

寫入引擎40可經(jīng)配置以消耗來自緩沖器36的源數(shù)據(jù),基于所消耗的源數(shù)據(jù)產(chǎn)生目的地?cái)?shù)據(jù),并且將寫入請(qǐng)求發(fā)布到存儲(chǔ)器子系統(tǒng)8以便將目的地?cái)?shù)據(jù)寫入到存儲(chǔ)器22中的目的地區(qū)域。所述寫入請(qǐng)求可集體地將數(shù)據(jù)寫入到在接收自cpu6的blt命令中指定的目的地blt區(qū)域。

在一些實(shí)例中,寫入引擎40可產(chǎn)生目的地?cái)?shù)據(jù),使得目的地?cái)?shù)據(jù)與源數(shù)據(jù)相同。此類實(shí)例可用以執(zhí)行例如blt復(fù)制操作。在其它實(shí)例中,寫入引擎40可組合來自至少兩個(gè)不同源區(qū)域的源數(shù)據(jù)以產(chǎn)生目的地?cái)?shù)據(jù)。此類實(shí)例可用以執(zhí)行例如blt合成操作。在此類實(shí)例中,寫入引擎40可在一些實(shí)例中使用光柵操作單元34執(zhí)行光柵操作,以便組合源數(shù)據(jù)且產(chǎn)生目的地?cái)?shù)據(jù)。

在一些實(shí)例中,消耗源數(shù)據(jù)可指寫入引擎40直接從讀取引擎38接收源數(shù)據(jù)且處理源數(shù)據(jù)。在其它實(shí)例中,消耗源數(shù)據(jù)可指寫入引擎40從緩沖器36檢索源數(shù)據(jù)且處理源數(shù)據(jù)。處理源數(shù)據(jù)可包含基于源數(shù)據(jù)產(chǎn)生目的地?cái)?shù)據(jù)。在已處理數(shù)據(jù)之后,寫入引擎40可發(fā)布寫入請(qǐng)求以寫入目的地?cái)?shù)據(jù)。

在一些實(shí)例中,讀取引擎38可要求所讀取的表面的每一行的開始對(duì)應(yīng)于是預(yù)定對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)的存儲(chǔ)器地址。此類需求可為如本發(fā)明中所描述的對(duì)準(zhǔn)約束條件的實(shí)例,且預(yù)定對(duì)準(zhǔn)寬度可為用于所述對(duì)準(zhǔn)約束條件的對(duì)準(zhǔn)參數(shù)。此類對(duì)準(zhǔn)約束條件可簡化用于實(shí)施讀取引擎38的硬件。是預(yù)定對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)的存儲(chǔ)器地址可稱作對(duì)準(zhǔn)邊界。當(dāng)讀取引擎38需要此類對(duì)準(zhǔn)約束條件以用于適當(dāng)操作時(shí),讀取引擎38可稱作對(duì)準(zhǔn)約束讀取引擎38。

類似地,在其它實(shí)例中,寫入引擎40可要求待寫入的表面的每一行的開始對(duì)應(yīng)于預(yù)定對(duì)準(zhǔn)寬度的整數(shù)倍數(shù)。此類需求可為如本發(fā)明中所描述的對(duì)準(zhǔn)約束條件的實(shí)例,且預(yù)定對(duì)準(zhǔn)寬度可為用于所述對(duì)準(zhǔn)約束條件的對(duì)準(zhǔn)參數(shù)。此類需求可簡化用于實(shí)施寫入引擎40的硬件。當(dāng)寫入引擎40需要此類對(duì)準(zhǔn)約束條件以用于適當(dāng)操作時(shí),寫入引擎40可稱作對(duì)準(zhǔn)約束寫入引擎40。

在一些實(shí)例中,讀取引擎38和寫入引擎40均可經(jīng)對(duì)準(zhǔn)約束。在其它實(shí)例中,讀取引擎38可能經(jīng)對(duì)準(zhǔn)約束,且寫入引擎40可能未經(jīng)對(duì)準(zhǔn)約束。在額外實(shí)例中,寫入引擎40可能經(jīng)對(duì)準(zhǔn)約束,且讀取引擎38可能未經(jīng)對(duì)準(zhǔn)約束。在另一實(shí)例中,讀取引擎38和寫入引擎40均未經(jīng)對(duì)準(zhǔn)約束。

存儲(chǔ)器子系統(tǒng)8包含存儲(chǔ)器22。存儲(chǔ)器22可存儲(chǔ)一或多個(gè)源表面42和目的地表面44。源表面42和目的地表面44中的每一者對(duì)應(yīng)于像素?cái)?shù)據(jù)的二維陣列。像素?cái)?shù)據(jù)可包含紅、綠、藍(lán)(rgb)顏色值,且在一些情況下可包含用于表面中的每一像素位置的阿爾法值(a)。因?yàn)樵幢砻?2和目的地表面44對(duì)應(yīng)于像素?cái)?shù)據(jù)的二維陣列,所以表面中的個(gè)別像素位置的像素?cái)?shù)據(jù)可通過行和列坐標(biāo)而尋址。用在blt操作中的源區(qū)域中的每一者可對(duì)應(yīng)于相應(yīng)源表面的全部或子集,且目的地區(qū)域可對(duì)應(yīng)于目的地表面的全部或子集。源和目的地區(qū)域可為相同的大小和形狀,且通常(但非必定)是矩形區(qū)域。雖然圖2描繪單獨(dú)的源表面42和目的地表面44。在一些實(shí)例中,目的地表面44可用作源表面以用于blt操作,和/或源表面42中的一或多者可充當(dāng)目的地表面以用于blt操作。存儲(chǔ)器子系統(tǒng)8經(jīng)由總線16以通信方式耦合到cpu6、gpu10、讀取引擎38和寫入引擎40。

響應(yīng)于接收到存儲(chǔ)器存取請(qǐng)求,存儲(chǔ)器子系統(tǒng)8可使所請(qǐng)求的存儲(chǔ)器操作相對(duì)于存儲(chǔ)器22而執(zhí)行。舉例來說,響應(yīng)于接收到讀取請(qǐng)求,存儲(chǔ)器子系統(tǒng)8可從存儲(chǔ)器22中對(duì)應(yīng)于所述讀取請(qǐng)求中指定的一或多個(gè)存儲(chǔ)地址的一或多個(gè)存儲(chǔ)位置獲得(即,讀取)存儲(chǔ)在存儲(chǔ)器22中的數(shù)據(jù),并將所獲得的數(shù)據(jù)提供給gpu10(例如,讀取引擎38)。作為另一實(shí)例,響應(yīng)于接收到寫入請(qǐng)求和對(duì)應(yīng)于所述寫入請(qǐng)求的寫入數(shù)據(jù),存儲(chǔ)器子系統(tǒng)8可使寫入數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器22中對(duì)應(yīng)于所述寫入請(qǐng)求中指定的一或多個(gè)存儲(chǔ)器地址的一或多個(gè)位置處。在一些實(shí)例中,存儲(chǔ)器子系統(tǒng)8可向?qū)懭胍?0提供寫入請(qǐng)求已成功完成的確認(rèn)。

雖然命令引擎32在本文中描述為對(duì)gpu10中的其它處理組件進(jìn)行配置以執(zhí)行blt操作,但在其它實(shí)例中,除了或代替命令引擎32,gpu10中的一或多個(gè)其它組件可執(zhí)行這些功能。舉例來說,專用blt操作控制單元可用于執(zhí)行命令引擎32的上文所提到的功能性,或讀取引擎38和寫入引擎40可經(jīng)配置以執(zhí)行此類功能性。

如上文所論述,gpu10可執(zhí)行blt操作以服務(wù)從cpu6接收到的blt命令。blt操作可包含blt復(fù)制操作和blt合成操作。在一些實(shí)例中,blt操作可替換地稱為存儲(chǔ)器傳送操作。blt復(fù)制操作可涉及將數(shù)據(jù)從源表面的源區(qū)域復(fù)制到目的地表面的目的地區(qū)域。也就是說,gpu10可從源表面的源區(qū)域讀取數(shù)據(jù)且將所述源表面的源區(qū)域中含有的數(shù)據(jù)的精確復(fù)制品寫入到目的地表面的目的地區(qū)域。

blt合成操作可涉及以某種方式組合相同或不同源表面的至少兩個(gè)不同源區(qū)域,且將源區(qū)域的組合寫入到目的地表面的目的地區(qū)域。在一些情況下,源表面中的一或多者可為與目的地表面相同的表面以用于blt合成操作。舉例來說,blt合成操作可涉及讀取單個(gè)源區(qū)域和單個(gè)目的地區(qū)域,將所述兩者混合在一起,且將所混合的結(jié)果寫回到目的地區(qū)。

在一些實(shí)例中,當(dāng)執(zhí)行blt合成操作時(shí),可根據(jù)光柵操作組合不同源區(qū)域,所述光柵操作可針對(duì)blt合成操作的不同情況而不同。光柵操作可為針對(duì)特定blt合成操作而指定應(yīng)如何組合位的操作。在一些實(shí)例中,光柵操作可包含逐位運(yùn)算,例如,布爾型邏輯運(yùn)算。布爾型邏輯運(yùn)算可包含例如逐位and、or、not和/或xor運(yùn)算。在額外實(shí)例中,光柵操作可包含混合操作(例如,阿爾法混合操作)。

用在blt操作中的源和目的地表面可為相同或不同表面,且可各自對(duì)應(yīng)于像素?cái)?shù)據(jù)的二維陣列。像素?cái)?shù)據(jù)可包含紅、綠、藍(lán)(rgb)顏色值,且在一些情況下可包含用于表面中的每一像素的阿爾法值(a)。因?yàn)樗霰砻鎸?duì)應(yīng)于像素?cái)?shù)據(jù)的二維陣列,所以表面中的個(gè)別像素位置的像素?cái)?shù)據(jù)可通過行和列坐標(biāo)來尋址。用在blt操作中的源區(qū)域中的每一者可對(duì)應(yīng)于相應(yīng)源表面的全部或子集。類似地,用在blt操作中的目的地區(qū)域可對(duì)應(yīng)于目的地表面的全部或子集。源和目的地區(qū)域可為相同的大小和形狀,且通常(但非必定)是矩形區(qū)域。

當(dāng)gpu10執(zhí)行blt操作時(shí),用于所述blt操作的源表面和目的地表面通常存儲(chǔ)在片外存儲(chǔ)器22中。換句話說,存儲(chǔ)器22可形成于、定位于和/或安置于微芯片、集成電路和/或不同于所述微芯片、集成電路的裸片和/或其上形成、定位和/或安置gpu10的裸片上。存儲(chǔ)器22可經(jīng)由一或多個(gè)總線且在一些情況下經(jīng)由存儲(chǔ)器控制器以通信方式耦合到gpu10。

當(dāng)執(zhí)行blt復(fù)制操作時(shí),gpu10可從源區(qū)域中的像素位置中的每一者讀取數(shù)據(jù)且將從源區(qū)域讀取的數(shù)據(jù)寫入到目的地區(qū)域中的對(duì)應(yīng)像素位置。類似地,當(dāng)執(zhí)行blt合成操作時(shí),gpu10可從多個(gè)源區(qū)域中的位置中的每一者讀取數(shù)據(jù),組合所述數(shù)據(jù),且將所組合的數(shù)據(jù)寫入到目的地區(qū)域。

圖3是說明根據(jù)本發(fā)明的實(shí)例單源blt操作的概念圖。圖3描繪源表面50和目的地表面52,其中的每一者對(duì)應(yīng)于像素?cái)?shù)據(jù)的二維陣列。像素?cái)?shù)據(jù)可包含紅、綠、藍(lán)(rgb)顏色值,且在一些情況下可包含用于表面中的每一像素的阿爾法值(a)。因?yàn)楸砻?0、52中的每一者對(duì)應(yīng)于像素?cái)?shù)據(jù)的二維陣列,所以表面中的個(gè)別像素位置的像素?cái)?shù)據(jù)可通過行和列坐標(biāo)來編索引。在一些實(shí)例中,源表面50和目的地表面52可為位圖。在其它實(shí)例中,源表面50和目的地表面52可為緩沖器資源,例如,紋理緩沖器。圖3中的實(shí)例源表面50和目的地表面52是相同的形狀和大小,且是矩形。然而,在其它實(shí)例中,源表面50和目的地表面52可具有不同形狀和/或大小。

源表面50包含源blt區(qū)域54,且目的地表面52包含目的地blt區(qū)域56。源blt區(qū)域54包含源表面50中所包含的像素?cái)?shù)據(jù)的子集,且目的地blt區(qū)域56包含目的地表面52中所包含的像素?cái)?shù)據(jù)的子集。表面中所包含的像素?cái)?shù)據(jù)的子集可指所述表面中所包含的像素?cái)?shù)據(jù)的全部或少于全部。如圖3中所展示,源blt區(qū)域54和目的地blt區(qū)域56是相同的大小和形狀,且是矩形。然而,在其它實(shí)例中,源blt區(qū)域54和目的地blt區(qū)域56可能不是矩形。

在展示于圖3中的實(shí)例blt操作中,gpu10將數(shù)據(jù)從源表面50的源blt區(qū)域54傳送到目的地表面52的目的地blt區(qū)域56。一般來說,源blt區(qū)域54中的每一像素位置的數(shù)據(jù)被傳送到目的地blt區(qū)域56中的對(duì)應(yīng)的像素位置。如果像素位置中的每一者在其相應(yīng)區(qū)域中的相對(duì)位置相同,那么不同區(qū)域中的不同像素位置可稱為對(duì)應(yīng)的像素位置。舉例來說,源blt區(qū)域54和目的地blt區(qū)域56中的第二行的第三列具有相同的相對(duì)位置。

展示于圖3中的blt操作是單源blt操作,這是因?yàn)閱蝹€(gè)源區(qū)域被用作blt操作的源操作數(shù)。展示于圖3中的單源blt操作可表示blt復(fù)制操作,在所述blt復(fù)制操作中源blt區(qū)域54的數(shù)據(jù)被復(fù)制到目的地blt區(qū)域56中。雖然展示于圖3中的blt操作展現(xiàn)單獨(dú)源表面50和目的地表面52,但在其它實(shí)例中,源表面50和目的地表面52可為同一表面。在此類實(shí)例中,源blt區(qū)域54和目的地blt區(qū)域56在一些實(shí)例中可為同一表面內(nèi)的不同區(qū)域,數(shù)據(jù)在所述不同區(qū)域之間通過所述blt復(fù)制操作傳送。

圖4是說明根據(jù)本發(fā)明的實(shí)例多源blt操作的概念圖。圖4描繪第一源表面58、第二源表面60和目的地表面62。表面58、60、62中的每一者可大體上類似于上文相對(duì)于圖3所論述的表面50、52。第一源表面58包含第一源blt區(qū)域64,第二源表面60包含第二源blt區(qū)域66,且目的地表面62包含目的地blt區(qū)域68。第一源blt區(qū)域64包含第一源表面58中所包含的像素?cái)?shù)據(jù)的子集,第二源blt區(qū)域66包含第二源表面60中所包含的像素?cái)?shù)據(jù)的子集,且目的地blt區(qū)域68包含目的地表面62中所包含的像素?cái)?shù)據(jù)的子集。如圖4中所展示,第一源blt區(qū)域64、第二源blt區(qū)域66和目的地blt區(qū)域68是相同的大小和形狀,且是矩形。然而,在其它實(shí)例中,區(qū)域64、66和68可能不是矩形。

在圖4的實(shí)例blt操作中,來自第一源blt區(qū)域64的源數(shù)據(jù)和來自第二源blt區(qū)域66的源數(shù)據(jù)經(jīng)由光柵操作70組合以產(chǎn)生目的地?cái)?shù)據(jù),且所述目的地?cái)?shù)據(jù)被放置到目的地表面62的目的地blt區(qū)域68中。一般來說,第一源blt區(qū)域64中的每一像素位置的數(shù)據(jù)與來自第二源blt區(qū)域66中的對(duì)應(yīng)像素位置的數(shù)據(jù)組合,且寫入到目的地blt區(qū)域68中的對(duì)應(yīng)像素位置。如果像素位置中的每一者在其相應(yīng)區(qū)域中的相對(duì)位置相同,那么不同區(qū)域中的不同像素位置可稱為對(duì)應(yīng)的像素位置。

圖4中所展示的blt操作是多源blt操作,這是因?yàn)槎鄠€(gè)源區(qū)域被用作blt操作的源操作數(shù)。圖4中所展示的多源blt操作可表示blt合成操作,在所述blt合成操作中g(shù)pu10組合或合成來自兩個(gè)不同源區(qū)域的數(shù)據(jù)以產(chǎn)生被寫入到目的地區(qū)域的目的地?cái)?shù)據(jù)。雖然圖4中所展示的blt操作展示單獨(dú)第一源表面58、第二源表面60和目的地表面62,但在其它實(shí)例中,表面58、60、62中的一或多者可為同一表面。舉例來說,第二源表面60和目的地表面62可為同一表面,且第二源blt區(qū)域66和目的地blt區(qū)域68可為所述表面內(nèi)的相同區(qū)域。在此實(shí)例中,blt合成操作可使用特定光柵算子將第一源blt區(qū)域64中的像素?cái)?shù)據(jù)與目的地表面62中的現(xiàn)有像素?cái)?shù)據(jù)合并。

圖5是說明用于圖1和2的實(shí)例計(jì)算裝置2的實(shí)例命令處理流程72的概念圖。如圖5中所展示,軟件應(yīng)用程序24將軟件blt命令74發(fā)布到gpu驅(qū)動(dòng)程序28。gpu驅(qū)動(dòng)程序28接收軟件blt命令74,基于軟件blt命令74產(chǎn)生一或多個(gè)gpublt命令76,且將gpublt命令76發(fā)布到gpu10。gpu10執(zhí)行blt操作78以服務(wù)gpublt命令76。舉例來說,針對(duì)gpublt命令76中的每一者,gpu10可執(zhí)行相應(yīng)對(duì)準(zhǔn)blt操作78。

在一些實(shí)例中,軟件blt命令74可為未對(duì)準(zhǔn)blt命令,且gpublt命令76可包含對(duì)應(yīng)于軟件blt命令74的多個(gè)對(duì)準(zhǔn)blt命令。在此類實(shí)例中,gpu驅(qū)動(dòng)程序28可根據(jù)本發(fā)明中描述的技術(shù)中的任一者將未對(duì)準(zhǔn)軟件blt命令74轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)gpublt命令76。

圖6為說明根據(jù)本發(fā)明的用于界定對(duì)準(zhǔn)虛擬表面的實(shí)例技術(shù)的概念圖。圖6說明未對(duì)準(zhǔn)表面80和虛擬表面82。未對(duì)準(zhǔn)表面80可作為未對(duì)準(zhǔn)blt命令的部分從軟件應(yīng)用程序24接收。gpu驅(qū)動(dòng)程序28可基于未對(duì)準(zhǔn)表面80界定虛擬表面82。

在圖6的實(shí)例中,32字節(jié)對(duì)準(zhǔn)約束gpu(例如,gpu10)被用于執(zhí)行blt操作。32字節(jié)對(duì)準(zhǔn)約束gpu可對(duì)應(yīng)于要求表面的行中的每一者的開始是32(即,預(yù)定對(duì)準(zhǔn)寬度)的整數(shù)倍數(shù)的gpu。32(即,對(duì)準(zhǔn)寬度)的每一倍數(shù)可稱作對(duì)準(zhǔn)邊界。

如圖6中所展示,未對(duì)準(zhǔn)表面80的表面寬度是720字節(jié),且未對(duì)準(zhǔn)表面80的表面高度是480行。因?yàn)?20不可被32除盡,所以未對(duì)準(zhǔn)表面80的一些行將不以32的倍數(shù)的存儲(chǔ)器地址開始。因此,表面80被稱作未對(duì)準(zhǔn)。

gpu驅(qū)動(dòng)程序28可通過將來自未對(duì)準(zhǔn)表面80的兩個(gè)行的集合組合在一起以形成虛擬表面82中的單個(gè)行來界定虛擬表面82。如圖6中所展示,虛擬表面82是未對(duì)準(zhǔn)表面80的兩倍寬和一半高。虛擬表面82的表面寬度是1440字節(jié),其可被32除盡。因此,虛擬表面82是32字節(jié)對(duì)準(zhǔn)約束gpu可對(duì)其執(zhí)行blt操作的對(duì)準(zhǔn)表面。

圖7和8是說明使用根據(jù)圖6中說明的技術(shù)所界定的對(duì)準(zhǔn)虛擬表面將未對(duì)準(zhǔn)blt操作轉(zhuǎn)換為兩個(gè)對(duì)準(zhǔn)blt操作的實(shí)例的概念圖。

圖7說明可與從軟件應(yīng)用程序24接收的blt命令相關(guān)聯(lián)的單個(gè)未對(duì)準(zhǔn)blt操作。未對(duì)準(zhǔn)blt命令指定未對(duì)準(zhǔn)源表面84和未對(duì)準(zhǔn)目的地表面86以用于blt操作。源表面84包含源blt區(qū)域88,且目的地表面86包含目的地blt區(qū)域90。如圖7中所展示,未對(duì)準(zhǔn)blt操作將源表面84的源blt區(qū)域88傳送到目的地表面86的目的地blt區(qū)域90。

圖8說明對(duì)應(yīng)于所述單個(gè)未對(duì)準(zhǔn)blt操作的對(duì)準(zhǔn)雙blt操作。所述對(duì)準(zhǔn)雙blt操作可包含由兩個(gè)對(duì)準(zhǔn)blt命令指定的兩個(gè)單獨(dú)blt操作。對(duì)準(zhǔn)blt命令中的每一者可指定對(duì)準(zhǔn)虛擬源表面92和對(duì)準(zhǔn)虛擬目的地表面94以用于blt操作。虛擬源表面92包含源blt區(qū)域96、98,且虛擬目的地表面94包含目的地blt區(qū)域100、102。

虛擬源表面92可基于源表面84而界定,且虛擬目的地表面94可基于目的地表面86而界定。gpu驅(qū)動(dòng)程序28可使用圖6中說明的技術(shù)將源表面84轉(zhuǎn)變?yōu)樘摂M源表面92,且將目的地表面86轉(zhuǎn)變?yōu)樘摂M目的地表面94。

舉例來說,gpu驅(qū)動(dòng)程序28可將源表面84中的兩個(gè)行的每個(gè)集合組合在一起以形成虛擬源表面92中的單個(gè)行。這有效地使源表面84的所有偶數(shù)行聚合在虛擬源表面92的左側(cè),且源表面84的所有奇數(shù)行聚合在虛擬源表面92的右側(cè)。gpu驅(qū)動(dòng)程序28可使用類似技術(shù)將目的地表面86的行組合在一起以形成虛擬目的地表面94。

在圖7中,以交錯(cuò)方式將區(qū)域88、90的每隔一行畫上影線。如圖8中所展示,組合源表面84的行以形成虛擬源表面92致使源blt區(qū)域88被轉(zhuǎn)變,使得其不再是一個(gè)連續(xù)的矩形區(qū)域。替代地,源blt區(qū)域88轉(zhuǎn)變?yōu)樵碽lt區(qū)域96和98,其中源blt區(qū)域96表示源blt區(qū)域88的偶數(shù)行,且源blt區(qū)域98表示源blt區(qū)域88的奇數(shù)行。由此,源blt區(qū)域88已轉(zhuǎn)變?yōu)楸舜瞬贿B續(xù)的兩個(gè)單獨(dú)矩形區(qū)域。類似轉(zhuǎn)變相對(duì)于目的地blt區(qū)域90發(fā)生,其中目的地blt區(qū)域90轉(zhuǎn)變?yōu)槟康牡豣lt區(qū)域100和102。

在這個(gè)實(shí)例中,無法針對(duì)不連續(xù)blt區(qū)域執(zhí)行單blt操作。因?yàn)楝F(xiàn)存在兩個(gè)單獨(dú)源blt區(qū)域96、98和兩個(gè)單獨(dú)目的地blt區(qū)域100、102,所以gpu驅(qū)動(dòng)程序28將用于未對(duì)準(zhǔn)表面84、86的單個(gè)未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為相對(duì)于虛擬表面92和94而執(zhí)行的兩個(gè)對(duì)準(zhǔn)blt命令——一個(gè)blt命令用于帶影線的區(qū)域96、100,且一個(gè)blt命令用于白色區(qū)域98、102。以此方式,gpu驅(qū)動(dòng)程序28可使gpu10執(zhí)行兩個(gè)blt操作,在所述blt操作中第一blt操作將源blt區(qū)域96傳送到目的地blt區(qū)域100,且第二blt操作將源blt區(qū)域98傳送到目的地blt區(qū)域102。

由gpu驅(qū)動(dòng)程序28產(chǎn)生的多個(gè)blt命令可集體地處理整個(gè)源blt區(qū)域88和目的地blt區(qū)域90,由此產(chǎn)生與單個(gè)未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。此外,對(duì)準(zhǔn)blt命令中的每一者相對(duì)于32字節(jié)對(duì)準(zhǔn)虛擬表面(即,虛擬表面92和94)而執(zhí)行,所述32字節(jié)對(duì)準(zhǔn)虛擬表面允許blt命令被32字節(jié)對(duì)準(zhǔn)約束gpu處理。以此方式,gpu驅(qū)動(dòng)程序28可將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為可由對(duì)準(zhǔn)約束gpu服務(wù)的多個(gè)對(duì)準(zhǔn)blt命令,且由此獲得相對(duì)低功率的gpu加速blt處理的益處。

在一些實(shí)例中,為了將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,gpu驅(qū)動(dòng)程序28可將與未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的blt源或目的地區(qū)域的坐標(biāo)和尺寸轉(zhuǎn)換為待用于多個(gè)對(duì)準(zhǔn)blt命令的blt區(qū)域的坐標(biāo)和尺寸。在一些實(shí)例中,對(duì)于圖7和8中所展示的雙blt轉(zhuǎn)換操作,gpu驅(qū)動(dòng)程序28可基于以下偽碼產(chǎn)生blt區(qū)域坐標(biāo)和尺寸:

blt1:new_src_x=src_x+(src_y&0x1)*src_width;

new_src_y=src_y/2;

newdst_x=dst_x+(dst_y&0x1)*dst_width;

newdst_y=dst_y/2;

newblt_width=blt_width

newblt_height=(blt_height+1)/2;

newsrc_surface_base=src_surface_base;//unchanged

newsrc_surface_width=src_surface_width*2

newsrc_surface_height=src_surface_height+((~src_y)&1)/2

newdst_surface_base=dst_surface_base//unchanged

newdst_surface_width=dst_surface_width*2

newdst_surface_height=dst_surface_height+((~src_y)&1)/2

blt2:new_src_x=src_x+((src_y+1)&0x1)*src_width;

new_src_y=(src_y+1)/2;

newdst_x=dst_x+((dst_y+1)&0x1)*dst_width;

newdst_y=(dst_y+1)/2;

newblt_width=blt_width

newblt_height=(blt_height)/2;

newsrc_surface_base=src_surface_base;//unchanged

newsrc_surface_width=src_surface_width*2;

newsrc_surface_height=(src_surface_height+((~src_y+1)&1)/2;

newdst_surface_base=dst_surface_base;//unchanged

newdst_surface_width=dst_surface_width*2;

newdst_surface_height=(dst_surface_height+1)+((~src_y+1)&1)/2;

在所述實(shí)例偽碼中,blt1和blt2對(duì)應(yīng)于基于單個(gè)未對(duì)準(zhǔn)blt命令產(chǎn)生的不同對(duì)準(zhǔn)blt命令,src_x對(duì)應(yīng)于源blt區(qū)域88的左上角的x坐標(biāo),src_y對(duì)應(yīng)于源blt區(qū)域88的左上角的y坐標(biāo),dst_x對(duì)應(yīng)于目的地blt區(qū)域90的左上角的x坐標(biāo),dst_y對(duì)應(yīng)于目的地blt區(qū)域90的左上角的y坐標(biāo),blt_width對(duì)應(yīng)于源blt區(qū)域88的寬度(例如,按字節(jié)計(jì)),blt_height對(duì)應(yīng)于源blt區(qū)域88的高度(例如,按行計(jì)),src_width對(duì)應(yīng)于源表面84的表面寬度(例如,按字節(jié)計(jì)),dst_width對(duì)應(yīng)于目的地表面86的表面寬度(例如,按字節(jié)計(jì)),src_surface_base對(duì)應(yīng)于源表面84的表面指針,src_surface_width對(duì)應(yīng)于源表面84的表面寬度,src_surface_height對(duì)應(yīng)于源表面84的高度,dst_surface_base對(duì)應(yīng)于目的地表面86的表面指針,dst_surface_width對(duì)應(yīng)于目的地表面86的表面寬度,dst_surface_height對(duì)應(yīng)于目的地表面86的高度,new_src_x對(duì)應(yīng)于源blt區(qū)域96(針對(duì)blt1)或源blt區(qū)域98(針對(duì)blt2)的左上角的x坐標(biāo),new_src_y對(duì)應(yīng)于源blt區(qū)域96(針對(duì)blt1)或源blt區(qū)域98(針對(duì)blt2)的左上角的y坐標(biāo),newdst_x對(duì)應(yīng)于目的地blt區(qū)域100(針對(duì)blt1)或目的地blt區(qū)域102(針對(duì)blt2)的左上角的x坐標(biāo),newdst_y對(duì)應(yīng)于目的地blt區(qū)域100(針對(duì)blt1)或目的地blt區(qū)域102(針對(duì)blt2)的左上角的y坐標(biāo),newblt_width對(duì)應(yīng)于源blt區(qū)域96(針對(duì)blt1)或源blt區(qū)域98(針對(duì)blt2)的寬度(例如,按字節(jié)計(jì)),newblt_height對(duì)應(yīng)于源blt區(qū)域96(針對(duì)blt1)或源blt區(qū)域98(針對(duì)blt2)的高度(例如,按行計(jì)),newsrc_surface_base對(duì)應(yīng)于虛擬源表面92的表面指針,newsrc_surface_width對(duì)應(yīng)于虛擬源表面92的表面寬度,newsrc_surface_height對(duì)應(yīng)于虛擬源表面92的高度,newdst_surface_base對(duì)應(yīng)于虛擬目的地表面94的表面指針,newdst_surface_width對(duì)應(yīng)于虛擬目的地表面94的表面寬度,且newdst_surface_height對(duì)應(yīng)于虛擬目的地表面94的高度。

在所述實(shí)例偽碼中,算子“/”對(duì)應(yīng)于整數(shù)除法,算子“&”對(duì)應(yīng)于逐位and運(yùn)算,且首碼“0x”指示隨后的數(shù)字是十六進(jìn)制常數(shù)。在一些實(shí)例中,用于虛擬源表面92的newsrc_surface_height的值針對(duì)blt1和blt2可不同,從而產(chǎn)生用于blt1和blt2的略微不同的虛擬源表面。在其它實(shí)例中,用于虛擬目的地表面94的newdst_surface_height的值針對(duì)blt1和blt2可不同,從而產(chǎn)生用于blt1和blt2的略微不同的虛擬目的地表面。

圖9是說明根據(jù)本發(fā)明的用于界定多個(gè)對(duì)準(zhǔn)虛擬表面的實(shí)例技術(shù)的概念圖。圖9說明未對(duì)準(zhǔn)表面110和兩個(gè)虛擬表面112、114。未對(duì)準(zhǔn)表面110可作為未對(duì)準(zhǔn)blt命令的部分從軟件應(yīng)用程序24接收。虛擬表面112、114可基于未對(duì)準(zhǔn)表面110而由gpu驅(qū)動(dòng)程序28界定。

在圖9的實(shí)例中,32字節(jié)對(duì)準(zhǔn)約束gpu用于執(zhí)行blt操作。如圖9中所展示,未對(duì)準(zhǔn)表面110的表面寬度是720字節(jié),且未對(duì)準(zhǔn)表面110的表面高度是480行。因?yàn)?20不可被32除盡,所以未對(duì)準(zhǔn)表面110的一些行將不以32的倍數(shù)的存儲(chǔ)器地址開始。因此,表面110被稱作未對(duì)準(zhǔn)。

為了處理這個(gè)問題,cpu6可以與上文相對(duì)于圖6所描述的類似的方式加寬未對(duì)準(zhǔn)表面110的寬度。這將使加寬的表面寬度對(duì)應(yīng)于對(duì)準(zhǔn)寬度約束條件。然而,未對(duì)準(zhǔn)表面110具有表面指針1。因?yàn)?不可被32除盡,所以加寬表面的表面指針是未對(duì)準(zhǔn)的。由此,所述加寬表面仍未對(duì)準(zhǔn)。

用于處理這個(gè)問題的一個(gè)途徑是移位所述表面指針,使得移位的表面指針指向最近的對(duì)準(zhǔn)邊界。類似于上文相對(duì)于圖6到8所描述的技術(shù),加寬所述表面可將矩形blt區(qū)域轉(zhuǎn)變?yōu)槎鄠€(gè)單獨(dú)矩形區(qū)域,且gpu驅(qū)動(dòng)程序28可產(chǎn)生多個(gè)blt命令,其中blt命令中的每一者使gpu針對(duì)矩形blt區(qū)域中的相應(yīng)一者執(zhí)行blt操作。然而,如果虛擬表面的寬度保持相同,那么移位所述表面指針可致使在所述虛擬表面的邊界附近的轉(zhuǎn)變的矩形blt區(qū)域卷包虛擬表面的邊緣。換句話說,此類轉(zhuǎn)變的blt矩形區(qū)域可能不再連續(xù),且可能不能夠通過單blt操作服務(wù)。

為了處理這個(gè)問題,gpu驅(qū)動(dòng)程序28可產(chǎn)生兩個(gè)虛擬表面112、114以用于源和目的地表面中的每一者。虛擬表面112、114可具有相同加寬的表面寬度,但具有不同的對(duì)準(zhǔn)表面指針。在一些實(shí)例中,gpu驅(qū)動(dòng)程序28可確定虛擬表面112的未對(duì)準(zhǔn)表面指針的兩個(gè)最近對(duì)準(zhǔn)邊界,且將所述最近對(duì)準(zhǔn)邊界中的一者指派為用于虛擬表面112的表面指針,且將所述最近對(duì)準(zhǔn)邊界中的另一者指派為用于虛擬表面114的表面指針。對(duì)于圖9中的實(shí)例,未對(duì)準(zhǔn)表面指針1的最近32字節(jié)對(duì)準(zhǔn)邊界是0和32。因此,gpu驅(qū)動(dòng)程序28將虛擬表面112的表面指針設(shè)置到0,且將虛擬表面114的表面指針設(shè)置到32。

虛擬表面112、114中的每一者的表面寬度是1440字節(jié),其可被32除盡。另外,用于所述虛擬表面的表面指針中的每一者指向可被32除盡的存儲(chǔ)器地址(即,0和32)。因此,虛擬表面112、114兩者均是32字節(jié)對(duì)準(zhǔn)約束gpu可對(duì)其執(zhí)行blt操作的對(duì)準(zhǔn)表面。

如圖9中所展示,未對(duì)準(zhǔn)表面110的偶數(shù)行中的每一者完全含有于虛擬表面112的各行中的相應(yīng)一者中。類似地,未對(duì)準(zhǔn)表面110的奇數(shù)行中的每一者完全含有于虛擬表面114的各行中的相應(yīng)一者中。由此,gpu驅(qū)動(dòng)程序28可使gpu10相對(duì)于未對(duì)準(zhǔn)表面110的偶數(shù)行使用虛擬表面112來執(zhí)行第一對(duì)準(zhǔn)blt操作,且相對(duì)于未對(duì)準(zhǔn)表面110的奇數(shù)行使用虛擬表面114來執(zhí)行第二對(duì)準(zhǔn)blt操作。以這種方式執(zhí)行blt操作可避免對(duì)卷包虛擬表面112、114的任一者的邊緣的轉(zhuǎn)變的矩形blt區(qū)域進(jìn)行處理的需要。

圖10和11是說明根據(jù)本發(fā)明的使用圖9中所界定的多個(gè)對(duì)準(zhǔn)虛擬表面將未對(duì)準(zhǔn)blt操作轉(zhuǎn)換為兩個(gè)對(duì)準(zhǔn)blt操作的實(shí)例的概念圖。從圖7中所展示的單個(gè)未對(duì)準(zhǔn)blt操作開始,gpu驅(qū)動(dòng)程序28可將單blt操作轉(zhuǎn)換為圖10中所展示的偶數(shù)blt操作和圖11中所展示的奇數(shù)blt操作。

虛擬源表面116、128可基于圖7中的源表面84而界定,且虛擬目的地表面118、130可基于圖7中的目的地表面86而界定。gpu驅(qū)動(dòng)程序28可使用圖9中說明的技術(shù)將源表面84轉(zhuǎn)變?yōu)樘摂M源表面116、128,且將目的地表面86轉(zhuǎn)變?yōu)樘摂M目的地表面118、130。具體來說,虛擬表面116、118可對(duì)應(yīng)于圖9中的虛擬表面112,且虛擬表面128、130可對(duì)應(yīng)于圖9中的虛擬表面114。虛擬源表面116、128各自包含源blt區(qū)域120、122,且虛擬目的地表面118、130各自包含目的地blt區(qū)域124、126。

gpu驅(qū)動(dòng)程序28使gpu10相對(duì)于源blt區(qū)域120和目的地blt區(qū)域124執(zhí)行偶數(shù)blt操作(圖10)。具體來說,所述偶數(shù)blt操作可將虛擬源表面116的源blt區(qū)域120傳送到虛擬目的地表面118的目的地blt區(qū)域124類似地,gpu驅(qū)動(dòng)程序28使gpu10相對(duì)于源blt區(qū)域122和目的地blt區(qū)域126執(zhí)行奇數(shù)blt操作(圖11)。具體來說,所述奇數(shù)blt操作可將虛擬源表面128的源blt區(qū)域122傳送到虛擬目的地表面130的目的地blt區(qū)域126。

如圖10中所展示,目的地blt區(qū)域126卷包虛擬目的地表面118的邊緣。類似地,在圖11中,源blt區(qū)域120卷包虛擬源表面128的邊緣。對(duì)這些區(qū)域的卷包使這些區(qū)域不連續(xù),由此阻止單blt操作能夠處理所述區(qū)域。然而,通過以上文所描述的方式執(zhí)行偶數(shù)和奇數(shù)blt操作,可避免對(duì)這些卷包區(qū)域的處理,由此提高blt操作的效率。

為使gpu10執(zhí)行所述偶數(shù)和奇數(shù)blt操作,gpu驅(qū)動(dòng)程序28可將用于圖7的未對(duì)準(zhǔn)表面84、86的單個(gè)未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為兩個(gè)對(duì)準(zhǔn)blt命令——相對(duì)于虛擬表面116、118和加陰影區(qū)域120、124執(zhí)行的一個(gè)偶數(shù)blt命令,以及相對(duì)于虛擬表面128、130和白色區(qū)域122、126執(zhí)行的一個(gè)奇數(shù)blt命令。

由gpu驅(qū)動(dòng)程序28產(chǎn)生的多個(gè)blt命令可集體地處理整個(gè)源和目的地區(qū)域,由此產(chǎn)生與所述單個(gè)未對(duì)準(zhǔn)blt命令本應(yīng)產(chǎn)生的存儲(chǔ)器狀態(tài)相同的所得存儲(chǔ)器狀態(tài)。此外,所述對(duì)準(zhǔn)blt命令中的每一者相對(duì)于32字節(jié)對(duì)準(zhǔn)虛擬表面而執(zhí)行,所述32字節(jié)對(duì)準(zhǔn)虛擬表面允許blt命令被32字節(jié)對(duì)準(zhǔn)約束gpu處理。以此方式,gpu驅(qū)動(dòng)程序28可將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為可由對(duì)準(zhǔn)約束gpu服務(wù)的多個(gè)對(duì)準(zhǔn)blt命令,且由此獲得相對(duì)低功率的gpu加速blt處理的益處。

在一些實(shí)例中,為了將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令,gpu驅(qū)動(dòng)程序28可將與未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的blt源或目的地區(qū)域的坐標(biāo)和尺寸轉(zhuǎn)換為待用于多個(gè)對(duì)準(zhǔn)blt命令的blt區(qū)域的坐標(biāo)和尺寸。在一些實(shí)例中,對(duì)于圖7、10和11中所展示的雙blt轉(zhuǎn)換操作,gpu驅(qū)動(dòng)程序28可基于以下偽碼產(chǎn)生blt區(qū)域坐標(biāo)和尺寸:

blt1:src_align=(src_y&0x1)?((src_base&0x3f)-64):src_base&0x3f;

dst_align=(dst_y&0x1)?((dst_base&0x3f)-64):dst_base&0x3f;

new_src_base=src_base-src_align;

new_dst_base=dst_base-dst_align;

new_src_x=src_x+src_align+(src_y&0x1)*src_width;

new_src_y=src_y/2;

newdst_x=dst_x+dst_align+(dst_y&0x1)*dst_width;

newdst_y=dst_y/2;

newblt_width=blt_width

newblt_height=(blt_height+1)/2;

newsrc_surface_width=src_surface_width*2;

newsrc_surface_height=src_surface_height+(~src_y)&1)/2;

newdst_surface_width=dst_surface_width*2;

newdst_surface_height=dst_surface_height+(~src_y)&1)/22;

blt2:src_align=((src_y+1&0x1)?((src_base&0x3f)-64):src_base&0x3f;

dst_align=((dst_y+1)&0x1)?((dst_base&0x3f)-64):dst_base&0x3f;

new_src_base=src_base-src_align;

new_dst_base=dst_base-dst_align;

new_src_x=src_x+src_align+((src_y+1)&0x1)*src_width;

new_src_y=(src_y+1)/2;

newdst_x=dst_x+dst_align+((dst_y+1)&0x1)*dst_width;

newdst_y=(dst_y+1)/2;

newblt_width=blt_width

newblt_height=(blt_height)/2;

newsrc_surface_width=src_surface_width*2;

newsrc_surface_height=(src_surface_height+1)+((~src_y+1)&1)/2;

newdst_surface_width=dst_surface_width*2;

newdst_surface_height=(dst_surface_height+1)+((~src_y+1)&1)/2;

在所述實(shí)例偽碼中,blt1對(duì)應(yīng)于圖10中所展示的偶數(shù)blt操作,blt2對(duì)應(yīng)于圖11中所展示的奇數(shù)blt操作,src_x對(duì)應(yīng)于源blt區(qū)域88的左上角的x坐標(biāo),src_y對(duì)應(yīng)于源blt區(qū)域88的左上角的y坐標(biāo),dst_x對(duì)應(yīng)于目的地blt區(qū)域90的左上角的x坐標(biāo),dst_y對(duì)應(yīng)于目的地blt區(qū)域90的左上角的y坐標(biāo),blt_width對(duì)應(yīng)于源blt區(qū)域88的寬度(例如,按字節(jié)計(jì)),blt_height對(duì)應(yīng)于源blt區(qū)域88的高度(例如,按行計(jì)),src_width對(duì)應(yīng)于源表面84的表面寬度(例如,按字節(jié)計(jì)),dst_width對(duì)應(yīng)于目的地表面86的表面寬度(例如,按字節(jié)計(jì)),src_base對(duì)應(yīng)于源表面84的表面指針,dst_base對(duì)應(yīng)于目的地表面86的表面指針,src_surface_width對(duì)應(yīng)于源表面84的表面寬度,src_surface_height對(duì)應(yīng)于源表面84的高度,dst_surface_width對(duì)應(yīng)于目的地表面86的表面寬度,dst_surface_height對(duì)應(yīng)于目的地表面86的高度,new_src_x對(duì)應(yīng)于源blt區(qū)域120(針對(duì)blt1)或源blt區(qū)域122(針對(duì)blt2)的左上角的x坐標(biāo),new_src_y對(duì)應(yīng)于源blt區(qū)域120(針對(duì)blt1)或源blt區(qū)域122(針對(duì)blt2)的左上角的y坐標(biāo),newdst_x對(duì)應(yīng)于目的地blt區(qū)域124(針對(duì)blt1)或目的地blt區(qū)域126(針對(duì)blt2)的左上角的x坐標(biāo),newdst_y對(duì)應(yīng)于目的地blt區(qū)域124(針對(duì)blt1)或目的地blt區(qū)域126(針對(duì)blt2)的左上角的y坐標(biāo),newblt_width對(duì)應(yīng)于源blt區(qū)域120(針對(duì)blt1)或源blt區(qū)域122(針對(duì)blt2)的寬度(例如,按字節(jié)計(jì)),newblt_height對(duì)應(yīng)于源blt區(qū)域120(針對(duì)blt1)或源blt區(qū)域122(針對(duì)blt2)的高度(例如,按行計(jì)),newsrc_base對(duì)應(yīng)于虛擬源表面116(針對(duì)blt1)或虛擬源表面128(針對(duì)blt2)的表面指針,newdst_base對(duì)應(yīng)于虛擬目的地表面118(針對(duì)blt1)或虛擬目的地表面130(針對(duì)blt2)的表面指針,newsrc_surface_width對(duì)應(yīng)于虛擬源表面116(針對(duì)blt1)或虛擬源表面128(針對(duì)blt2)的表面寬度,newsrc_surface_height對(duì)應(yīng)于虛擬源表面116(針對(duì)blt1)或虛擬源表面128(針對(duì)blt2)的高度,newdst_surface_width對(duì)應(yīng)于虛擬目的地表面118(針對(duì)blt1)或虛擬目的地表面130(針對(duì)blt2)的表面寬度,且newdst_surface_height對(duì)應(yīng)于虛擬目的地表面118(針對(duì)blt1)或虛擬目的地表面130(針對(duì)blt2)的高度。

在所述實(shí)例偽碼中,算子“/”對(duì)應(yīng)于整數(shù)除法,算子“&”對(duì)應(yīng)于逐位and運(yùn)算,(a)?(b):(c)算子對(duì)應(yīng)于三元算子(例如,如果-則-否則框架(具體來說,如果a則b否則c)),且首碼“0x”指示隨后的數(shù)字是十六進(jìn)制常數(shù)。在一些實(shí)例中,用于虛擬源表面92的newsrc_surface_height針對(duì)blt1和blt2可不同,從而產(chǎn)生用于blt1和blt2的略微不同的虛擬源表面。在其它實(shí)例中,用于虛擬目的地表面94的newdst_surface_height針對(duì)blt1和blt2可不同,從而產(chǎn)生用于blt1和blt2的略微不同的虛擬目的地表面。

圖12是說明根據(jù)本發(fā)明的用于處理未對(duì)準(zhǔn)blt操作的實(shí)例技術(shù)的流程圖。cpu6接收未對(duì)準(zhǔn)blt命令(131)。cpu6(例如,gpu驅(qū)動(dòng)程序28)將未對(duì)準(zhǔn)blt命令轉(zhuǎn)換為多個(gè)對(duì)準(zhǔn)blt命令(132)。

在一些實(shí)例中,未對(duì)準(zhǔn)blt命令指定與所述未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的表面中的至少一者的第一表面寬度。在此類實(shí)例中,為了轉(zhuǎn)換未對(duì)準(zhǔn)blt命令,cpu6可基于第一表面寬度確定第二表面寬度(其中所述第二表面寬度是第一表面寬度的n倍),且產(chǎn)生多個(gè)對(duì)準(zhǔn)blt命令,使得多個(gè)對(duì)準(zhǔn)blt命令中的每一者指定與所述多個(gè)對(duì)準(zhǔn)blt命令中的每一者相關(guān)聯(lián)的表面中的至少一者的第二表面寬度。在此類實(shí)例中,n可以是大于或等于二的整數(shù)。在一些實(shí)例中,n可等于二。

在其它實(shí)例中,為了確定第二表面寬度,cpu6可基于第一表面寬度和與執(zhí)行多個(gè)對(duì)準(zhǔn)blt命令的處理器相關(guān)聯(lián)的預(yù)定對(duì)準(zhǔn)寬度約束條件來確定第二表面寬度。

在額外實(shí)例中,第一表面寬度可能不是預(yù)定對(duì)準(zhǔn)寬度約束條件的整數(shù)倍數(shù)。在此類實(shí)例中,為了基于第一表面寬度和預(yù)定對(duì)準(zhǔn)寬度約束條件確定第二表面寬度,cpu6可確定第二表面寬度以使得第二表面寬度是預(yù)定對(duì)準(zhǔn)寬度約束條件的整數(shù)倍數(shù)。

在一些實(shí)例中,多個(gè)對(duì)準(zhǔn)blt命令可包含第一對(duì)準(zhǔn)blt命令和第二對(duì)準(zhǔn)blt命令,且未對(duì)準(zhǔn)blt命令指定第一blt區(qū)域。在此類實(shí)例中,為了產(chǎn)生多個(gè)對(duì)準(zhǔn)blt命令,cpu6可基于第一blt區(qū)域確定第二blt區(qū)域和第三blt區(qū)域(所述第二blt區(qū)域不同于所述第三blt區(qū)域),產(chǎn)生第一對(duì)準(zhǔn)blt命令以使得第一對(duì)準(zhǔn)blt命令指定第二blt區(qū)域,且產(chǎn)生第二對(duì)準(zhǔn)blt命令以使得第二對(duì)準(zhǔn)blt命令指定第三blt區(qū)域。在一些情況下,第二blt區(qū)域可包含第一blt區(qū)域的偶數(shù)行,且第三blt區(qū)域可包含第一blt區(qū)域的奇數(shù)行。

在其它實(shí)例中,未對(duì)準(zhǔn)blt命令指定與所述未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的第一表面的第一表面指針值。在此類實(shí)例中,為了產(chǎn)生多個(gè)對(duì)準(zhǔn)blt命令,cpu6可產(chǎn)生多個(gè)對(duì)準(zhǔn)blt命令以使得多個(gè)對(duì)準(zhǔn)blt命令中的每一者指定與多個(gè)對(duì)準(zhǔn)blt命令中的每一者相關(guān)聯(lián)的表面中的一者的第一表面指針值。

在額外實(shí)例中,多個(gè)對(duì)準(zhǔn)blt命令包含第一對(duì)準(zhǔn)blt命令和第二對(duì)準(zhǔn)blt命令,且未對(duì)準(zhǔn)blt命令指定第一blt區(qū)域。在此類實(shí)例中,為了產(chǎn)生多個(gè)對(duì)準(zhǔn)blt命令,cpu6可基于所述第一blt區(qū)域確定第二blt區(qū)域和第三blt區(qū)域(所述第二blt區(qū)域不同于所述第三blt區(qū)域),且產(chǎn)生第一對(duì)準(zhǔn)blt命令以使得所述第一對(duì)準(zhǔn)blt命令指定第二表面寬度、第一表面指針值和第二blt區(qū)域。在此類實(shí)例中,cpu6可進(jìn)一步產(chǎn)生第二對(duì)準(zhǔn)blt命令以使得第二對(duì)準(zhǔn)blt命令指定第二表面寬度、第一表面指針值和第三blt區(qū)域。在一些情況下,第二blt區(qū)域可包含第一blt區(qū)域的偶數(shù)行,且第三blt區(qū)域可包含第一blt區(qū)域的奇數(shù)行。

在一些實(shí)例中,未對(duì)準(zhǔn)blt命令指定與未對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的第一表面的第一表面指針值,所述第一表面指針值并非是與執(zhí)行所述多個(gè)對(duì)準(zhǔn)blt命令的處理器相關(guān)聯(lián)的預(yù)定對(duì)準(zhǔn)寬度約束條件的整數(shù)倍數(shù),且所述多個(gè)對(duì)準(zhǔn)blt命令包括第一對(duì)準(zhǔn)blt命令和第二對(duì)準(zhǔn)blt命令。在此類實(shí)例中,為了產(chǎn)生多個(gè)對(duì)準(zhǔn)blt命令,cpu6可基于第一表面指針值和預(yù)定對(duì)準(zhǔn)寬度約束條件確定第二表面指針值和第三表面指針值以使得第二表面指針值和第三表面指針值是預(yù)定對(duì)準(zhǔn)寬度約束條件的不同整數(shù)倍數(shù),產(chǎn)生第一對(duì)準(zhǔn)blt命令以使得第一對(duì)準(zhǔn)blt命令指定與第一對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的表面中的一者的第二表面指針值,且產(chǎn)生第二對(duì)準(zhǔn)blt命令以使得第二對(duì)準(zhǔn)blt命令指定與第二對(duì)準(zhǔn)blt命令相關(guān)聯(lián)的表面中的一者的第三表面指針值。在一些情況下,第二blt區(qū)域可包含第一blt區(qū)域的偶數(shù)行,且第三blt區(qū)域可包含第一blt區(qū)域的奇數(shù)行。

在其它實(shí)例中,未對(duì)準(zhǔn)blt命令指定第一blt區(qū)域。在此類實(shí)例中,cpu6可基于第一blt區(qū)域確定第二blt區(qū)域和第三blt區(qū)域(所述第二blt區(qū)域不同于所述第三blt區(qū)域),產(chǎn)生第一對(duì)準(zhǔn)blt命令以使得第一對(duì)準(zhǔn)blt命令指定第二表面寬度、第二表面指針值和第二blt區(qū)域,且產(chǎn)生第二對(duì)準(zhǔn)blt命令以使得第二對(duì)準(zhǔn)blt命令指定第二表面寬度、第三表面指針值和第三blt區(qū)域。在一些情況下,第二blt區(qū)域可包含第一blt區(qū)域的偶數(shù)行,且第三blt區(qū)域可包含第一blt區(qū)域的奇數(shù)行。

本文所描述的技術(shù)可延伸到其中多于兩個(gè)的表面行分組在一起以形成虛擬表面的單個(gè)行的表面。舉例來說,當(dāng)n個(gè)表面行分組在一起時(shí),單個(gè)未對(duì)準(zhǔn)blt命令可轉(zhuǎn)換為n個(gè)對(duì)準(zhǔn)blt命令,其中n是大于或等于二的整數(shù)。

在多于兩個(gè)的表面行分組在一起的情況下,如果用于未對(duì)準(zhǔn)blt命令的未對(duì)準(zhǔn)表面中的一者的表面指針未對(duì)準(zhǔn),那么cpu6可產(chǎn)生兩個(gè)不同的虛擬表面(類似于圖9),其中第一虛擬表面具有小于所述未對(duì)準(zhǔn)表面指針的對(duì)準(zhǔn)表面指針,且第二虛擬表面具有大于所述未對(duì)準(zhǔn)表面的對(duì)準(zhǔn)表面指針。cpu6可將兩個(gè)虛擬表面中的一者以確保在特定blt命令期間存取的表面行不卷包所指派的虛擬表面的邊緣的方式指派到n個(gè)blt命令中的每一者。

在一些實(shí)例中,本發(fā)明的技術(shù)可用于服務(wù)執(zhí)行縮放和/或?yàn)V波的blt操作。在此類實(shí)例中,讀取引擎38可能未經(jīng)對(duì)準(zhǔn)約束,而寫入引擎40可能經(jīng)對(duì)準(zhǔn)約束。

本發(fā)明中所描述的技術(shù)可至少部分實(shí)施于硬件、軟件、固件或其任何組合中。舉例來說,所描述技術(shù)的各種方面可在一或多個(gè)處理器中實(shí)施,所述一或多個(gè)處理器包含一或多個(gè)微處理器、數(shù)字信號(hào)處理器(dsp)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga),或任何其它等效的集成或離散邏輯電路,以及此類組件的任何組合。術(shù)語“處理器”或“處理電路”可一般指前述邏輯電路中的任一者(單獨(dú)或與其它邏輯電路組合)或例如執(zhí)行處理的離散硬件的任何其它等效電路。

此類硬件、軟件和固件可實(shí)施于同一裝置內(nèi)或分開的裝置內(nèi)以支持本發(fā)明中所描述的各種操作和功能。另外,所描述的單元、模塊或組件中的任一者可一起或分開作為離散但可互操作邏輯裝置而實(shí)施。將不同特征描繪為模塊或單元旨在強(qiáng)調(diào)不同功能方面,且未必暗示此類模塊或單元必須由單獨(dú)硬件或軟件組件實(shí)現(xiàn)。確切地說,與一或多個(gè)模塊或單元相關(guān)聯(lián)的功能性可由單獨(dú)硬件、固件及/或軟件組件執(zhí)行,或集成到共用或單獨(dú)硬件或軟件組件內(nèi)。

本發(fā)明中所描述的技術(shù)也可存儲(chǔ)、體現(xiàn)或編碼于計(jì)算機(jī)可讀媒體(例如,存儲(chǔ)指令的計(jì)算機(jī)可讀存儲(chǔ)媒體)中。嵌入或編碼于計(jì)算機(jī)可讀媒體中的指令可使一或多個(gè)處理器執(zhí)行本文中所描述的技術(shù)(例如,當(dāng)所述指令由所述一或多個(gè)處理器執(zhí)行時(shí))。計(jì)算機(jī)可讀存儲(chǔ)媒體可包含隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可編程只讀存儲(chǔ)器(prom)、可擦除可編程只讀存儲(chǔ)器(eprom)、電子可擦除可編程只讀存儲(chǔ)器(eeprom)、快閃存儲(chǔ)器、硬盤、cd-rom、軟盤、卡盒、磁性媒體、光學(xué)媒體或其它有形計(jì)算機(jī)可讀存儲(chǔ)媒體。

計(jì)算機(jī)可讀媒體可包含計(jì)算機(jī)可讀存儲(chǔ)媒體,其對(duì)應(yīng)于有形存儲(chǔ)媒體,例如上文所列的那些存儲(chǔ)媒體。計(jì)算機(jī)可讀媒體也可包括通信媒體,其包含促進(jìn)計(jì)算機(jī)程序從一個(gè)位置到另一位置的傳送(例如,根據(jù)通信協(xié)議)的任何媒體。以此方式,短語“計(jì)算機(jī)可讀媒體”一般可對(duì)應(yīng)于(1)非暫時(shí)性有形計(jì)算機(jī)可讀存儲(chǔ)媒體,和(2)例如暫時(shí)性信號(hào)或載波等非有形計(jì)算機(jī)可讀通信媒體。

已描述各種方面和實(shí)例。然而,可在不脫離以下權(quán)利要求的范圍的情況下對(duì)本發(fā)明的結(jié)構(gòu)或技術(shù)作出修改。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
中山市| 叙永县| 老河口市| 朝阳县| 广德县| 邹城市| 鄱阳县| 晋州市| 建水县| 杭锦旗| 吴川市| 彭州市| 呼图壁县| 阜平县| 泽州县| 天镇县| 天柱县| 河东区| 乌海市| 凤庆县| 陆川县| 孝义市| 章丘市| 绥德县| 浦城县| 伊通| 湄潭县| 泰顺县| 丹江口市| 南雄市| 石柱| 福鼎市| 含山县| 丹江口市| 惠来县| 青冈县| 眉山市| 垣曲县| 松原市| 乐山市| 澄江县|