CN107438865B - 图形处理系统及其操作方法 - Google Patents

图形处理系统及其操作方法 Download PDF

Info

Publication number
CN107438865B
CN107438865B CN201680021229.0A CN201680021229A CN107438865B CN 107438865 B CN107438865 B CN 107438865B CN 201680021229 A CN201680021229 A CN 201680021229A CN 107438865 B CN107438865 B CN 107438865B
Authority
CN
China
Prior art keywords
fragment
per
graphics
shading
shader program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680021229.0A
Other languages
English (en)
Other versions
CN107438865A (zh
Inventor
J·尼斯塔德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN107438865A publication Critical patent/CN107438865A/zh
Application granted granted Critical
Publication of CN107438865B publication Critical patent/CN107438865B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

本公开涉及图形处理系统及其操作方法。具体地,一种图形处理流水线(30),其包括可编程片段着色器(40),该可编程片段着色器(40)可操作以响应于被包括在正在执行的片段着色器程序中的“测试”指令,在合适时候,触发执行针对被处理片段的alpha到覆盖操作(41)、后期模板测试(42)、以及后期深度测试(43),并接着将更新的覆盖信息返回至片段着色器(40)。这允许在着色器执行期间触发并执行alpha到覆盖以及后期模板和深度测试操作,而不必在执行那些操作之前等待直到完成着色器执行为止。

Description

图形处理系统及其操作方法
背景技术
本文所述技术涉及图形处理系统,并且具体来说,涉及包括一个或更多个可编程处理级(“着色器(shader)”)的图形处理系统的操作。
正常情况下,图形处理首先通过将要生成的输出(如要显示的帧)划分为多个相似的基本组件(所谓的“图元(primitive)”),以允许更容易执行图形处理操作。这些“图元”通常采用简单多边形的形式,如三角形。
一旦生成和定义了图元,它们就可以由图形处理系统进行处理,以便例如显示该帧。
该处理基本上涉及确定覆盖要处理的输出区域的采样点阵列中的哪些采样点被图元覆盖,然后确定每个采样点应具有的表现(例如,根据其颜色等)来表示该采样点处的图元。这些处理通常分别被称为光栅化(rasterising)和渲染(rendering)。
光栅化处理确定应当被用于图元的采样位置(即,要用于表示输出(例如,要显示的帧)中的图元的采样点的(x,y)位置)。
渲染处理然后导出为表示采样点处的图元(即,“着色”每个采样点)所必需的数据(如红、绿以及蓝(RGB)颜色值,和“alpha”(透明度)值)。这可以涉及应用纹理、混合采样点数据值等。
这些处理通常通过以下步骤来执行:测试多组一个或一个以上的采样点,并接着针对被发现包括处于所讨论(被测试)图元内部(被其覆盖)的一采样点的每组采样点,来生成通常被称为执行图形处理操作(如渲染)的“片段”的离散图形实体。因此,实际上,将所覆盖的采样点处理为:将被用于渲染所讨论的采样点处的图元的片段(fragment)。“片段”是经过渲染处理(渲染流水线)的图形实体。根据图形处理系统如何配置,生成和处理的每片段例如可以表示单个采样点或一组多个采样点。
许多图形处理系统现在包括一个或更多个可编程处理级(processing stage),通称为“着色器”,其执行用于执行图形处理操作的程序,以生成希望图形数据。这些着色器是可编程处理级,其针对输入数据值执行着色器程序,生成希望输出数据集(以供图形处理流水线的其余部分处理和/或输出)。图形处理流水线的着色器可以共用可编程处理电路,或者它们皆可以是独特的可编程处理单元。
图形处理流水线通常可以包括的一个着色器是片段着色器,其对由光栅化器生成的片段执行片段着色操作,作为渲染处理的一部分。
像光栅化和渲染(片段着色)操作一样,图形处理通常还包括执行许多每片段(per-fragment)操作,如隐藏表面去除或其它剔除测试(如alpha到覆盖(alpha tocoverage)和/或alpha测试),模板测试(tencil test)和/或深度测试(depth test),以及混合。图形处理API(标准)通常要求这些每片段操作在执行了片段着色之后进行。
图1示出了可按上述方式操作的示例性图形处理流水线1。
如图1所示,图形处理流水线1包括:图元组合级2、光栅化级(光栅化器)3、执行片段着色操作的片段着色器(着色器执行)级4、执行alpha到覆盖操作的alpha到覆盖级5、执行模板测试的模板测试级6、执行深度测试的深度测试级7、以及执行混合操作的混合级8。然后,可以将混合操作的输出写入存储器9,作为图形处理流水线1的输出。
尽管图形处理标准(API)要求各种每片段操作,如alpha到覆盖、alpha测试、模板测试以及深度测试必须在片段着色操作之后执行,但在片段着色器操作之前,可以实现这些测试中的至少一些(通常是模板测试和深度测试),只要这样做,整个处理就表现得如同该测试在片段着色器操作之后发生一样(即,结果与测试在片段着色器操作之后发生相同)。通过“早期”执行模板测试和深度测试(至少在可能的地方),可以增强隐藏表面去除,使得可以避免在最终输出中实际看不到的针对片段和图元的片段着色操作。
图2示出了对应图形处理流水线,其具有“早期”执行模板测试和深度测试的能力(即,在片段着色器执行之前)(在可能的地方)。
在这种情况下,如图2所示,图形处理流水线20包括:早期模板测试级21,和处于光栅化器3与片段着色器4之间的早期深度级22。这些级针对由光栅化器3发出的片段,在图形处理流水线确定可以这样做的地方执行它们各自的测试。
然而,如图2所示,该流水线仍必须包括“常规”后期模板测试级6和后期深度测试级7,以供在不可能利用早期模板测试级21或早期深度测试级22执行这那些试的片段上执行那些测试。可能是这样的情况,即,例如,启用alpha到覆盖或alpha测试,或者片段着色器本身具有丢弃操作,改变输出覆盖遮罩(mask)或本身确定输出深度和/或模板值。在这些情况下,模板测试和深度测试不能“早期”(即在片段着色器之前)执行。
本申请人认为,对于包括片段着色器并且执行一个或更多个每片段操作的图形处理流水线的操作来说,存在改进的余地。
附图说明
下面,仅通过实施例的方式并且参照附图,对本文所述技术的多个实施方式进行描述,其中:
图1和图2示出了示例性图形处理流水线;
图3示出了示例性计算机图形处理系统;
图4示意性地示出了以本文所述技术的方式操作的图形处理流水线;以及
图5、图6以及图7示意性地示出了根据本文所述的技术的图形处理系统的操作的实施方式。
相同标号在合适情况下用于图中的相同组件。
具体实施方式
本文所述技术的第一实施方式包括一种操作包括图形处理流水线的图形处理系统的方法,该方法包括以下步骤:
多个处理级,至少包括光栅化器,该光栅化器对输入图元进行光栅化,以生成要处理的图形片段,每一个图形片段都具有与其相关联的一个或更多个采样点;和
可编程片段着色级,该可编程片段着色级执行片段着色器程序以针对由所述光栅化器生成的图形片段执行片段着色操作;
所述方法包括以下步骤:
在要通过所述图形处理流水线的所述可编程片段着色级执行的片段着色器程序中包括图形程序指令,该图形程序指令在执行时使所述片段着色器确定是否可以针对被处理片段执行每片段操作,并且在确定可以针对被处理片段执行所述每片段操作时,触发执行针对被处理片段的每片段操作;以及
所述图形处理流水线的所述可编程片段着色级在执行所述片段着色器程序以处理片段时,响应于所述指令进行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;并且
在确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的每片段操作,由此生成针对正在被处理的片段的每片段操作的结果。
本文所述技术的第二实施方式包括一种图形处理系统,该图形处理系统包括:
图形处理流水线,该图形处理流水线包括:
光栅化器,该光栅化器对输入图元进行光栅化,以生成要处理的图形片段,每一个图形片段都具有与其相关联的一个或更多个采样点;以及
可编程片段着色级,该可编程片段着色级执行片段着色器程序,以针对由所述光栅化器生成的图形片段执行片段着色操作;
所述图形处理系统还包括:
处理电路,该处理电路被配置成,在要通过所述图形处理流水线的所述可编程片段着色级执行的片段着色器程序中包括图形程序指令,该图形程序指令在执行时使所述片段着色器确定是否能够针对被处理片段执行每片段操作,并且在确定能够针对被处理片段执行每片段操作时,触发执行针对被处理片段的每片段操作;并且其中:
所述图形处理流水线的所述可编程片段着色级被配置成,在执行片段着色器程序以处理片段时,响应于所述指令进行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;并且
在确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的每片段操作,由此生成针对正在被处理的片段的每片段操作的结果。
在本文所述技术中,(潜在地)可以触发执行每片段操作(举例来说,诸如并且如下面将要讨论的,alpha到覆盖操作、alpha测试、模板测试和/或深度测试)的指令被包括在要由图形处理流水线的片段着色级执行的片段着色器程序中。这样做的效果是,在执行片段着色器程序期间(即,在片段着色器仍在运行时),那些每片段操作可以(潜在地)被触发并执行,而不是例如在能够执行那些操作之前必须等待直到片段着色程序(片段着色器)已经完成为止。
如下将进一步讨论的,本申请人已经认识到这种布置是有益的,因为相比如果所讨论片段必须到达“后期”每片段操作级,如后期深度和模板测试(stencil test)级,其可以允许更早地执行每片段操作(即,在片段着色器仍在运行时),以便在不可能“早期”(即,在片段着色器之前)执行每片段操作(如深度和模板测试)的那些情况下,经历那些操作。
换句话说,本文所述技术可操作以(潜在地)执行通常在片段着色处理完成之后执行的每片段操作和更新,而同时片段着色处理正在进行。这例如易于并且如下文将进一步讨论的,利用每片段操作的结果(潜在地)停止在该级进一步执行针对所讨论片段的片段着色程序(例如)(而不是必须完成针对所讨论片段的片段着色操作,然后确定利用所讨论片段实际上可以被丢弃的“后期”每片段测试级)。这样可以节省所讨论图形处理所需的处理资源、存储器带宽、电力等,因为片段的处理可以(潜在地)在图形处理操作的序列中更早停止。
如下面将进一步讨论的,本文所述技术还可以允许其测试/操作取决于针对给定片段的每片段操作的结果的其它片段对应地更早地完成其每片段操作(例如,深度测试),并因此潜在地在图形处理操作的序列中更早被丢弃(即使要经历所触发每片段操作的给定片段本身不能被丢弃)。
本申请人在这方面已经认识到,即使可能是“早期”每片段操作(测试)(如深度和模板测试)对于正被处理的给定片段、图元等来说不可能(例如,因为片段着色操作本身将产生那些测试所需的值)的情况,仍然可能的情况是,在片段着色操作本身期间,执行每片段操作所必需的值可以在整个片段着色操作(程序)已经完成之前变得可用(和/或如下面将进一步讨论的,片段着色程序本身可以被配置成,使得那些值在之前变得可用)。例如,片段着色器可以在计算颜色值之前确定针对一片段的alpha(透明度)值,使得一旦alpha值可用(并且在片段着色器生成该颜色值之前),就可以执行使用该alpha值的每片段操作(如alpha到覆盖)。
例如,并且在实施方式中,一旦针对每片段操作的相关值变得可用。本文所述技术就通过在片段着色器程序中包括可以在执行着色器程序期间触发每片段操作的“测试”指令,来采用其。
本文所述技术还扩展至响应于测试指令本身的片段着色器的操作。
因此,本文所述技术的第三实施方式包括一种操作图形处理流水线的可编程片段着色级的方法,该可编程片段着色级执行片段着色器程序,以针对由所述图形处理流水线的光栅化器生成的图形片段执行片段着色操作;
该方法包括以下步骤:
所述图形处理流水线的所述可编程片段着色级在执行片段着色器程序以处理一片段时进行如下操作:
响应于包括在所述片段着色器程序中的图形程序指令执行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;并且
在确定能够针对正在被处理的片段执行每片段操作时,触发执行针对所述正在被处理的片段的所述每片段操作,由此生成针对所述正在被处理的片段的所述每片段操作的结果。
本文所述技术的第四实施方式包括一种用于图形处理流水线的可编程片段着色级,该可编程片段着色级包括:
处理电路,该处理电路执行片段着色器程序,以针对由光栅化器生成的图形片段执行片段着色操作;并且
其中,所述可编程片段着色级被配置成,在执行片段着色器程序以处理一片段时进行如下操作:
响应于包括在片段着色器程序中的图形程序指令进行如下操作:
确定是否能够针对所述正在被处理的片段执行每片段操作;并且
当确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的所述每片段操作,由此生成针对正在被处理的片段的每片段操作的结果。
图形处理流水线的光栅化器将生成要渲染的图形片段,以生成针对希望图形输出(如要显示的帧)的采样点的渲染图形数据。由光栅化器生成的每个图形片段关联其与图形输出的一组采样点,并且将用于生成针对与该片段相关联的该组采样点中的一个或更多个采样点的渲染图形数据。为此,由光栅化器生成的每个片段可以并且在一个实施方式中将其与覆盖(coverage)信息相关联,该覆盖信息指示与该片段相关联的该组采样点中的哪些采样点实际上被用于渲染(即,针对那些采样点,该片段被用于生成渲染片段数据)。可以根据需要提供该覆盖信息,例如借助于与该片段相关联的覆盖遮罩。
光栅化器可以被配置成,生成用于以任何希望和合适的方式进行渲染的片段。其例如将收到要进行光栅化的图元,针对采样点和/或采样点位置集测试那些图元,并因此生成表示该图元的片段。光栅化器可以以任何希望和合适的方式操作。
可编程片段着色级(片段着色器)处理由光栅化器生成的片段,以生成针对该片段表示的(覆盖)采样点的渲染片段数据。这些片段着色处理例如可以包括纹理映射等。
为了执行其片段着色处理,可编程片段着色级将执行一个或更多个图形片段着色程序。每个这样的程序将会并且在实施方式中,包括一组图形程序指令,其按恰当次序执行以执行希望的片段着色处理。根据本文所述技术,针对片段着色级将执行的一个或更多个片段着色程序的图形程序指令集将包括:本文所述技术的一个或更多个“测试”指令。
片段着色级应当并且在实施方式中针对从光栅化器接收(并且要执行片段着色处理)的每个片段,执行所讨论的片段着色程序。因此,在实施方式中,将分别对由光栅化器生成的一组多个片段中的每个片段执行本文所述技术的操作(并因此配置图形处理流水线的片段着色级)。
可编程片段着色器可以包括任何合适的可编程硬件部件,如可编程处理电路。其可以作为分离电路部件提供给图形处理流水线的其它可编程级。然而,它也可以由共享可编程图形处理电路至少部分地形成。
包括在片段着色器程序中的“测试”指令(潜在地)触发的每片段操作可以是:任何希望和合适的每片段操作或多个每片段操作。在一个实施方式中,其是对片段执行测试的操作,如alpha测试、深度测试和/或模板测试。因此,在实施方式中,“测试”指令(潜在地)触发每片段测试操作(或多个每片段测试操作)。
在实施方式中,每片段操作是:将影响和/或确定并且在实施方式中将完成片段覆盖(即,被所讨论片段覆盖(并由此被处理)的采样点)的操作。这样所具有的效果是,例如,如果在执行测试指令之后,片段覆盖(可以)被确定为零(使得针对片段的任何采样点实际上不需要渲染),那么针对所讨论片段的着色器程序执行可以(并且在实施方式中)在那一点被停止。
因此,在实施方式中,测试指令触发确定针对该片段的覆盖是否为零(并且如果确定针对该片段的覆盖为零,那么该片段在实施方式中被丢弃(暂停针对该片段的着色器执行))。
对应地,在实施方式中,包括在着色器程序中的指令可以触发的每片段操作是以下各项中的一个或多个,并且在实施方式,是以下全部:alpha到覆盖操作;alpha测试;模板测试;以及深度测试。
该指令可以被配置成仅触发这些操作之一,或者它们中的一些(多个)或全部。
在一个实施方式中,测试指令(仅在实施方式中)能够触发alpha到覆盖和/或alpha测试操作。在另一实施方式中,指令(仅在实施方式中)能够触发深度测试操作。在另一实施方式中,指令能够触发alpha到覆盖操作和深度测试操作两者。
由包括在着色器程序中的测试指令触发的每片段操作可以以任何希望和合适的方式来执行(如果测试指令触发该操作)。例如,测试指令可以操作,以使图形处理流水线的现有功能单元执行相关操作。这可能是合适的,例如,每片段操作是模板或深度测试(并且在实施方式中,这是针对模板或深度测试的情况,即,测试指令通过图形处理流水线的现有模板和/或深度测试级,来触发执行模板或深度测试)。
另外或另选的是,可以在着色器核心本身中提供专用硬件来执行可以通过测试指令触发的操作。这可能是特别合适的,其中每片段操作相对简单地执行并在硬件中提供,如针对alpha到覆盖操作的情况。因此,在实施方式中,当测试指令(潜在地)触发alpha到覆盖操作时,借助于着色器核心中的专用硬件来执行该操作。
还可以或者相反地可以借助于由片段着色器执行的着色器例程,来执行每片段操作。在这种情况下,片段着色器程序可以包括用于执行每片段操作的恰当着色器例程(指令集),如果测试指令触发该测试,则该例程将被触发(并由此通过片段着色器执行)。该处理可以通过例如在着色器程序中使用恰当条件分支命令(或以任何其它合适的方式)来实现。
根据需要,当然可以使用用于执行测试指令所触发的每分段操作(如果该操作通过该指令触发)的其它布置。
片段着色器可以确定:是否应当针对所讨论片段以任何合适和希望的方式,来触发(执行)测试指令所涉及的操作或多个操作。该确定在实施方式中基于一个或更多个标准,其可以指示是否适合执行测试指令所涉及的每片段操作或多个每片段操作。
在实施方式中,该确定至少部分地基于针对所讨论图形处理任务(例如,绘制调用)的状态,例如,渲染状态。
因此,在实施方式中,是否和/或哪个(哪些)操作(潜在地)由指令触发取决于满足的某些条件或标准,如针对正在执行的片段处理的当前状态(渲染状态)。例如,并且在实施方式中,如果那些操作被启用(例如,在渲染状态下),则将该指令配置成仅触发一给定操作或多个给定操作操作。
在实施方式中,通过测试指令触发每分段操作取决于:当到达测试指令(开始执行)时是否已经完成了针对所讨论片段的深度和/或模板测试。
如果深度/模板测试在测试指令到达之前已经完成,则测试指令在实施方式中可操作,以触发确定片段覆盖是否为零(针对该片段的覆盖为零),并且在实施方式中,在这种情况下,触发丢弃该片段(停止针对该片段的着色器执行)。
这允许其中着色器程序可以具有“副作用”(即,可以以其它方式影响存储器而不是通过所得到的颜色,例如,通过进行简单的存储器存储或存储器原子)的情况,因为在这种情况下,即使片段经历了早期深度/模板测试并且未达成那些测试,着色器程序也必须执行(这是因为图形标准(API)通常指定那些测试必须在着色器执行之后完成)。通过使测试指令触发确定片段覆盖是否为零,这样就允许测试指令在片段经历了早期深度/模板测试并导致片段具有零覆盖的情况下终止着色器执行。
另一方面,如果在开始执行(到达)测试指令时深度和模板测试尚未完成,则在实施方式中触发测试指令所涉及的每片段操作中的一个或多个。
在这种情况下,在实施方式中,如果测试指令可操作以触发alpha到覆盖操作(并且在合适的情况下,图形处理状态使得能够进行alpha到覆盖或alpha测试),接着,测试指令在实施方式中触发执行针对所讨论片段的alpha到覆盖和/或alpha测试操作。
触发每片段操作和通过测试指令触发的每片段操作在实施方式中也或相反(并且还在实施方式中)地取决于是否启用alpha到覆盖或alpha测试,和/或着色器程序是否可操作以输出深度和/或模板值。
在实施方式中,如果启用了alpha到覆盖或alpha测试操作(例如,针对所讨论图形处理任务的渲染状态已经启用alpha到覆盖或alpha测试),则该测试指令在执行时触发执行alpha到覆盖或alpha测试。
对应地,如果着色器程序不输出深度和/或模板值,那该测试指令当在实施方式中执行时,触发执行深度和/或模板测试(在适当时候)。
在实施方式中,测试指令的执行取决于针对所讨论片段的深度和/或模板“年龄检查”(若提供的话),即,该片段是否已经完成早期的深度/模板测试,或者是在其位置的尚未完成深度/模具测试的最老片段。在实施方式中,测试指令的执行需要(等待)深度和/或模板年龄检查已经针对所讨论片段完成(即,该片段必须已经完成早期深度/模板测试或者是在其位置针对要执行的测试指令尚未完成深度/模板测试的最老片段)。这可以帮助确保片段按照标准(API)要求的次序进行测试等。
如果触发针对该测试指令的操作或多个操作,则那些操作应该被恰当执行以生成操作结果(例如,在alpha到覆盖操作的情况下修改针对该片段的覆盖)。该操作的结果在实施方式中接着以恰当的方式使用和/或存储和/或指示。因此,例如,并且在实施方式中,该操作可以输出(更新)针对所讨论片段的覆盖信息(例如新的覆盖遮罩)。
像(潜在地)更新信息(如覆盖信息)一样,针对所讨论片段,测试指令触发的操作或多个操作可以是并且在实施方式中,在适当的情况下,还被用于更新用于图形处理操作的其它信息(例如,并且在实施方式中,可能与其它片段的处理相关)。因此,例如,如果测试指令触发执行深度测试,那么针对所讨论片段的测试的结果在实施方式中,被用于更新针对于所讨论图形处理任务存储的深度信息(例如,深度缓冲器),例如并且在实施方式中,使得针对所讨论片段的深度值相反可用于其它(例如,后期)要测试的片段。
因此,在实施方式中,如果测试指令触发执行针对所讨论片段的深度和/或模板测试,那么该测试的结果例如并且在实施方式中,通过更新深度和/或模板缓冲器,而使可用于图形处理流水线(例如并且在实施方式中,可用于图形处理流水线的早期深度和/或模板测试级)。这接着可以促进“早期”而不是“后期”进行针对后期片段的深度和/或模板测试。这可能对整体性能有好处。
在实施方式中,像如果满足相关条件,则触发相关每片段处理操作一样,测试指令也能够例如并且在实施方式中,根据测试指令已经触发的相关每片段操作的结果,来触发进一步的操作和效果。
因此,在实施方式中,测试指令(如果被执行)可操作以确定片段的覆盖是否为零,并且如果是,则在该点(即,在该测试指令),暂停执行针对所讨论片段的着色器程序。在实施方式中,在实施方式中在已经执行了由测试指令触发的任何alpha到覆盖或alpha测试之后,但在执行任何(潜在)深度和/或模板测试之前,执行覆盖测试。
类似地,在实施方式中,一旦完成了针对所讨论片段的深度/模板测试(如果触发),那么在实施方式中,如果针对该分段的覆盖(例如,覆盖遮罩)在深度/模板测试之后结束为零,那么针对所讨论片段执行片段着色器在实施方式中再次在该点被停止(删去)。这可以根据需要实现,例如,如果片段覆盖达到零,则通过自动丢弃针对所讨论片段的执行线程。
在实施方式中,如果混合模式使得片段总是不透明的,或者alpha混合被启用,并且针对该片段的alpha值指示该片段不透明(即,alpha值大于或等于1.0),那么如果所讨论片段通过深度/模板测试(因为那些较旧的片段将被认为是在不透明片段后面,所以不可见),则该测试指令在执行时也可以(并且在实施方式中也可以)操作以删掉(停止处理)具有相同位置的旧片段。
在实施方式中,使用本申请人的早期英国专利申请GB-A-2511177中描述的机制来实现该操作。
因此,在实施方式中,如果片段通过由测试指令触发的深度/模板测试,则使用与通过由测试指令触发的深度/模板测试的片段有关的信息(以及在实施方式中的位置信息),例如,通过片段着色级,以确定当前处于片段着色级(片段着色器正在运行的)的任何其它片段是否将被通过深度/模板测试的片段透支(overdrawn),并且如果存在任何这样的片段,则那些透支片段的处理(即,它们的片段着色)(在实施方式中选择性地)被停止。
类似地,在实施方式中,如果启用了alpha混合,并且alpha值表示该片段完全透明(即,小于或等于0.0),那么该测试指令在执行时触发针对该片段的深度/模板测试(因为那些测试还需要完成),但因为完全透明的片段不能影响色彩缓冲器,所以一旦完成了深度/模板测试,该测试指令在实施方式中就会删去(停止)针对所讨论片段的片段着色器(丢弃该片段)。
由此,在实施方式中,测试指令(潜在地)触发的每片段操作(或者其中之一)是确定针对该片段的alpha值是否具有一特定的(在实施方式中,选定的)值或多个值(并且在实施方式中,确定该alpha值是否指示该片段完全透明或者完全不透明),并且该测试指令在实施方式中还可操作,以在该片段具有该特定alpha值或多个特定alpha值之一时,触发和/或执行一特定的(在实施方式中,选定的)操作或多个操作。
因此,在实施方式中,该测试指令可操作以检测针对该片段的alpha值的特别情况,并且如果满足针对特别情况的alpha值,则因此触发给定操作或多个给定操作。
在实施方式中,可以由测试指令触发的这些操作中的一个或更多个操作(并且在实施方式中的全部操作)都可被设定为由使用中的测试指令(潜在地)触发。因此,在实施方式中,图形处理流水线可以在使用中配置成,响应于测试指令来执行这些操作中的一个或更多个操作。在实施方式中,每个操作可以独立地启用(或禁用)。
这可以根据需要来配置,例如通过恰当设定的状态信息(例如,状态位)来指示所述操作是否被启用(如果满足针对其触发的条件)。在实施方式中,用于图形处理流水线的驱动器能够启用或禁用这些操作,例如,通过恰当地设定状态信息。
根据上述可以清楚的是,在实施方式中,当执行测试指令时,首先确定针对被处理片段是否已经完成了早期深度和/或模板测试。
如果是这样的话,则在实施方式中确定片段覆盖是否为零。如果片段覆盖确定为零,那么该片段在实施方式中被丢弃(终止执行针对该片段的着色器程序)。如果片段覆盖确定不为零,那着色器执行在实施方式中进行至下一指令。
另一方面,如果针对被处理的片段尚未完成早期深度和/或模板测试,那么确定是否启用了alpha到覆盖,如果是这样的话,则执行alpha到覆盖操作来更新针对该片段的覆盖。接着在实施方式中,确定片段覆盖是否不为零。如果片段覆盖为零,则该片段在实施方式中被丢弃,但如果确定片段覆盖不为零,则在实施方式中,确定着色器程序是否操作以输出深度或模板值。如果是这样,则片段着色器在实施方式中进行至片段着色器程序中的下一指令,但如果着色器不输出深度和/或模板值,则在实施方式中执行深度或模板测试。程序然后前进至该下一指令。
在测试指令不能触发(潜在地)所有上述操作的情况下,那么可以分别根据所指示的状态和/或条件对应地触发测试指令可触发的相关操作。
为易于其操作,测试指令可以(并且在实施方式可以)将其输入作为恰当的输入信息,以允许其以希望的方式操作。
在实施方式中,测试指令将一输入作为针对所讨论片段的覆盖(例如,由着色器在该点处计算的)和alpha值。(在启用多个渲染目标的情况下,测试指令在实施方式中使用针对渲染目标0的alpha值,至少对于任何alpha到覆盖操作。)
在实施方式中,还可以将输入作为(和/或可以使用)针对正在执行的图形处理任务的图形状态(配置)(例如,渲染状态和/或动态GPU(图形处理单元)状态)。
本文所述技术的测试指令可以被包括在要执行的片段着色器程序中的任何合适和希望的点处。然而,本申请人已经认识到,在着色器程序内的特定点处包括该测试指令是有益的,例如,促进测试指令的效果和/或增加能够执行测试指令的可能性。
在实施方式中,测试指令(优先地)尽可能早地包括在着色器程序中(在针对着色器程序的指令序列中)。
然而,本申请人已经认识到,可以有益的是,在(潜在地)执行测试指令之前,完成某些着色器程序操作(如果存在于着色器程序中)。
因此,在实施方式中,在着色器程序中,将测试指令包括在(潜在地)修改片段覆盖的任何(和全部)指令(包括任何“丢弃”指令)之后。换句话说,在实施方式中,将在(潜在地)执行测试指令之前,执行(潜在地)修改片段覆盖的所有指令。
相反的是,如果着色器程序包括将输出深度和/或模板值的指令,则在实施方式中,在着色器程序中,将测试指令包括在输出深度或模板值的指令之前(即,如果着色器输出深度或模板值,则其在实施方式中发生在测试指令之后)。对应地,在实施方式中,着色器程序被设置成使得如果其操作以输出深度和/或模板值,则像其在测试指令之后发生一样,其发生在着色器程序的任何混合输出之前。
类似地,在实施方式中,在着色器程序中,将测试指令包括在生成混合输出的任何指令之前(即,着色器程序的任何混合输出在实施方式中发生在(潜在地)执行测试指令之后)。在实施方式中着色器程序还设置成,使得所有混合输出也发生在着色器程序的任何深度和/或模板输出之后。(然而,混合输出本身可以以任何希望次序发生。)
在实施方式中,在着色器程序中,测试指令被包括在测试指令所涉及的状态(如覆盖、alpha值等)不再由着色器程序改变的点处(并且测试指令接着有效地操作以在着色程序中的那一点处生成针对该状态的相关输出(例如,并且在实施方式中,通过执行使用当时提交的状态的每片段操作或多个操作(例如测试)))。因此,在实施方式中,在着色器程序中,将测试指令包括在已经生成针对片段的alpha值的点之后。
在实施方式中,如果片段着色器程序具有“副作用”(例如,生成除通过渲染器的数据之外的其它数据),那么在实施方式中,在着色器程序中,将测试指令包括在生成该着色器程序生成的任何副作用的指令之后(即,在实施方式中,由着色器生成的任何副作用发生在(潜在地)执行测试指令之前)。在实施方式中,在着色器程序中,将测试指令恰好包括在最后的“副作用”指令之后(若可能的话)。
测试指令可以通过整个图形处理系统的任何合适和希望的组件或级包括在着色器程序中。在实施方式中,测试指令通过针对所讨论着色器的编译器(因此是片段着色器编译器)而包括在着色器程序中。
编译器可以以任何合适和希望的方式将测试指令包括在着色器程序中。例如,其可以考虑着色器程序的每个操作(例如,依次地),并且确定测试指令是可以包括在操作之前还是操作之后(等等,直到着色器程序的所有操作都被考虑为止)。当然,其它布置也是可行的。
本文所述技术还扩展至将测试指令包括在片段着色器程序中以通过图形处理流水线的片段着色器执行的操作。
因此,本文所述技术的第五实施方式包括一种操作图形处理系统的方法,该方法包括以下步骤:
在要通过图形处理流水线的可编程片段着色级执行的片段着色器程序中包括图形程序指令,该图形程序指令在执行时使所述片段着色器确定是否可以针对被处理片段执行每片段操作,并且在确定可以针对被处理片段执行每片段操作时,触发执行针对被处理片段的每片段操作。
本文所述技术的第六实施方式包括一种编译器,该编译器编译程序以生成供图形处理流水线的可编程片段着色级执行的指令,其中,所述编译器被配置成进行如下操作:
在要通过图形处理流水线的可编程片段着色级执行的片段着色器程序中包括图形程序指令,该图形程序指令在执行时使片段着色器确定是否可以针对被处理片段执行每片段操作,并且在确定可以针对被处理片段执行每片段操作时,触发执行针对被处理片段的每片段操作。
如本领域技术人员应当清楚的,本文所述技术的这些方面可以并且在实施方式中包括本文所述技术的任一个或更多个或全部特征。
在实施方式中,仅存在包括在片段着色器程序中的恰当点处的本文所述技术的单个测试指令。然而,若希望的话,也可以在给定片段着色器程序中包括具有本文所述技术形式的多个测试指令。在这种情况下,每个测试指令都可操作以触发不同的每片段操作,如一个测试指令可操作以(潜在地)触发alpha到覆盖或alpha测试操作,另一个(例如,后期)测试指令然后可操作以触发(潜在地)深度和/或模板测试或多个测试。
尽管如上在实施方式中所述,本文所述技术的测试指令(如果被执行)触发执行深度和模板测试,但本申请人已经认识到,其可以是测试指令不能够或者未被配置成触发这些测试的情况,例如,在着色器程序本身生成深度和/或模板值的情况下。
在这种情况下,在实施方式中,像在着色器程序中包括测试指令一样,在着色器程序中,可操作以触发深度和/或模板测试的另一指令被包括在:在测试指令之后的恰当点处(例如,并且在实施方式中,在测试指令之后并且在着色器程序中的、生成深度和/或模板值的指令之后)。该深度/模板测试指令在实施方式中可操作,以在其被执行时触发深度和模板测试,从而生成可以用于确定当前片段是否可以被丢弃的深度和/或模板值,和/或提供用于测试其它片段的深度和模板值。
这在初始测试指令无法触发那些测试时,易于更直接触发“后期”深度和/或模板测试,作为着色器程序的一部分,并且不需要例如等待着色器程序在可以执行那些测试之前完成。
此外,在实施方式中,深度/模板测试指令被包括在着色器程序中的恰当点处,并且在实施方式中可操作以将着色器计算的深度和/或模板值或多个值发送至深度和/或模板测试,并根据深度和/或模板测试的结果,删去针对所讨论片段的着色器或继续渲染片段。
在这种布置中,早期的测试指令将执行除了深度/模板测试之外的、被配置成执行的其它所有各种操作,并且一旦着色器生成的深度和/或模板值可用,另一深度/模板测试指令就接着触发执行那些测试。
此外,这种深度/模板测试指令可以以任何希望和合适的方式包括在着色器程序中。在实施方式中,用于着色器程序的编译器可操作以在其编译着色器程序时,在着色器程序的恰当点处包括深度/模板测试指令。
本文所述技术可以针对要由图形处理流水线执行的任何希望着色器程序加以使用。可以关于要针对给定图形处理操作(任务)执行的一些但非全部的着色器程序加以应用,但在实施方式中,关于要针对给定图形处理操作执行的全部着色器程序来执行。
本文所述技术可以用于:图形处理流水线可以用于生成的所有形式的输出,如用于显示的帧、渲染至纹理输出等。来自图形处理的输出(例如,片段着色数据值)在实施方式中被导出至外部(例如,主)存储器,以供存储和使用,如用于显示的帧缓冲器。
像光栅化器和片段着色器一样,图形处理流水线还可以并且在实施方式中,包含任何其它合适和希望的处理级,图形处理流水线可以包含诸如早期深度(或早期深度和模板)测试器、后期深度(或深度和模板)测试器、混合器、图块(tile)缓冲器(在基于图块的图形处理流水线的情况下)、写出单元等。
在实施方式中,图形处理流水线包括存储在此描述的数据和/或存储用于执行在此描述的处理的软件的一个或更多个存储器和/或存储器装置,和/或与所述一个或更多个存储器和/或存储器装置通信。该图形处理流水线还可以与主机微处理器和/或与用于基于通过图形处理器生成的数据来显示图像的显示器通信。
本文所述技术可应用于任何合适和希望的形式或配置的图形处理器。其特别可应用于基于图块的图形处理器和图形处理系统。由此,在实施方式中,该图形处理系统和图形处理流水线分别是基于图块的系统和流水线。
在实施方式中,本文所述技术的各种功能在生成并输出所渲染片段数据(其例如被写入至用于显示装置的帧缓冲器)的单一图形处理平台上执行。
本文所述技术可以在任何合适的系统中实现,如基于适当配置的微处理器的系统。在实施方式中,本文所述技术在基于计算机和/或微处理器的系统中实现。
本文所述技术的各种功能可以按任何希望和合适方式来执行。例如,本文所述技术的功能可以如所希望地按硬件或软件来实现。因此,例如,除非以其它方式指出,本文所述技术的各种功能性部件、级(stages)和“装置”可以包括:合适的处理器或多个处理器、控制器或多个控制器、功能性单元、电路、处理逻辑、微处理器布置等,其可操作以执行各种功能等,如可以被编程成按希望方式操作的适当专用的硬件部件和/或处理电路和/或可编程硬件部件和/或处理电路。
在此,还应注意到,如本领域技术人员应当清楚,本文所述技术的各种功能等可以在给定处理器上复制和/或并行执行。等同地,若希望的话,各种处理级可以共用处理电路等。
而且,本文所述技术的处理级中的任一个或更多个或全部可以被具体实施为处理级电路,例如,采用一个或更多个固定功能单元(硬件)(处理电路)的形式,和/或采用可编程处理电路(其可以被编程成执行希望操作)的形式。等同地,本文所述技术的处理级和处理级电路中的任一个或更多个可以被设置为针对其它处理级或处理级电路中的任一个或更多个的分离电路部件,和/或这些处理级和处理级电路中的任一个或更多个或全部可以至少部分地由共用处理电路形成。
针对必需执行上述特定功能的任何硬件的主旨,该图形处理系统和流水线可以以其它方式包括该图形处理流水线所包括的常见功能单元等中的任一个或更多个或全部。
本领域技术人员还应清楚,在合适时候,本文所述技术的全部描述实施方式可以(并且在实施方式中)包括在此描述的特征中的任一个或更多个或全部。
根据本文所述技术的方法可以至少部分地利用软件(例如,计算机程序)来实现。由此,可以看到,当从另一些实施方式观看时,本文所述技术提供了:计算机软件,当安装在数据处理器上时该计算机软件具体适于执行本文所述方法;计算机程序部件,该计算机程序部件包括当在数据处理器上运行该程序部件时用于执行本文所述方法的计算机软件代码部分;以及计算机程序,该计算机程序包括当在数据处理系统上运行该程序时适于执行本文所述方法或多个方法的全部步骤的软件代码。该数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。
本文所述技术还扩展至包括这样的软件的计算机软件载体,即,当该软件用于操作图形处理器、渲染器或包括数据处理器的微处理器系统时,使与数据处理器、处理器、渲染器或系统结合地执行本文所述技术的方法的步骤。这种计算机软件载体可以是物理存储介质,如ROM芯片、CD ROM、RAM、闪速存储器、或磁盘,或者可以是信号,如导线传输电子信号、诸如卫星的光学信号或无线电信号等。
还应清楚,并不是本文所述技术的方法的所有步骤都需要通过计算机软件来执行,并由此,根据另一宽泛的实施方式,本文所述技术提供了用于执行本文所述方法的步骤中的至少一个步骤的计算机软件和安装在计算机软件载体上的这种软件。
因此,本文所述技术可以适当地具体实施为供与计算机系统一起使用的计算机程序产品。这种实现可以包括在诸如计算机可读介质(例如,软盘、CD-ROM、ROM、RAM、闪速存储器,或硬盘)的有形非暂时介质上固定的一系列计算机可读指令。其还可以包括可通过有形介质(包括但不限于光学或模拟通信线路),或者利用无线技术(包括但不限于微波、红外线或其它传输技术)无形地,经由调制解调器或其它接口装置传送至计算机系统的一系列计算机可读指令。该系列计算机可读指令具体实施先前在此描述的全部或部分功能。
本领域技术人员应当清楚,这种计算机可读指令可以采用许多编程语言来编写,以供随许多计算机架构或操作系统一起使用。而且,这种指令可以利用当前或将来的任何存储器技术来存储,包括但不限于半导体、磁性或光学,或者利用当前或将来的任何通信技术来传送,包括但不限于光学、红外线或微波。设想的是,这种计算机程序产品可以部署为具有附随打印或电子文档(例如,收缩包装软件)的可去除介质,利用计算机系统预先加载(例如,预先加载在系统ROM或固定盘上),或者通过网络(例如,因特网或万维网)从服务器或电子公告板部署。
下面,对本文所述技术的多个实施方式进行描述。
图3示出了典型计算机图形处理系统。
在主处理器31上执行的诸如游戏这样的应用32,将需要通过关联图形处理单元(图形处理流水线)30来执行的图形处理操作。要做到这一点,该应用将生成API(应用编程接口)调用,其通过运行在主处理器31上的用于图形处理流水线30的驱动器34来解释,以生成针对图形处理器30的恰当命令,从而生成该应用32所需的图形输出。为促进此,响应于来自运行在用于图形输出(例如,用于生成要显示的帧)的主系统31上的应用32的命令,将一组“命令”提供给图形处理器30。
图4示意性地示出了根据本文所述技术操作的图形处理流水线30。
图4示出了与本实施方式的操作相关的图形处理流水线30的主要部件和流水线级。如本领域技术人员应当清楚,可以存在图4中未例示的图形处理流水线的其它部件。在此还应注意到,图4仅是示意性的,而且例如,实际上,所示功能性单元和流水线级可以共用有效硬件电路,即使它们在图4中被示意性地示出为分离级。还应清楚,如图4所示的图形处理流水线的每一个级、部件以及单元等都可以如所希望地实现,并因此例如包括用于执行必需操作和功能的恰当电路和/或处理逻辑等。
图4示意性地示出了从用于输入至光栅化处理的图形图元(多边形)2的组合开始的流水线级。因此,在这一点上,图形数据(顶点数据)已经经历了片段前端操作(fragmentfrontend operation),如变换和照明操作(未示出)。图元设定(primitive set-up)(组合)级2然后响应于提供给图形处理器的命令和顶点数据,设定(组合)要渲染的图元。
如图4所示,图形处理流水线30因而包括多个进一步的级,包括光栅化级3、早期模板测试级21、早期深度测试级22、采用片段着色形式的渲染器级40、以及混合级8。
图形处理流水线30的光栅化级3操作,以将组成渲染输出的图元(例如,要显示的图像)光栅化成用于处理的单独图形片段。要做到这一点,光栅化器3接收用于渲染的图形图元,针对采样点对该图元进行光栅化,并且生成用于渲染该图元的具有恰当位置(表示恰当采用位置)的图形片段。
通过光栅化器生成的片段接着被向前发送至流水线的其余部分以供处理。
早期模板测试级21针对其从光栅化器3接收的片段执行(在恰当的情况下)模板测试,
早期深度测试级22针对其从光栅化器3接收的片段执行(在可能的情况下)深度测试,以查看在该级是否可以丢弃(剔除)任何片段。要做到这一点,其比较从光栅化器3发出的片段(和其相关联)的深度值与已经渲染的片段的深度值(这些深度值被存储在深度(Z)缓冲器中),以确定新的片段是否会被已经渲染的片段遮蔽(或者不遮蔽)。
通过(或则不经历)片段早期Z和模板测试的片段接着被发送至片段着色级40。该片段着色级40针对其接收的片段执行恰当的片段处理操作,以处理该片段来生成恰当的渲染片段数据。
在本实施方式中,片段着色级40采用着色器流水线的形式(可编程片段着色器)。片段着色器40由此是可编程处理级,其针对输入数据值执行着色器程序,生成希望输出数据集,例如供图形流水线的其余部分处理和/或输出。
由片段着色器40执行的片段处理可以包括任何合适和希望的片段着色处理,例如,向片段应用纹理化、雾化以及其它效果,以生成恰当的“经片段着色”的片段数据。
完成片段着色级40的片段接着在混合器9中经受(若需要的话)任何必需混合操作(例如,与其它片段着色)。针对片段必需的任何其它剩余操作(如抖动(dither)等)(未示出)也在该级执行。
最后,(混合的)输出片段数据(值)从它们例如可以被输出至用于显示的帧缓冲器的地方写入至存储器9。(对于基于图块的图形处理流水线的情况来说,输出片段数据值在被写出至主存储器9之前可以首先写入至缓冲器(未示出)。)
将输入写入存储器9根据需要可以包括降频采样该片段数据直至用于输出缓冲器的恰当分辨率(例如,使得生成与输出装置的像素相对应的一批像素数据),
该渲染输出数据可以如本领域所已知的,典型为旨在用于在显示装置(如屏幕或打印机)上显示的输出帧,但例如也可以包括旨在供以后渲染传递中使用的中间数据(还已知为“渲染至纹理”输出)等。
接着,针对下一渲染输出(例如,帧)重复该处理等等。
用于图形处理流水线30的其它布置当然是可行的。
上面描述了图4所示的图形处理流水线的操作的某些特征。下面,对根据本文所述技术的实施方式的、图4所示的图形处理流水线的操作的进一步特征进行描述。
如图4所示,在本实施方式中,片段着色器40可操作以,响应于包括在正在执行的片段着色器程序中的“测试”指令,在合适时候,触发执行针对被处理片段的alpha到覆盖操作41、后期模板测试42、以及后期深度测试43,并接着例如将更新覆盖信息返回至片段着色器40。要做到这一点,测试指令尤其将针对片段和当前图形处理(渲染)状态的当前覆盖和alpha值(以及在恰当情况下,深度和模板值)作为其输入,并且尤其可以将针对片段的更新覆盖信息提供为输出。
这允许在着色器执行期间触发并执行(潜在地)alpha到覆盖以及后期模板和深度测试操作,而不必例如在执行那些操作之前等待直到完成着色器执行为止。
图5示意性地并且更详细地示出了在执行测试指令时(步骤50),图4所示的图形处理流水线30的操作。(在执行用于处理片段的着色器程序时,片段着色器40依次执行着色器程序中的每个指令,但在其到达测试指令时,将按照下面描述的方式操作。)
如图5所示,当执行该测试指令时,首先确定针对被处理的片段是否已经完成了早期深度/模板测试(步骤51)。如果针对所讨论片段已经完成早期深度/模板测试,则确定针对该片段的覆盖是否为零(步骤52)。如果片段覆盖被确定为零,则丢弃该片段(步骤59)(即,在此时暂停针对该片段的片段着色器执行)。另一方面,如果片段覆盖被确定不为零(即,仍存在该片段要被用于渲染的覆盖采样位置),则片段着色器执行进行至下一指令(步骤58)。
如果针对该片段尚未完成早期深度/模板测试,则确定是否启用了alpha到覆盖操作(在执行图形处理任务的状态下)(步骤53)。如果启用了alpha到覆盖操作,则测试指令触发alpha到覆盖操作,并且根据alpha值来更新针对该片段的覆盖(步骤54)。
在本实施方式中,该alpha到覆盖操作借助于片段着色器执行核心中的专用硬件来执行。针对其的其它布置也是可行的。(alpha到覆盖操作基于针对该片段的alpha值,将按比例去除针对该片段的覆盖(因此,例如,如果alpha值指示该片段至少部分透明,则将从该片段中去除采样位置)。)
一旦覆盖已经更新(或者如果没有启用alpha到覆盖操作),那么确定片段覆盖是否为零(步骤55)。如果片段覆盖确定为零,则丢弃该片段(步骤59)(即,在此时暂停针对该片段的片段着色器执行)。
另一方面,如果片段覆盖被确定不为零(即,仍存在该片段要用于渲染的覆盖采样位置),则确定着色器程序是否操作以输出深度或模板值(步骤56)。(此外,这可以例如根据关于所讨论图形处理任务的状态来确定)。
如果确定着色器程序要输出深度或模板值,则该执行进行至程序的下一指令(步骤58)。
如果着色器程序不可操作以输出深度或模板值(即,使得最终深度和模板值在这一点上可用),则测试指令触发执行针对所讨论片段的深度和/或模板测试(在恰当时候)(步骤57)。
在本实施方式中,利用图形处理流水线的现有深度和模板测试级来执行深度和模板测试(由此,测试指令触发那些级的操作,来执行针对该片段的深度和模板测试)。此外,若需要,其它布置也是可行的。
如果片段通过深度和模板测试,那么着色器执行进行至着色器程序中的下一指令(步骤58)。否则,该片段被丢弃(针对该片段的着色器执行被停止)(即,如果针对该片段的覆盖在深度/模板测试之后结束为零,那么针对所讨论片段的片段着色器执行在该点被停止(删去))。
在本实施方式中,用于执行上述操作的测试指令通过用于图形处理流水线的着色器编译器而被包括在图形处理流水线的片段着色器执行级40的片段着色器程序(指令流)中。
例如可以在包括图形处理流水线30的数据处理系统的主机处理器31上运行该编译器。(该编译器例如可以是驱动器4的一部分,并且例如存在使该编译器运行的专用API调用。该编译器执行由此可以作为响应于通过一应用生成的API调用,而通过驱动器进行的图形处理准备的一部分)。然而,其它布置也是可行的,如和编译代码运行于同一处理器上的编译器,或者运行于分离处理器上,如该程序被在分离系统上预先编译,并且按编译格式部署。
图6示意性地示出了编译器的操作的实施方式,以将测试指令包括在要由图形处理流水线的片段着色器执行的着色器程序中。
着色器编译器将接收采用要编译的高级编程语言的着色器程序,并且如图6所示,首先解析着色器程序源代码,然后优化着色器程序(例如,根据其正常的编译器操作)(步骤60和61)。
然后,编译器将测试指令插入到被解析程序中(步骤62)。
然后,编译器执行一序列步骤,以确定针对所解析的着色器程序中的测试指令的希望位置。
因此,在开始着色器程序时开始(步骤63),编译器将分析第一着色器操作(步骤64),并确定该着色器操作是否影响测试指令(步骤65)(例如,将对测试指令将使用的值产生影响或否)。
如果确定着色器操作会影响测试指令,那么在可能的情况下,该操作被移动至在测试指令之前执行(步骤66)。相反的是,如果确定所讨论的着色器操作不会影响测试指令,那么在可能的情况下,该操作被移动至在测试指令之后执行(步骤67)。
这然后针对着色器程序执行的所有操作重复(步骤68)。
在本实施方式中,测试指令尽可能早地包括在着色器程序中(在针对着色器程序的指令序列中),但在(潜在地)修改片段覆盖或产生任何副作用的任何(和所有)指令(包括任何“丢弃”指令)的之后。
在着色器程序中,还将测试指令包括在输出深度或模板值的任何指令之前(即,如果着色器输出深度或模板值,则其发生在测试指令之后),和生成混合输出的任何指令之前(即,着色器程序的任何混合输出发生在(潜在地)执行测试指令之后)。
当然,其它布置也是可行的。
那么这样做的效果是,测试指令应尽可能早在着色器程序中执行,但在可能影响测试指令的执行(和/或执行能力)的任何着色器程序操作之后。
一旦分析了所有着色器程序指令,那么可以完成着色器程序的编译(步骤69),并将所编译的着色器程序输出至图形处理流水线,以供执行(步骤70)。
这对于要针对给定希望图形处理输出执行的着色器程序中的一些以及在一个实施方式针对其全部来说是这样做的。
图7示出了包括本实施方式的测试指令的一些示例性片段着色器程序。
图7所示的第一着色器程序80是相对简单的程序,因此在该程序中,将测试指令81包括在第一混合指令82之前。测试指令81例如可操作以确定在执行混合指令82(以及该混合指令之后的任何指令83)之前可以丢弃所讨论的片段。
图7所示的第二程序84包括丢弃指令85。在这种情况下,将测试指令81置于丢弃指令85之后。
图7所示的第三程序86例示了测试指令81不能执行深度和模板测试的情况,例如因为着色器程序本身操作以生成针对要处理的片段的深度和模板值。
在这种情况下,在着色器程序中包括进一步的深度/模板测试指令87,以在测试指令81之后触发深度和模板测试。深度/模板测试指令87操作,以向图形处理流水线的深度和/或模板测试级发送出片段着色器计算的深度和/或模板值,然后其将执行相关深度和/或模板测试,并返回结果(并因此“删去”该片段或继续其处理)。
若希望的话,可以对上述实施方式进行各种改变、修改以及变化。
例如,测试指令的执行可以取决于针对所讨论的片段的深度和/或模板“年龄检查”,即,该片段是否已经完成早期的深度/模板测试,或者是在其位置的尚未完成深度/模具测试的最老片段。
像(潜在地)更新信息一样,针对所讨论的片段,测试指令触发的操作或多个操作还可以用于更新用于图形处理操作的其它信息(例如,并且在实施方式中,可能与其它片段的处理相关)。因此,例如,如果测试指令触发执行深度测试,那么针对所讨论的片段的测试的结果在实施方式中被用于更新针对于所讨论的图形处理任务存储的深度信息(例如,深度缓冲器),例如并且在实施方式中,使得针对所讨论的片段的深度值相反可用于其它(例如,后期)要测试的片段。
测试指令还可以或代替地操作,以确定针对被处理的片段的alpha值是否具有一特定值或多个特定值,并且在alpha值具有一特定值或多个特定值的情况下,触发和/或执行特定操作。
例如,如果混合模式使得片段总是不透明的,或者alpha混合被启用,并且针对该片段的alpha值指示该片段不透明(即,alpha值大于或等于1.0),那么如果所讨论的片段通过深度/模板测试(因为那些较旧的片段将被认为是在一不透明片段后面,所以不可见),则该测试指令在执行时也可以操作,以触发删掉(停止处理)具有相同位置的旧片段。(该操作在实施方式中,利用本申请人的早期英国专利申请GB-A-2511177中描述的机制来实现。)
类似地,如果启用了alpha混合,并且alpha值表示该片段完全透明(即,小于或等于0.0),那么该测试指令在执行时,触发针对该片段的深度/模板测试(因为那些测试还需要完成),但因为完全透明的片段不能影响色彩缓冲器,所以一旦完成了深度/模板测试,那么还删去(停止)针对所讨论的片段的片段着色器(丢弃该片段)。
如从上面可以看出,在其实施方式中,本文所述技术至少提供了针对包括片段着色级的图形处理流水线的改进操作。
具体来说,至少在其实施方式中,本文所述技术可以促进在片段着色器程序执行完成之前对片段的最终覆盖的早期确定,从而易于更早停止片段着色器程序。
其还可以允许在着色器程序执行中更早地执行后期深度/模板测试,并易于更简单地触发后期深度/模板测试。
这至少在本文所述技术的实施方式中,通过在要执行的片段着色器程序中包括将触发片段着色器执行一个或多个每片段操作的指令来实现。
已经出于例示和描述的目的呈现了前述详细描述。不是旨在排它或将本文所述技术限制成所公开的精确形式。鉴于上述教导,许多修改和变化都是可行的。选择所述实施方式,以便最佳地说明本文所述技术的原理及其实践应用,由此使得本领域其它技术人员能够在各种实施方式中最佳地利用本文所述技术,并且具有如适于预期特定用途的各种修改例。本文所述技术的范围旨在通过所附的权利要求书来限定。

Claims (25)

1.一种操作图形处理系统的方法,该图形处理系统包括图形处理流水线,该图形处理流水线包括可编程片段着色级,用于针对片段执行片段着色处理,以生成针对该片段表示的采样点的渲染片段数据,该方法包括以下步骤:
在要通过所述图形处理流水线的所述可编程片段着色级执行的片段着色器程序中包括一组图形程序指令,所述一组图形程序指令在被执行时执行所述片段着色处理的片段着色操作,其中,所述一组图形程序指令包括一图形程序指令,该图形程序指令在所述片段着色器程序的执行期间被执行时会使所述可编程片段着色级确定是否能够针对被处理的片段执行每片段操作,并且在确定能够针对被处理的片段执行所述每片段操作时,触发执行针对被处理的片段的所述每片段操作而同时进行所述片段着色处理;以及
在执行所述片段着色器程序以处理片段时,所述图形处理流水线的所述可编程片段着色级响应于所述指令进行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;以及
当确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的所述每片段操作,由此生成针对正在被处理的片段的所述每片段操作的结果而同时进行所述片段着色处理。
2.一种操作图形处理流水线的可编程片段着色级的方法,该可编程片段着色级执行片段着色器程序,以执行片段着色处理,该片段着色处理包括针对由所述图形处理流水线的光栅化器生成的图形片段执行的片段着色操作;
该方法包括以下步骤:
在执行片段着色器程序以针对片段执行所述片段着色处理时,所述图形处理流水线的所述可编程片段着色级进行如下操作:
响应于被包括在所述片段着色器程序中的一组图形程序指令中的一图形程序指令,进行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;以及
当确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的所述每片段操作,由此生成针对正在被处理的片段的所述每片段操作的结果而同时进行所述片段着色处理。
3.根据权利要求1或2所述的方法,其中,被包括在所述片段着色器程序中的所述指令所触发的所述每片段操作是:会影响和/或确定针对所述片段的覆盖的操作。
4.根据权利要求1或2所述的方法,其中,被包括在所述片段着色器程序中的所述指令所触发的所述每片段操作是alpha到覆盖和/或alpha测试操作。
5.根据权利要求1或2所述的方法,其中,被包括在所述片段着色器程序中的所述指令所触发的所述每片段操作是深度和/或模板测试。
6.根据权利要求1或2所述的方法,其中,所述指令所触发的每片段操作是确定针对所述片段的alpha值是否具有一特定值或多个特定值,并且所述指令还能够操作以在所述片段具有特定alpha值或多个特定alpha值之一时,触发执行一特定操作或多个特定操作。
7.根据权利要求1或2所述的方法,其中,所述指令能够操作以确定所述片段的覆盖是否为零,并且当所述片段的覆盖为0时,暂停执行针对所述片段的着色器程序。
8.根据权利要求1或2所述的方法,其中,所述片段着色级基于以下各项中的一个或更多个,来确定是否应当针对所述片段执行所述指令所涉及的操作:
当要执行所述指令时,是否已经完成针对所述片段的深度和/或模板测试;
是否启用针对所述片段的alpha到覆盖或alpha测试;以及
所述片段着色器程序是否能够操作以输出深度和/或模板值。
9.一种操作图形处理系统的方法,该方法包括以下步骤:
在要通过图形处理流水线的可编程片段着色级执行的片段着色器程序中包括一组图形程序指令,所述一组图形程序指令在被执行时执行片段着色处理的片段着色操作以生成针对该片段表示的采样点的渲染片段数据,其中,所述一组图形程序指令包括一图形程序指令,该图形程序指令在所述片段着色器程序的执行期间被执行时会使所述可编程片段着色级确定是否能够针对被处理的片段执行每片段操作,并且在确定能够针对被处理的片段执行所述每片段操作时,触发执行针对被处理的片段的所述每片段操作而同时进行所述片段着色处理。
10.根据权利要求1、2或9所述的方法,所述方法包括以下步骤:
在所述着色器程序中的、影响片段覆盖的任何指令之后,在所述着色器程序中包括所述指令。
11.根据权利要求1、2或9所述的方法,所述方法包括以下步骤:
在输出深度或模板值的任何指令之前,在所述着色器程序中包括所述指令。
12.根据权利要求1、2或9所述的方法,其中:
所述一组图形程序指令包括另一指令,该另一指令在所述着色器程序中在触发所述每片段操作的所述指令之后,能够操作以触发执行针对所述片段的深度测试和/或模板测试。
13.一种图形处理系统,该图形处理系统包括:
图形处理流水线,该图形处理流水线包括:
光栅化器,该光栅化器对输入图元进行光栅化,以生成要处理的图形片段,每一个图形片段都具有与该每一个图形片段相关联的一个或更多个采样点;以及
可编程片段着色级,该可编程片段着色级执行片段着色器程序,以执行片段着色处理,该片段着色处理包括针对由所述光栅化器生成的图形片段执行的片段着色操作;
所述图形处理系统还包括:
处理电路,该处理电路被配置成,在要通过所述图形处理流水线的所述可编程片段着色级执行的片段着色器程序中包括一组图形程序指令,所述一组图形程序指令在被执行时执行所述片段着色处理的片段着色操作,其中,所述一组图形程序指令包括一图形程序指令,该图形程序指令在所述片段着色器程序的执行期间被执行时会使所述可编程片段着色级确定是否能够针对被处理的片段执行每片段操作,并且在确定能够针对被处理的片段执行所述每片段操作时,触发执行针对被处理的片段的所述每片段操作而同时进行所述片段着色处理;并且其中:
所述图形处理流水线的所述可编程片段着色级被配置成,在执行片段着色器程序以针对片段执行所述片段着色处理时,响应于所述指令进行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;以及
当确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的所述每片段操作,由此生成针对正在被处理的片段的所述每片段操作的结果而同时进行所述片段着色处理。
14.一种用于图形处理流水线的可编程片段着色级,该可编程片段着色级包括:
处理电路,该处理电路执行片段着色器程序,以执行片段着色处理,该片段着色处理包括针对由光栅化器生成的图形片段执行的片段着色操作;并且
其中,所述可编程片段着色级被配置成,在执行片段着色器程序以针对片段执行所述片段着色处理时,进行如下操作:
响应于被包括在片段着色器程序中一组图形程序指令中的一图形程序指令进行如下操作:
确定是否能够针对正在被处理的片段执行每片段操作;并且
当确定能够针对正在被处理的片段执行每片段操作时,触发执行针对正在被处理的片段的所述每片段操作,由此生成针对正在被处理的片段的所述每片段操作的结果而同时进行所述片段着色处理。
15.根据权利要求13所述的系统或者根据权利要求14所述的级,其中,被包括在所述片段着色器程序中的所述指令所触发的所述每片段操作是会影响和/或确定针对所述片段的覆盖的操作。
16.根据权利要求13所述的系统或者根据权利要求14所述的级,其中,被包括在所述片段着色器程序中的所述指令所触发的所述每片段操作是alpha到覆盖和/或alpha测试操作。
17.根据权利要求13所述的系统或者根据权利要求14所述的级,其中,被包括在所述片段着色器程序中的所述指令所触发的所述每片段操作是深度和/或模板测试。
18.根据权利要求13所述的系统或者根据权利要求14所述的级,其中,所述指令所触发的所述每片段操作是确定针对所述片段的alpha值是否具有一特定值或多个特定值,并且所述指令还能够操作以在所述片段具有特定alpha值或多个特定alpha值之一时,触发执行一特定操作或多个特定操作。
19.根据权利要求13所述的系统或者根据权利要求14所述的级,其中,所述片段着色级响应于所述指令而触发确定所述片段的覆盖是否为零,并且当所述片段的覆盖被确定为0时,停止执行针对所述片段的所述着色器程序。
20.根据权利要求13所述的系统或者根据权利要求14所述的级,其中,所述片段着色级基于以下各项中的一个或更多个,来确定是否应当针对所述片段执行所述指令所涉及的操作:
当要执行所述指令时,是否已经完成针对所述片段的深度和/或模板测试;
是否针对所述片段启用alpha到覆盖或alpha测试;以及
所述片段着色器程序是否能够操作以输出深度和/或模板值。
21.一种编译器,该编译器编译程序,以生成指令,该指令由图形处理流水线的可编程片段着色级执行,用于针对片段执行片段着色处理,以生成针对该片段表示的采样点的渲染片段数据,其中,所述编译器被配置成进行如下操作:
在要通过图形处理流水线的可编程片段着色级执行的片段着色器程序中包括一组图形程序指令,所述一组图形程序指令在被执行时执行所述片段着色处理的片段着色操作,其中,所述一组图形程序指令包括一图形程序指令,该图形程序指令在所述片段着色器程序的执行期间被执行时会使所述可编程片段着色级确定是否能够针对被处理的片段执行每片段操作,并且在确定能够针对被处理的片段执行所述每片段操作时,触发执行针对被处理的片段的所述每片段操作而同时进行所述片段着色处理。
22.根据权利要求13所述的系统,或者根据权利要求14所述的级,或者根据权利要求21所述的编译器,其中,在所述着色器程序中的、影响片段覆盖的任何指令之后,在所述着色器程序中包括所述指令。
23.根据权利要求13所述的系统,或者根据权利要求14所述的级,或者根据权利要求21所述的编译器,其中,在输出深度或模板值的任何指令之前,在所述着色器程序中包括所述指令。
24.根据权利要求13所述的系统,或者根据权利要求14所述的级,或者根据权利要求21所述的编译器,其中,所述一组图形程序指令进行如下操作:
包括另一指令,该另一指令在所述着色器程序中在触发所述每片段操作的所述指令之后,能够操作以触发执行针对所述片段的深度测试和/或模板测试。
25.一种包括计算机程序的计算机可读介质,该计算机程序包括计算机软件代码,当该程序在数据处理器上运行时,该计算机软件代码用于执行根据权利要求1至12中的任一项所述的方法。
CN201680021229.0A 2015-04-08 2016-04-06 图形处理系统及其操作方法 Active CN107438865B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1505951.2 2015-04-08
GB1505951.2A GB2537137B (en) 2015-04-08 2015-04-08 Graphics processing systems
PCT/GB2016/050962 WO2016162669A1 (en) 2015-04-08 2016-04-06 Graphics processing systems

Publications (2)

Publication Number Publication Date
CN107438865A CN107438865A (zh) 2017-12-05
CN107438865B true CN107438865B (zh) 2021-09-24

Family

ID=53190308

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680021229.0A Active CN107438865B (zh) 2015-04-08 2016-04-06 图形处理系统及其操作方法

Country Status (8)

Country Link
US (1) US10832464B2 (zh)
EP (1) EP3281177B1 (zh)
JP (1) JP7038548B2 (zh)
KR (1) KR102636250B1 (zh)
CN (1) CN107438865B (zh)
GB (1) GB2537137B (zh)
TW (1) TWI701636B (zh)
WO (1) WO2016162669A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2537137B (en) * 2015-04-08 2021-02-17 Advanced Risc Mach Ltd Graphics processing systems
US10540808B2 (en) * 2016-09-16 2020-01-21 Intel Corporation Hierarchical Z-culling (HiZ) optimization for texture-dependent discard operations
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
US10417815B2 (en) * 2017-01-27 2019-09-17 Advanced Micro Devices, Inc. Out of order pixel shader exports
US10319138B2 (en) * 2017-04-01 2019-06-11 Intel Corporation Graphics with early stencil test
US10311016B2 (en) * 2017-05-30 2019-06-04 Arm Limited Hidden surface removal in graphics processing systems
GB2571979B8 (en) * 2018-03-15 2023-07-12 Advanced Risc Mach Ltd Graphics processing
US10643369B2 (en) * 2018-05-30 2020-05-05 Advanced Micro Devices, Inc. Compiler-assisted techniques for memory use reduction in graphics pipeline
US11055904B2 (en) 2019-08-27 2021-07-06 Arm Limited Optimizing depth testing in graphics processing systems that perform early and late depth testing
GB2606386A (en) * 2021-05-06 2022-11-09 Advanced Risc Mach Ltd Graphics processing

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6118452A (en) * 1997-08-05 2000-09-12 Hewlett-Packard Company Fragment visibility pretest system and methodology for improved performance of a graphics system
US7184040B1 (en) * 2003-11-21 2007-02-27 Nvidia Corporation Early stencil test rejection
US7256796B1 (en) * 2004-08-03 2007-08-14 Nvidia Corporation Per-fragment control for writing an output buffer
CN101156176A (zh) 2005-10-25 2008-04-02 三菱电机株式会社 图像处理装置
US8207975B1 (en) * 2006-05-08 2012-06-26 Nvidia Corporation Graphics rendering pipeline that supports early-Z and late-Z virtual machines
US20070268289A1 (en) * 2006-05-16 2007-11-22 Chun Yu Graphics system with dynamic reposition of depth engine
US9076265B2 (en) * 2006-06-16 2015-07-07 Ati Technologies Ulc System and method for performing depth testing at top and bottom of graphics pipeline
US20080012874A1 (en) * 2006-07-14 2008-01-17 Spangler Steven J Dynamic selection of high-performance pixel shader code based on check of restrictions
US8736624B1 (en) * 2007-08-15 2014-05-27 Nvidia Corporation Conditional execution flag in graphics applications
US9697641B2 (en) 2009-10-15 2017-07-04 Nvidia Corporation Alpha-to-coverage using virtual samples
US9390539B2 (en) * 2009-11-04 2016-07-12 Intel Corporation Performing parallel shading operations
KR101719485B1 (ko) * 2010-09-20 2017-03-27 삼성전자주식회사 그래픽 처리 유닛에서의 사전 픽셀 제거를 위한 장치 및 방법
GB2497302B (en) * 2011-12-05 2017-04-12 Advanced Risc Mach Ltd Methods of and apparatus for processing computer graphics
US9159156B2 (en) * 2012-05-14 2015-10-13 Nvidia Corporation Cull streams for fine-grained rendering predication
US9165399B2 (en) * 2012-11-01 2015-10-20 Nvidia Corporation System, method, and computer program product for inputting modified coverage data into a pixel shader
US9741154B2 (en) * 2012-11-21 2017-08-22 Intel Corporation Recording the results of visibility tests at the input geometry object granularity
GB2514618B (en) 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US9846959B2 (en) * 2014-07-03 2017-12-19 Mediatek Inc. Apparatus and method for controlling early depth processing and post depth processing
US9978171B2 (en) * 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US9852539B2 (en) * 2015-02-26 2017-12-26 Qualcomm Incorporated Single pass surface splatting
GB2537137B (en) * 2015-04-08 2021-02-17 Advanced Risc Mach Ltd Graphics processing systems

Also Published As

Publication number Publication date
GB2537137A (en) 2016-10-12
KR20170134498A (ko) 2017-12-06
US20180108167A1 (en) 2018-04-19
GB201505951D0 (en) 2015-05-20
JP7038548B2 (ja) 2022-03-18
CN107438865A (zh) 2017-12-05
JP2018514034A (ja) 2018-05-31
KR102636250B1 (ko) 2024-02-16
TW201702993A (zh) 2017-01-16
EP3281177B1 (en) 2019-10-30
WO2016162669A1 (en) 2016-10-13
TWI701636B (zh) 2020-08-11
EP3281177A1 (en) 2018-02-14
US10832464B2 (en) 2020-11-10
GB2537137B (en) 2021-02-17

Similar Documents

Publication Publication Date Title
CN107438865B (zh) 图形处理系统及其操作方法
CN105321199B (zh) 图形处理流水线及其操作方法与介质
US10311016B2 (en) Hidden surface removal in graphics processing systems
US9214006B2 (en) Hidden surface removal in graphics processing systems
US11055904B2 (en) Optimizing depth testing in graphics processing systems that perform early and late depth testing
US9153070B2 (en) Hidden surface removal in graphics processing systems
US9558585B2 (en) Hidden surface removal in graphics processing systems
US10043306B2 (en) Using depth data in a graphics processing system
US9552665B2 (en) Hidden surface removal in graphics processing systems
US9536333B2 (en) Method and apparatus for improved processing of graphics primitives
US10013790B2 (en) Executing conditional tasks in a graphics processing pipeline
GB2511177A (en) Hidden surface removal in graphics processing systems
US11972503B2 (en) Graphics processing
CN118052691A (zh) 图形处理器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant