图形处理电路和方法_2

文档序号:9597601阅读:来源:国知局
色操作。如图2所示,原始顶点着色操作的表达可以包含子树(Sub-tree)A、B、C、D, 其中每个子树A、B、C、D可以包含多个子表达(sub-expression),每个子表达对应于一个指 令。子树A生成输出值VA,子树B生成输出值VB,子树C生成输出值VC,以及子树D生成输 出值VD。在此实例中,执行原始顶点着色操作来产生四个最终输出值(VA+VB)、(VB-VC)、 (VB-VC)XVD以及(VC/VD),其中(VA+VB)为运算元〃+〃的输出,(VB-VC)为运算元〃一 〃的输出,(VB-VC)XVD为运算元"X"的输出,以及(VC/VD)为运算元〃/〃的输出。
[0026] 当采用图形处理电路100时,原始顶点着色操作被分为第一顶点着色操作和第二 顶点着色操作,所述第一顶点着色操作和所述第二顶点着色操作使用更少的重叠指令(例 如,相同指令在第一顶点着色操作和第二顶点着色操作二者中均被执行)。在此实例中,第 一顶点着色器102负责生成两个最终输出值(VA+VB)和(VB-VC),其可以是顶点坐标值; 第二顶点着色器104负责生成两个最终输出值(VB-VC)XVD和(VC/VD),其可以是可变变 量值。如图3所示,第一顶点着色器102需要至少执行子树A,B,C内的指令以及对应于运 算元〃+〃和〃一 〃的指令,随后生成最终输出值(VA+VB)和(VB-VC)至顶点输出缓冲器 104。由于已经在顶点缓冲器104中可得到最终输出值(VB-VC),第二顶点着色器106可 以从顶点缓冲器104直接装载最终输出值(VB-VC),并再使用输出值(VB-VC)来由此跳 过执行包含在子树B内的指令。以此方式,第二顶点着色器106执行子树C,D内的指令以 及对应于运算元〃X〃和〃/〃的指令,随后生成最终输出值(VB-VC)XVD和(VC/VD)。相 比于具有传统的第二顶点着色阶段的两阶段设计,其中第二顶点着色阶段需要通过执行包 含在子树B、C、D内的指令以及对应于运算元〃 一〃,〃X〃和〃/〃的指令而生成最终输出值 (VB-VC)XVD和(VC/VD),所提出的图形处理电路100允许第二顶点着色器106执行更少 的指令,这是因为对第一顶点着色器的输出(例如,由第一顶点着色器102所生成的顶点坐 标值(一个或多个))的再使用。
[0027] 再使用第一顶点着色器的输出(包含至少一个顶点坐标值)的实例可以由以下程 序代码进行说明。
[0028]
[0029]

[0030]当示例性的程序代码被编译并随后被执行时,第一顶点着色器102计算顶点坐 标值〃gl_P〇sition〃,第二顶点着色器106仅需计算可变变量"v_position"。此外,第二 顶点着色器106可以从由第一顶点着色器102生成的顶点坐标值〃gl_p〇siti〇n〃得到 "position. z〃。通过对第一顶点着色器的输出的再使用,指令数能从75变为10,因此导致 增强了第二顶点着色器106的性能。应当注意到,以上仅为说明目的,其并不意味着对本发 明的限制。所节约的指令数目可以根据不同的指令集架构和/或不同的编译器设计而变 化。实际上,利用所提出的顶点着色器设计来减少指令数的任何图形处理电路均落入本发 明的保护范围。
[0031] 子树C内的最高节点是边界节点,所述边界节点的值包括在第一顶点着色器的输 出(例如(VB-VC))的直接运算和第二顶点着色器的输出(例如(VC/VD))的直接运算之 中。因此,子树C的输出值VC可以被当作顶点着色过程的中间值。如果输出值VC也被存 储到顶点输出缓冲器104中,则第二顶点着色器106可以直接从顶点输出缓冲器104装载 所述输出值VC,并再使用所述输出值VC来跳过更多指令,因此导致第二顶点着色器106的 更好的性能。
[0032] 图4是根据本发明第二实施例的图形处理电路的示意图。非限制性地举例来说, 图形处理电路400可以为使用在电子设备中的图形处理单元(GPU)的一部分。在此实施例 中,图形处理电路400包含第一顶点着色器402,第二顶点着色器406,前述的顶点输出缓冲 器104以及图元剔除电路108。应当注意到,图4中仅示出了与本发明相关的组件。实际 上,图形处理电路400可以具有额外的电路块,其取决于实际的设计考虑。
[0033] 顶点输出缓冲器104耦合于第一顶点着色器402、图元剔除电路108以及第二顶点 着色器406。因此,顶点输出缓冲器104可以访问第一顶点着色器402、图元剔除电路108 以及二顶点着色器406中的每一个。在此实施例中,第一顶点着色器402用于生成图像几 何内多个顶点的坐标值,并将顶点的坐标值存储到顶点输出缓冲器104中。此外,第一顶点 着色器402进一步用于生成多个中间值至顶点输出缓冲器104,每个中间值都与顶点之一 的坐标值的生成以及至少一个用户定义变量值(例如,由OpenGL ES定义的可变变量)的 生成相关联。即,由第一顶点着色器402所生成的数据输出VS_0UT1'包含顶点坐标值和中 间值,所生成的数据输出VS_0UT1'输出给顶点输出缓冲器104。类似地,图元剔除电路108 命令顶点输出缓冲器104通过移除不合格顶点的缓冲坐标值来丢弃与不合格图元(例如, 不可见图元)相关联的顶点。因此,第二顶点着色器406不会将时间浪费在处理与不合格 顶点相关联的顶点之上。
[0034] 在此实施例中,第二顶点着色器406用于读取来自顶点输出缓冲器104的缓冲坐 标值的至少一部分(即,部分或全部)以及缓冲中间值的至少一部分(即,部分或全部),并 通过再使用缓冲坐标值的至少一部分以及缓冲中间值的至少一部分,来生成至少一个用户 定义变量值。除了坐标值之外,第二顶点着色器406还可以再使用中间值。由于中间值被 再使用,第二顶点着色器406可以跳过更多指令。
[0035] 请参考图5,其为根据本发明实施例的简化表达树的示意图,所述简化表达树示出 了通过图4中第一顶点着色器402执行的第一顶点着色操作,以及通过图4中第二顶点着 色器406执行的第二顶点着色操作。图3和图5中所示的第二顶点着色操作之间的主要不 同在于,直接从顶点输出缓冲器104装载第二顶点着色器406所需的子树C的输出值VC,而 不是由执行包含在子树C中的指令来得到第二顶点着色器406所需的子树C的输出值VC。 特别地,在此实例中,第一顶点着色器402负责生成最终输出值(VA+VB)和(VB-VC),其可 以是顶点坐标值,并将最终输出值(VA+VB)和(VB-VC)以及输出值VC(其为中间值)存 储到顶点输出缓冲器104 ;第二顶点着色器104负责由顶点输出缓存器104装载最终输出 值(VB-VC)和中间值VC,并生成最终输出值(VB-VC)XVD和(VC/VD),其可以是可变变 量值。如图5所示,第一顶点着色器402需要执行子树A、B、C内的指令以及对应于运算元 〃+〃和〃一〃的指令。由于最终输出值(VB-VC)和中间值VC已经可以在顶点缓冲器104 中得到,第二顶点着色器406可以由顶点缓冲器104直接装载最终输出值(VB-VC)和中间 值VC,并再使用最终输出值(VB-VC)和中间值VC来由此跳过执行包含在子树B和C内的 指令。以此方式,第二顶点着色器406执行子树D内的指令以及对应于运算元〃X〃和〃/〃 的指令来生成最终输出值(VB-VC)XVD和(VC/VD)。相比于图1中所示的图形处理电路 100,图4中示出的所提出的图形处理单元400允许第二顶点着色器406执行更少的指令, 所述指令包含至少一个顶点坐标值和至少一个中间值,这是因为对第一顶点着色器的输出 的再使用。
[0036] 再使用第一顶点着色器的输出的实例可以由以下程序代码进行说明,所述输出包 括至少一个中间值。
[0037]

[0039] 当示例性的程序代码被编译并随后被执行时,第一顶点着色器102基于中间 值〃position〃计算顶点坐标值〃gl_position〃,第二顶点着色器106需要基于可变变量 〃:fog_position〃来计算可变变量"fog_distance",可变变量"fog_position"基于中间值 "position〃而获得。第二顶点着色器406可以从第一顶点着色器402得到〃position
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1