脚本环境中内容的并行化定义和显示的制作方法

文档序号:6365497阅读:131来源:国知局
专利名称:脚本环境中内容的并行化定义和显示的制作方法
技术领域
本公开总体上涉及图形接口,并且更具体地,涉及图形应用编程接口(API)。
背景技术
传统上,使用客户端-服务器架构来管理中央处理单元(CPU)与附接的图形处理单元(GPU)之间的接口。在客户端上执行的动作被转换成在GPU服务器上的请求。因此, 服务器请求可能使得信息返回 客户端。针对此类请求,客户端中的同步API必须阻止进一步的请求,直到可从服务器获得结果。反过来,服务器也要花费大量空闲时间来等待后续的客户端动作。

发明内容
本公开描述了便于脚本环境中内容的并行化定义和显示的技术和结构。在一个实施方式中,可以设定图形状态。可以将与设定的图形状态对应的任务提交给GPU。在无需等待对由GPU成功完成任务的指示的情况下,可以设定另一图形状态。在一个实施方式中,脚本环境可以提供单线程编程模型。在提交任务之前,可以对设定的图形状态进行验证。如果图形状态验证失败,则可以跳过该任务,并且可以读取另一设定的图形状态。如果图形状态通过验证,则可以将该任务和图形状态提交给GPU,以执行与图形状态对应的绘制(draw) 任务。在一个实施方式中,可以不检验或者报告错误。类似地,在一个实施方式中,可以不报告验证失败;作为替代,在此类实施方式中,可以跳过与验证失败的图形状态相关联的绘制任务。在一个实施方式中,可以并行执行设定图形状态、验证图形状态和/或执行绘制任务。因此,可以在完成绘制任务之前设定后续的图形状态。可以在缓冲器中设定图形状态,并且可以从相同缓冲器读取图形状态,例如用于验证并传送给GPU。缓冲器可以允许同时进行读取和写入。在一个实施方式中,可以选择调试模式,其中可以串行地设定图形状态、可以执行对应的绘制任务并且可以执行错误检验和报告。因此,调试模式可以允许对内容的串行和顺序的定义及显示。


图I是根据某些实施方式的对内容的并行化定义和显示的流程图。图2是根据某些实施方式的调试模式的流程图。图3是根据某些实施方式的对内容的并行化定义和显示的框图。图4是根据某些实施方式的对内容的并行化定义和显示的框图。图5图示了可以在实施方式中使用的示例计算机系统。尽管在此通过示例的方式针对若干实施方式和说明性附图描述了本公开,但本领域技术人员将认识到,本公开并不限于所描述的实施方式或附图。应理解到,附图及其详细描述并不旨在于将本公开限制为所公开的特定形式,而相反,旨在于涵盖落入本公开的精神和范围内的所有修改、等同方案和备选方案。在此使用的标题仅用于组织性目的,并不意味着用来限制本描述的范围。如在整个本申请中所使用的,用语“可以”是在许可意义(即,具有可能的含义)上而不是强制性意义(即,必须的含义)上使用的。类似地,用语“包括”、“包含”和“含”是指包括但不限于。
具体实施例方式在以下详细描述中,阐述了大量特定细节以便提供对请求保护的主题的透彻理解。然而,本领域技术人员将理解的是,请求保护的主题可以在没有这些特定细节的情况下实施。在其它情形中,没有详细描述普通技术人员所已知的方法、装置或系统,以免混淆请求保护的主题。以下详细描述的某些部分是在对存储于专业装置或专用计算设备或平台的存储器内的二进制数字信号的操作的算法或符号表示的方面呈现的。在该具体说明的上下文中,术语专业装置等包括一旦被编程便根据来自程序软件的指令执行特定功能的通用计算 机。算法描述或符号表示是信号处理或相关领域的普通技术人员用来向本领域其他技术人员表达它们工作实质的技术的示例。在此,一般而言,算法被认为是带来期望结果的自洽(self-consistent)序列的操作或类似的信号处理。在本文上下文中,操作或处理涉及物理量的物理操控。通常,尽管不是必需的,但此类量可以采取能够被存储、传送、组合、比较或以其他方式操纵的电或磁信号的形式。已经证明,有时原则上出于通用的原因,将此类信号指代为比特、数据、值、元素、符号、字符、项、数目、数字等是方便的。然而,应理解的是,所有这些或类似项将与适当的物理量相关联并且仅仅是方便的标记。除非另外特别陈述,否则如从以下讨论中容易理解,在整个本说明书中,利用诸如“处理”、“运算”、“计算”、“确定”等的术语的讨论指代诸如专用计算机或类似的专用电子计算设备之类的专业装置的动作或进程。因此,在本说明书的上下文中,专用计算机或类似的专用电子计算设备能够操控或传输专用计算机或类似的专用电子计算设备的存储器、寄存器或其它信息存储设备、传输设备或显示设备内的通常表示为物理电或磁量的信号。“第一”、“第二”等。如在此使用的,这些术语用作对它们之后的名词的标记,并不暗示任何类型的排序(例如,空间上、时间上、逻辑上等)。例如,在图形API设定图形状态中,术语“第一”和“第二”图形状态可以用来指代任何两个图形状态。换言之,“第一”和“第二”图形状态并不限于逻辑上的处理元素0和I。“基于”。如在此所使用的,该术语用来描述影响确定的一个或多个因素。该术语并不排除可以影响确定的附加因素。也就是说,确定可以单独地基于那些因素或者至少部分地基于那些因素。考虑用语“基于B确定A”。尽管B可以是影响对A的确定的因素,但这种用语并不排除A还基于C来确定。在其它情形中,A可以单独地基于B来确定。在计算设备上执行的数字图像编辑应用可以用来操控、增强、传输、创建和渲染诸如向量图形、3D图形和视频的图像、图形和视频。根据在此描述的各种实施方式,数字图像编辑应用可以用来渲染、修改和编辑此类对象,并且可以使用诸如OpenGL、DirectX或Direct3D 之类的 API。描述用于在脚本环境中并行化定义和显示诸如3D内容之类的内容的方法和装置的各种实施方式。某些实施方式可以包括用于并行化定义和显示内容的装置。例如,状态设定模块可以接收用户输入并在状态块中设定图形状态。绘制模块可以验证设定的图形状态并将图形状态提供给GPU。在某些实施方式中,状态设定模块和绘制模块可以通过存储在计算机可读存储介质中并可由计算装置的一个或多个处理器(例如,一个或多个CPU或 GPU)执行的程序指令来实现。计算机可读存储介质可以存储可由一个或多个处理器执行以使得计算装置执行如在此所描述的对内容的并行化定义和显示的程序指令。状态设定模块和绘制模块的其它实施方式可以至少部分地通过存储在例如非易失性存储器中的固件和/ 或硬件电路来实现。现在转到图1,其示出了用于并行化定义和显示内容的一个实施方式。尽管为易于理解按照特定顺序示出了这些块,但可以使用其它顺序。在某些实施方式中,图I的方法可以包括与所示出的相比附加(或更少)的块。图I被图示为可以同时执行的并行处理。图 I中的左方框,块102-106,可以对应于脚本环境的脚本执行部分(脚本线程)。图I中的右方框,块108-114,可以对应于脚本环境的工作线程。为易于理解将这两个路径描述为并行路径。这两个路径可以同时发生,顺序发生,或者可以有时同时发生并且有时顺序发生。两个路径展示了示例排序,在某些实施方式中,可以按照不同的排序进行。在102处,可以设定图形状态。图形状态可以是对诸如3D内容之类的内容的显示的定义。例如,在3D图形API中,可以将图形状态设定为SetRenderToTexture O。用于设定图形状态的命令可以来自脚本语言(例如,ActionScript 3, JavaScript, Microsoft. NET脚本语言等),该脚本语言可以提供单线程编程模型。其它示例图形状态可以包括 setProgramO、setProgramConstantsFromVector O、setProgramConstantsfromMatrix O、 setVertexBufferAt ()> setBlendFactorsO、setColorMaskO、setDepthTestO、 setTextureAt O、Set RenderToTexture ()、SetRenderToBackBuffer () > setCullingO、 setStencilActions ()、setStencilReferenceValue () > setScissorRectangle ()等。在一个实施方式中,调用设定状态的功能可以执行对图形状态块的修改(诸如写入)并返回,从而使得可以设定另一图形状态(或者从而使得可以执行其他脚本任务)。图形状态块可以利用诸如循环缓冲器或者环形缓冲器实现缓冲反转。多个状态块的环形缓冲器可以允许用于设定状态的只写模式和用于读取状态的只读,由此防止同时访问。在一个实施方式中,图形状态块可以被实施为64环形缓冲器。在各种实现中,缓冲器的尺寸可以基于设置新状态时脚本的速度比对在使用该状态时GPU的速度。设定图形状态可以包括对图形状态块缓冲器的块/单元之一进行写入。在各种实施方式中,图形状态块可以驻留在中央处理单元 (CPU)系统存储器中,从而使得可以在CPU系统存储器中高速缓存状态变化。通过这样做, 设定图形状态可以不需要GPU访问。在一个实施方式中,图形状态可以在调试模式中设定。 在调试模式中,可以通过脚本线程直接在GPU中设定图形状态。在一个实施方式中,在设定图形状态之后,在104处可以确定是否将准备设定另一图形状态。如果将准备设定另一图形状态,则在102处可以设定该图形状态,无需等待来自GPU的任何结果(即,无需等待对成功完成与设定的图形状态对应的任务的指示)。设定附加的图形状态可以包括修改图形状态块。例如,在使用环形缓冲器的实施方式中,脚本线程可以修改环形缓冲器的为空或者已经被读取的单元,如在106中所描述的那样。结果,在其中已经将两个图形状态写入到环形缓冲器并且任一个都没有被读取的简单示例中,两个图形状态可以在环形缓冲器的不同单元中并存。在一个实施方式中,脚本可以继续,而无需等待GPU结果,并且允许设定另一图形状态。在状态块或环形缓冲器中设定图形状态对于脚本语言可以是透明的。如果没有其他图形状态准备被设定,则在106处,脚本线程可以执行其他脚本任务。在106处,脚本线程可以执行其他脚本。例如,可以发生针对API的其他任务或处理以及其它非图形渲染任务。在一个实施方式中,当在102处设定图形状态之后,脚本线程可以执行其他脚本。如果没有未决的图形状态准备被设定,则脚本线程可以执行其他脚本。在一个实施方式中,在对将设定的新图形状态进行检验之前,如果任务可用,则脚本线程可以执行除了设定图形状态之外的任务。以这种方式,如果两个图形状态设定任务和其它脚本任务可用于脚本线程执行,则脚本线程可以在设定图形状态任务和执行其他脚本任务之间进行交替。在一个实施方式中,设定图形状态可以处于比其他脚本任务更高的优先级,并且可以在执行其他脚本任务之前设定所有可用新图形状态。在执行其他脚本之后,脚本线程可以再次检验是否将准备设定另一图形状态。如果将准备设定另一图形状态,则脚本线程可以完成它的其它任务,继而设定接下来的图形状态。在一个实施方式中,可以向脚本线程提供对将准备在缓冲器中设定新图形状态的指示,从而使得可以不需要实际的检验或轮循。脚本线程可以再次完成任何未完成的任务,并且继而在102处设定新的图形状态。在一个实施方式中,如果没有图形状态准备被设定,并且脚本线程没有其它脚本任务要执行,则在104处脚本线程可以等待空闲。与脚本语言执行同时,工作线程可以是执行任务。在108处,可以确定是否已经设定新的图形状态。在一个实施方式中,工作线程可以读取缓冲器以观察就之前还没有被工作线程读取的意义上哪些图形状态是新的。可以在缓冲器中设定多个新的图形状态。例如,工作线程可以不像脚本线程可以设定图形状态那么快地处理和提供设定的图形状态给GPU。在这些情况中,工作线程可以读取优先级数据(例如,时间戳或高优先级指示)来确定在110处首先读取哪个状态。在一个实施方式中,在110处可以读取设定的图形状态。该读取可以是异步的,因为设定图形状态可以不必直接后接读取该设定的图形状态。在队列中其它读取可以提前, 或者设定图形状态可以比读取和处理状态更快。如图I中所示,读取设定的图形状态可以与在块102中的设定图形状态和在块106中的执行其他脚本同时发生。此外,块108-114也可以与块102-106同时发生。108-114共同表示可以发起与设定的图形状态对应的绘制并且可以统称为绘制时间的一类调用。在一个实施方式中,读取设定的图形状态可以包括线程检查状态块并确定自上一次线程检查状态块起状态为新。如果在状态块中存在多个新的图形状态,则线程可以读取状态块中的指针或其它优先级数据(例如,时间戳或高优先级指示)以确定应当首先读取哪个设定的图形状态。两个调用(clear ()、drawTrianglesO)可以通过将数据从设定和读取的图形状态传递到图形流水线(pipeline)中而发起绘制。绘制调用可以通过脚本线程发起,但脚本线程可以返回到几何处理任务,而工作线程拾取绘制任务。绘制任务可以将所有状态信息或修改部分传递给图形子系统(GPU)并发起绘制。在一个实施方式中,绘制任务可以在从图形子系统恢复错误状态方面不付出努力。如在112处所图示的,可以对读取的图形状态进行验证。例如,可能存在其中状态块处于无效状态的情形。在一个实施方式中,验证读取的图形状态可以是只读操作。验证可以在内部发生,可以由CPU上的线程执行,并且脚本可以在验证期间继续。作为示例,读取的图形状态可以为SetProgram O ,其可以设定着色器,该着色器需要特定输入来适当作用。 在本示例中的着色器程序可以需要三个纹理输入。如果状态块未完成,并且只具有设定的两个纹理输入而不是三个,则与设定的状态对应的绘制功能可能无法适当作用。在这样的示例中,验证可能失败。如果验证失败,则可以不执行绘制调用,并且可以跳过向GPU的任务提交。作为验证失败的结果,可以确定是否在块108处设定另一图形状态。验证可以是出于保密和安全的原因而执行,并且可以不包括任何状态报告。在一个实施方式中,不执行验证失败报告。此外,验证可以不包括错误检验,并且验证失败可以不触发向脚本语言的错误通知。如果对读取的图形状态进行了验证,则可以在块114中进行绘制调用。
在114处,可以将与验证有效的图形状态对应的任务提交给GPU。在一个实施方式中,工作线程可以调用图形库上的功能并在GPU中设定状态。响应于绘制调用,工作线程可以采用在绘制调用中提供的顶点并将这些顶点提供给GPU。在一个实施方式中,另一工作线程可以针对另一设定的图形状态同时执行108-114,并将对应的任务提交给同一 GPU或不同的GPU。如102-106中所述,可以对多个图形状态进行排队,从而使得图形子系统可以保持繁忙。因此,在将任务提交给GPU之后,在108-114处可以读取并处理下一设定的图形状态。允许对图形状态的并行设定和处理设定的图形状态可以提供对于API语义的一组选择和API语义的实施,API语义可以创建快速路径操作模式,该快速路径操作模式可以允许非阻塞发起GPU绘制。这样的API在可以不具有对线程控制的直接支持的脚本环境中可能是有价值的。图I的方法可以允许内部工作线程继续GPU状态管理,而脚本执行可以直接返回到用户处理。脚本程序员可以享有交织处理的性能益处,而不必引入线程控制构造或处理异步事件。此外,通过执行状态验证,代替错误检验和报告,仍可以保护安全性。现在转向图2,其示出了用于调试模式的一个实施方式。尽管为了易于理解按照特定顺序示出了这些块,但可以使用其它顺序。在某些实施方式中,图2的方法可以包括相比示出的块(诸如图I的块102-112)而言附加的(或更少的)块。在202处,可以进入调试模式,该调试模式可以允许同步绘制。在一个实施方式中,可以在脚本级别的绘制时间选择调试模式。如204处所示,可以设定图形状态。在一个实施方式中,可以在进入调试模式之后设定图形模式,而在某些实施方式中,当进入调试模式时可以已经设定了图形模式。在任何情况下,当选择调试模式时,不可以设定后续的图形状态,直到GPU返回错误状态(其可以包括不存在错误)。如此,可以阻止脚本进一步操作。如在206处所示,可以对设定的图形状态进行验证。在一个实施方式中,可以在将任务提交给GPU之前,对图形状态进行验证(如在块112中那样)。在一个实施方式中,以脚本语言进行验证,而在某些实施方式中,可以在GPU处执行验证。验证状态块失败可以导致错误异常并且可以在块208处触发错误通知。在208处,可以报告错误状态。如在206处所提到的,验证状态块失败可以触发错误通知。此外,针对错误可以监测图形流水线。在调试模式中,可以同步地执行状态设定和绘制,从容使得使用序列ID标识异步任务或者标识状态可以不是必需的。因此,在同步调试模式中,可以在将结果传递回客户端之前完成渲染。在其它实施方式中,可以引入用于管理消息序列ID的框架来异步地检测和报告错误。在这样的实施方式中,可以针对通过客户端/脚本语言做出的每个API调用而创建序列ID。每个序列ID可以与相应的状态块相关联。如果在检验验证阶段处确定错误,则错误可以包括id。在客户端侧,序列ID的列表可以映射回引起错误的操作。如在210处所示,可以将与设定的图形状态对应的任务提交给GPU。在一个实施方式中,脚本语言可以发起绘制调用。脚本语言可以调用图形库上的功能并且直接在GPU中设定状态。响应于绘制调用,脚本可以将绘制调用中的顶点提供给GPU。当完成任务时,脚本语言可以在204处设定下一图形状态。在一个实施方式中,GPU可以将任何图形流水线错误报告回脚本语言。选择图2的调试模式可以允许脚本程序员退出图I的执行模式并查看验证错误和/或图形流水线错误。提供可以有助于高性能图形的默认模式,还允许选择调试模式,由此可以为脚本程序员提供很大程度的灵活性。图3图示了对内容的并行化定义和显示的一个实施方式的示例。图3示出了通过图形应用编程接口(API) 304进入的脚本环境302。脚本环境302可以是ActionScript 3、JavaScript或Microsoft. NET脚本环境之类的脚本环境。脚本环境可以提供单线程编程模型。图形API 304可以是图形上下文的进入点。例如,图形API 304可以在程序设置时创建或初始化。图形API 304的实现可以称为Contex3D。客户端侧状态可以通过Contex3D对象来汇聚和管理。在一个实施方式中,在初始化时,可以定义程序并分配给图形API 304以指示GPU318如何处理顶点。在一个实施方式中,图形API 304可以设定图形状态。示例图形状态可以包括setProgramO、setProgramConstantsFromVector ()、setProgramConstantsfromMatrix ()、setVertexBufferAt()、setBlendFactors ()、setColorMask ()、setDepthTest ()、setTextureAt ()、s etRenderToTexture ()、s etRenderT oB ackBuf f er () > s etCullingO、setStenc i IAct ions ()、setStencilReferenceValue ()、setScissorRectangle ()等。如图 3 中所不,可以在状态缓冲器的状态块310-316中设定图形状态。在所示示例中,状态缓冲器包括4个单元或块。如上所述,缓冲器可以包括4个、8个、16个、32个、64个等的单元。在一个实施方式中,缓冲器可以驻留在CPU系统存储器中。作为对图形状态进行设定的示例,可以通过图形API 304接收输入以创建纹理对象,该纹理对象可以使用setTextureAt调用来分配(调用的“At”部分可以指代先前设定的程序部分)。setTextureAt状态可以在状态块310-316之一中设 定。在一个实施方式中,脚本环境302可以对由图形API 304接收到的输入执行琐碎的验证。例如,脚本语言可以检验无效的纹理尺寸、NULL所需参数等。图形API 304继而可以提供两个绘制306调用clear ()和drawTriangles (),这两个调用通过将日期传递给图形流水线而发起绘制。对绘制306的调用可以对绘制任务进行排队并允许脚本环境302返回到其它任务。对绘制任务进行排队可以包括计算顶点的列表,在顶点缓冲器中存储顶点,以及调用 setVertexBufferAt。在上述 setTextureAt/setVertexBufferAt 不例中,此时状态可以包括如何解译顶点、应用到顶点的纹理以及顶点本身。因此,脚本环境302可以自由返回到几何处理任务,而线程308拾取绘制任务。因此,线程308对于脚本环境302和图形API 304可以是透明的。PAUSE线程308可以检查状态块,状态310-316,并确定自前一次检查起哪个状态对于GPU 318而言是新的。如果多个状态(例如状态314和316)是新的,则线程308可以查找指示用于处理的排序或优先级的指针。线程308然后可以验证与排队的绘制任务对应的状态310-316。这可以帮助确保VertexBuffer定义和访问它们的着色器程序之间的兼容性。此外,在递送给图形子系统之前对数据的验证可以通过使得更难以将任意用户数据传递给图形子系统而增强安全性。验证失败可以不触发向图形API 304的错误通知。在一个实施方式中,如果验证失败,则可以跳过与验证失败对应的状态310-316,并且从不提供给GPU 318。相反,可以检验队列中的下一状态的有效性,并且如果有效则继续进行。线程 308可以调用图形库上的功能并向GPU 318提供新的状态(图3中的状态316)。响应于绘制调用,线程308可以采用在绘制调用中提供的顶点并将顶点提供给GPU 318。那时,GPU 318可以执行绘制任务,例如绘制三角形。在验证状态310-316期间,并且在线程308向GPU 318提供状态时, 脚本环境302和图形API 304可以在状态块310-316中继续设定新的图形状态。换言之,线程308可以读取一个状态块310-316,并且并行地,图形API 304可以设定不同的状态块310-316。一种机制可以防止同一状态块310-316被同时读取/写入。允许脚本程序员简单更新图形状态,而线程读取该状态并向GPU施加改变,可以允许单线程脚本环境中的线程行为,而无需使用或者要求脚本语言中的线程构造。这可以带来显著的性能增益。例如,如果脚本语言快速完成其处理并回收以设定附加的图形状态, 则可以按照绘制任务对状态块进行排队并顺序处理。运行队列的存在可以确保图形子系统不会空闲等待数据。而且由于脚本语言可以在等待错误报告的情况下不阻塞绘制任务,因此针对稍后的异步处理可以继续设定图形状态。作为结果,可以在脚本级别上以及在GPU 级别上使空闲时间最小化。图4图示了内容的并行化定义和显示的一个实施方式的示例。如图所示,图4的底部可以为正常/默认模式,该正常/默认模式可以按照与图3类似的方式操作。通过图形API 404,可以在脚本环境402级别上选择调试模式。为易于图示,图4示出了在图4的上部(调试模式)和下部(正常/默认模式)两者中的图形API 404,当在一个实施方式中,其可以为同一图形API 404。通常,在图形API 404下游的行为在调试模式和正常模式之间可以不同。正常模式在上文图3中进行了描述。在脚本环境402/图形API 404处可以选择调试模式。与正常模式中的图形API 404相比,调试模式中的图形API 404可以包括不同的布局(类似外观)并且包含不同的选项。如在正常模式中,可以在状态块406中设定图形状态。在图4的调试部分中仅示出了一个状态块406,然而,正常模式的相同状态块416-422在调试模式中可用。设定和读取状态块可以顺序和串行进行,与正常模式的并行能力相反。因此,在一个实施方式中,即使当多个状态块416-422可用于读取和写入时,图形API 404 一次也只能写入和读取状态块 416-422中的一个。在调试模式中,在GPU 408中可以在绘制时间进行验证。验证状态块408失败可以导致错误异常。该错误异常可以向回提供给脚本环境402和图形API 404。在GPU 408处验证期间,脚本环境402和图形API 404可以被阻止设定后续的图形状态406,直到GPU408 完成执行绘制任务或报告错误。因此,在一个实施方式中,在脚本环境402可以继续进行进一步操作之前,GPU 408可以检验任何错误并报告给脚本环境402。在备选的所公开的实施方式中,可以引入用于管理消息序列ID的框架以检测和报告错误。这样的框架可以实现异步绘制方法,如在正常/默认模式中,而且还包括检验和报告错误的能力。前述调试模式可以允许绘制方法同步,这可以便于错误的报告。另外,调试模式可选择为使得默认模式可以允许高性能和并行化GPU绘制,仍允许低开销方式的程序员调试能力。示例件系统如这里所述的状态设定模块、绘制模块和/或各种并行定义和显示内容的技术的实施方式可以在一个或多个计算机系统上执行,该一个或多个计算机系统可以与各种其他设备进行交互。一种这样的计算机系统通过图5示出。在不同的实施方式中,计算机系统500可以为各种类型的设备中的任一个,包括但不限于个人计算机系统、台式计算机、膝上型计算机、笔记本计算机或上网本计算机、大型计算机系统、手持计算机、工作站、网络计算 机、相机、机顶盒、移动设备、消费类设备、视频游戏机、手持视频游戏设备、应用服务器、存储设备、诸如开关、调制解调器、路由器之类的外围设备,或者一般而言为任何类型的计算或电子设备。在所图不的实施方式中,计算机系统500包括一个或多个处理器510,该一个或多个处理器510经由输入/输出(I/O)接口 530与系统存储器520耦合。计算机系统500进一步包括与I/O接口 530耦合的网络接口 540和诸如光标控制设备560、键盘570和显示器580之类的一个或多个输入/输出设备550。在某些实施方式中,预期可以使用计算机系统500的单个实例实现实施方式,而在其它实施方式中,可以将多个这样的系统或者多个构成计算机系统500的节点配置为主控实施方式的不同部分或实例。例如,在一个实施方式中,某些元件可以经由计算机系统500的一个或多个节点来实现,所述计算机系统500的一个或多个节点与那些实现其他元件的节点不同。在各种实施方式中,计算机系统500可以为包括一个处理器510的单处理器系统或者包括若干处理器510 (例如两个、四个、八个或其它合适数目)的多处理器系统。处理器510可以为能够执行指令的任何合适的处理器。例如,在各种实施方式中,处理器510可以为通用或嵌入的处理器,实现各种指令集架构(ISA)中的任一个,指令集架构诸如x86、PowerPC、SPARC或MIPS ISA或者任何其它合适ISA。在多处理器系统中,每个处理器510可以共同地但不是必需地实现同一 ISA。在某些实施方式中,至少一个处理器510可以为GPU。GPU可以被看作用于个人计算机、工作站、游戏机或其它计算或电子设备的专用图形渲染设备。现代GPU在操控和显示计算机图形上可以是非常有效的,并且对于大量复杂图形算法而言,它们的高度并行结构可以使它们比通常的CPU更有效。例如,图形处理器可以按照如下方式实现大量图形基本操作,该方式使得执行这些图形基本操作比利用主机中央处理单元(CPU)直接绘制到屏幕快得多。在各种实施方式中,这里公开的图像处理方法可以至少部分地通过程序指令实现,该程序指令被配置用于在这种GPU之一上执行或者在这种GPU的两个或多个上并行执行。处理器和/或GPU可以实现允许编程者调用GPU功能的一个或多个API。合适的GPU可以从诸如 NVIDIA Corporation、ATI Technologies (AMD)等的供应商购买。诸如一个或多个处理器510的GPU可以按照大量不同的物理形式实现。例如,GPU可以采用专用图形卡、集成图形方案和/或混合方案的形式。专用图形卡可以为3D图形卡。GPU 510可以借助于诸如PCI Express图形或加速图形端口(AGP)之类的扩展槽与母板对接,并且因而可以相对容易地更换或更新(假设母板能够支持该更新)。然而,专用GPU 不是必须可移除的,也不是必须按照标准方式与母板对接。术语“专用”指代硬件图形方案可以具有专用于图形使用的RAM的事实,而不是指代图形方案是否可移除或可更换。用于便携式计算机的专用GPU可能由于尺寸和重量约束而通过非标准的且通常专有的插槽对接。即使这种端口与它们的对等体在物理上不可互换,但它们仍然可以被看作AGP或PCI express。集成图形方案或共享图形方案是利用计算机的系统RAM的一部分而不是专用图形存储器的图形处理器。例如,现代台式母板通常包括集成图形方案并且具有可用于稍后添加专用图形卡的扩展槽。由于GPU可以是极端存储器集中式的,集成方案发现自身与CPU 关于已经变慢的系统RAM竞争,因为集成方案不具有专用视频存储器。例如,系统RAM可以体验在2GB/s和8GB/s之间的带宽,而大多数专用GPU享有从15GB/s到30GB/s的带宽。混合方案也可以与系统存储器共享存储器,但可以具有比分立或专用图形卡更少量的板上存储器,从而构成系统RAM的高时延。图形处理单元510与计算机系统500的其余部分之间传送的数据可以通过图形卡槽或诸如图5的I/O接口 530之类的其它接口行进。注意,在各种实施方式中,程序指令525可以被配置为将图形应用实现为单机应用或者实现为另一图形应用或图形库的模块。例如,在一个实施方式中,程序指令525可以被配置为实现诸如涂绘、编辑、公布、照相、游戏、动画和/或其它应用的图形应用,并且可以被配 置为提供这里描述的功能性。在另一实施方式中,程序指令525可以被配置为在由 GPU 510和/或处理器510上执行的另一图形应用调用的一个或多个功能或模块(例如状态设定模块或绘制模块)中实现这里描述的技术。这些模块可以是可在CPU 510和/或 GPU510上执行用于使计算机系统500提供这里描述的功能性。图形应用可以在各种实施方式中使用任何期望的编程语言、脚本语言或编程语言和/或脚本语言的组合(例如C,C++, C#, ActiveScript, Java , Perl等)来实现。例如,在一个实施方式中,图形应用可以是基于JAVA的,而在另一实施方式中,它可以是使用ActiveScript 3实现的。在其它实施方式中,图形应用可以是使用特别用于开发由专用图形硬件(诸如GPU)执行的程序的专用图形语言实现的。此外,图形应用可以具体实施于专门分派为供图形处理器使用的存储器(诸如在包括图形处理器的图形板上的存储器)上。在各种实施方式中,程序指令525还可以被配置为渲染图像并将图像作为操作的输出呈现在一个或多个显示器上,和/或被配置为将图像数据存储在存储器520和/或外部存储设备中。系统存储器520可以被配置为存储由处理器510可访问的程序指令和/或数据。 在各种实施方式中,系统存储器520可以使用任何合适的存储器技术实现,诸如静态随机访问存储器(SRAM)、同步动态RAM(SDRAM)、非易失性/快闪型存储器或任何其它类型的存储器。在所图示的实施方式中,实现期望功能的程序指令和数据(诸如上述针对状态设定模块和绘制模块的实施方式的那些程序指令和数据)被示出为存储在系统存储器520中分别作为程序指令525和数据存储535。在其它实施方式中,可以在不同类型的计算机可访问的介质或与系统存储器520或计算机系统500分离的类似介质上接收、发送或存储程序指令和/或数据。一般来讲,计算机可访问的介质可以包括经由I/O接口 530耦合到计算机系统500的存储介质或存储器介质,诸如磁或光学介质,例如磁盘或CD/DVD-ROM。经由计算机可访问的介质存储的程序指令和数据可以通过传输介质或诸如电信号、电磁信号或数字信号之类的信号 来传输,所述信号可以经由诸如网络和/或无线链路之类的通信介质传送,诸如可以经由网络接口 540实现。在一个实施方式中,I/O接口 530可以被配置为协调设备中的处理器510、系统存储器520和任何外围设备之间的I/O业务量,外围设备包括网络接口 540或其它外围接口,诸如输入/输出设备550。在某些实施方式中,I/O接口 530可以执行任何必要的协议、定时或其它数据转换,以将来自一个组件(例如系统存储器520)的数据信号转换成适于由另一组件(例如处理器510)使用的格式。在某些实施方式中,I/O接口 530可以包括对通过各种类型的外围总线附接的设备的支持,诸如外围组件互连(PCI)总线标准或通用串行总线(USB)标准的变体。在某些实施方式中,I/O接口 530的功能可以分裂为两个或多个分离组件,诸如北桥和南桥。此外,在某些实施方式中,I/O接口 530的某些或者所有功能性,诸如与系统存储器520的对接,可以直接并入处理器510中。网络接口 540可以被配置为允许数据在计算机系统500与附接到网络的其它设备(诸如其它计算机系统)之间或者在计算机系统500的节点之间进行交换。在各种实施方式中,网络接口 540可以经由如下方式支持通信有线或无线通用数据网络,诸如任何合适类型的例如以太网网络;电信/电话网络,诸如模拟语音网络或数字光纤通信网络;存储区域网络,诸如光纤通道SAN ;或者任何其它合适类型的网络和/或协议。在某些实施方式中,输入/输出设备550可以包括一个或多个显不器终端、键盘、小键盘、触摸板、扫描设备、语音或光学标识设备或适合于通过一个或多个计算机系统500输入或获取数据的任何其它设备。多个输入/输出设备550可以存在于计算机系统500中或者可以分布在计算机系统500的各种节点上。在某些实施方式中,类似的输入/输出设备可以与计算机系统500分离,并且可以通过有线或无线连接(诸如在网络接口 540上)与计算机系统500的一个或多个节点交互。如图5所示,存储器520可以包括程序指令525和数据存储535,该程序指令525被配置为实现这里描述的状态设定模块和绘制模块的实施方式,该数据存储535包括由程序指令525可访问的各种数据。在一个实施方式中,程序指令525可以包括如上述图中所示的状态设定模块和绘制模块的实施方式的软件单元。数据存储535可以包括可在实施方式中使用的数据。在其它实施方式中,可以包括其它或者不同的软件单元和数据。本领域技术人员将明白,计算机系统500仅是说明性的,并不旨在于限制这里描述的状态设定模块和绘制模块的范围。具体地,计算机系统和设备可以包括能够执行所指出功能的软件或硬件的任意组合,包括计算机、个人计算机系统、台式计算机、膝上型计算机、笔记本计算机或上网本计算机、大型计算机系统、手持计算机、工作站、网络计算机、相机、机顶盒、移动设备、网络设备、因特网工具、PDA、无线电话、寻呼机、消费类设备、视频游戏机、手持视频游戏设备、应用服务器、存储设备、诸如开关、调制解调器、路由器之类的外围设备、或者一般而言的任何类型的计算或电子设备。计算机系统500还可以连接到未示出的其它设备,或者取而代之,可以作为单机系统操作。此外,在某些实施方式中,由所示出的组件提供的功能性可以组合在更少的组件中或者分布在附加的组件中。类似地,在某些实施方式中,可以不提供所示出的组件中的某些组件的功能性,并且/或者其他附加的功能性可以为可用的。本领域技术人员还将明白,尽管将各种项例示为存储在存储器中或者在使用时进行存储,但这些项或者它们的一部分可以在存储器和其它存储设备之间传送用于存储器管理和数据完整性的目的。备选地,在其它实施方式中,某些或者全部软件组件可以在另一设备上的存储器中执行,并且经由计算机间通信与所图示的计算机系统通信。某些或者全部系统组件或者数据结构也可以存储(例如作为指令或构造数据)在将通过适当驱动来读取的计算机可访问介质或者便携式设备上(上面描述了其各种示例)。在某些实施方式中,存储在与计算机系统500分离的计算机可访问介质上的指令经由传输介质或诸如经由诸如网络和/或无线链路之类的通信介质传送的电信号、电磁信号或数字信号之类的信号可以传输到计算机系统500。各种实施方式可以进一步包括接收、发送或存储根据前面的描述在计算机可访问介质上实现的指令和/或数据。因此,本公开可以在其它计算机系统配置的情况下实施。益论各种实施方式可以进一步包括接收、发送或存储根据前面的描述在计算机可访问介质上实现的指令 和/或数据。一般来讲,计算机可访问介质可以包括存储介质或存储器介质,诸如磁或光学介质,例如磁盘或DVD/CD-R0M、诸如RAM (例如SDRAM、DDR、RDRAM、SRAM 等)、R0M等的易失性或非易失性介质以及传输介质或诸如经由诸如网络和/或无线链路之类的通信介质传送的诸如电信号、电磁信号或数字信号之类的信号。图中所图示的以及这里描述的各种方法代表方法的示例性实施方式。这些方法可以在软件、硬件或其组合中实现。方法的顺序可以改变,并且可以对各种元素进行添加、重新排序、组合、省略、修改等。如受益于本公开的本领域技术人员将显而易见的,可以进行各种修改和变化。本公开旨在于涵盖所有这样的修改和变化,并因此上述描述应视为说明性的而非限制性意义。
权利要求
1.一种方法,包括 在脚本环境中 设定图形状态; 将与所述设定的图形状态对应的任务提交给图形处理单元(GPU);以及 在无需等待对由所述GPU成功完成所述任务的指示的情况下,设定另一图形状态。
2.根据权利要求I所述的方法,其中所述提交所述任务通过所述脚本环境的工作线程执行。
3.根据权利要求2所述的方法,进一步包括,在所述提交所述任务之前,所述工作线程确定所述设定的图形状态的有效性,其中所述确定包括将所述设定的图形状态的数据与所述设定的图形状态的预期数据相比较。
4.根据权利要求3所述的方法,其中设定所述图形状态包括将所述图形状态存储在缓冲器中,并且其中确定所述设定的图形状态的有效性包括从所述缓冲器中读取,其中所述缓冲器被配置为同时在所述缓冲器的不同块中进行读取和存储。
5.根据权利要求4所述的方法,其中所述缓冲器驻留在执行所述脚本环境的中央处理单元(CPU)中,并且其中设定所述图形状态包括以下脚本线程 将所述图形状态存储在所述缓冲器的一个块中;以及 将所述另一图形状态存储在所述缓冲器的另一个块中;以及 其中所述工作线程从所述缓冲器的所述一个块中执行对所述设定的图形状态的所述读取,与此同时,所述脚本线程在所述缓冲器的所述另一个块中执行对所述另一图形状态的所述存储。
6.根据权利要求3所述的方法,其中确定所述设定的图形状态的有效性包括 读取所述设定的图形状态的数据; 确定所述设定的图形状态的所述数据不同于导致有效性检验失败的所述设定的图形状态的预期数据;以及 跳过将与所述设定的图形状态对应的所述任务提交给所述GPU。
7.根据权利要求6所述的方法,其中跳过提交所述任务包括在无需报告有效性检验失败的情况下,所述工作线程读取另一设定的图形状态。
8.根据权利要求I所述的方法,其中所述脚本环境提供单线程编程模型。
9.根据权利要求I所述的方法,其中所述图形状态是对3D内容显示的定义。
10.根据权利要求I所述的方法,进一步包括,在所述脚本环境中 接收用于进入调试模式的输入,其中进入所述调试模式阻止设定后续图形状态,直到接收到错误或完成与所述设定的图形状态对应的所述任务; 确定所述设定的图形状态是无效的; 报告错误,其中所述错误对应于所述设定的图形状态的验证失败;以及 设定下一图形状态。
11.根据权利要求10所述的方法,进一步包括在所述脚本环境中 确定所述下一图形状态是有效的; 将与所述设定的下一图形状态对应的任务提交给所述GPU ; 等待对由所述GPU成功完成与所述设定的下一图形状态对应的所述任务的指示;以及设定另一下一图形状态。
12.—种非瞬态计算机可读存储介质,存储程序指令,其中所述程序指令可由计算机执行以实现以下操作 在脚本环境中 设定图形状态; 将与所述设定的图形状态对应的任务提交给图形处理单元(GPU);以及 在无需等待对由所述GPU成功完成所述任务的指示的情况下,设定另一图形状态。
13.根据权利要求12所述的非瞬态计算机可读存储介质,其中所述提交所述任务通过所述脚本环境的工作线程执行。
14.根据权利要求13所述的非瞬态计算机可读存储介质,其中所述程序指令可进一步由计算机执行以实现在所述提交所述任务之前,所述工作线程确定所述设定的图形状态的有效性,其中所述确定包括将所述设定的图形状态的数据与所述设定的图形状态的预期数据相比较。
15.根据权利要求14所述的非瞬态计算机可读存储介质,其中设定所述图形状态包括将所述图形状态存储在缓冲器中,并且其中确定所述设定的图形状态的有效性包括从所述缓冲器中读取,其中所述缓冲器被配置为同时在所述缓冲器的不同块中进行读取和存储。
16.根据权利要求14所述的非瞬态计算机可读存储介质,其中为实现所述确定所述设定的图形状态的有效性,所述程序指令可进一步由计算机执行以实现 读取所述设定的图形状态的数据; 确定所述设定的图形状态的所述数据不同于导致有效性检验失败的所述设定的图形状态的预期数据;以及 跳过将与所述设定的图形状态对应的任务提交给所述GPU。
17.根据权利要求16所述的非瞬态计算机可读存储介质,其中为实现所述跳过提交所述任务,所述程序指令可进一步由计算机执行以实现 在无需报告有效性检验失败的情况下,所述工作线程读取另一设定的图形状态。
18.根据权利要求12所述的非瞬态计算机可读存储介质,其中所述程序指令可进一步由计算机执行以实现 接收用于进入调试模式的输入,其中进入所述调试模式阻止设定后续图形状态,直到接收到错误或完成与所述设定的图形状态对应的所述任务; 确定所述设定的图形状态是无效的; 报告错误,其中所述错误对应于所述设定的图形状态的验证失败;以及 设定下一图形状态。
19.根据权利要求12所述的非瞬态计算机可读存储介质,其中所述程序指令可进一步由计算机执行以实现 确定所述下一图形状态是有效的; 将与所述设定的下一图形状态对应的任务提交给所述GPU ; 等待对由所述GPU成功完成与所述设定的下一图形状态对应的所述任务的指示;以及 设定另一下一图形状态。
20.—种系统,包括至少一个处理器;以及 存储器,包括程序指令,其中所述程序指令可由所述至少一个处理器执行用于 在脚本环境中 设定图形状态; 通过所述脚本环境的工作线程确定所述设定的图形状态的有效性,其中为了确定,所述程序指令可进一步由所述至少一个处理器执行用于将所述设定的图形状态的数据与所述设定的图形状态的预期数据相比较; 将与所述设定的图形状态对应的任务提交给图形处理单元(GPU);以及 在无需等待对由所述GPU成功完成所述任务的指示的情况下,设定另一图形状态。
21.根据权利要求20所述的系统,其中为了设定所述图形状态以及为了确定所述设定的图形状态的有效性,所述程序指令可由所述至少一个处理器进一步计算机执行用于将所述图形状态存储在所述至少一个处理器的缓冲器中,并从所述缓冲器中读取所述设定的图形状态,其中所述缓冲器被配置为同时在所述缓冲器的不同单元中进行读取和存储。
22.根据权利要求21所述的系统,其中为了确定所述设定的图形状态的有效性,所述程序指令可由所述至少一个处理器进一步计算机执行用于 从所述缓冲器读取所述设定的图形状态的数据; 确定所述设定的图形状态的所述数据不同于导致有效性检验失败的所述设定的图形状态的预期数据;以及 跳过将与所述设定的图形状态对应的所述任务提交给所述GPU。
23.根据权利要求20所述的系统,其中所述程序指令可由所述至少一个处理器进一步计算机执行用于 接收用于进入调试模式的输入,其中为了进入所述调试模式,所述程序指令可由所述至少一个处理器进一步执行用于阻止设定后续图形状态,直到接收到错误或完成与所述设定的图形状态对应的所述任务; 确定所述设定的图形状态是无效的; 报告错误,其中所述错误对应于所述设定的图形状态的验证失败;以及 设定下一图形状态。
全文摘要
本发明涉及脚本环境中内容的并行化定义和显示。具体地,可以在脚本环境中并行定义和显示各种内容。脚本语言在继续进行对内容定义的更新之前可以不用等待错误检验或报告。在一个实施方式中,可以不执行错误检验或报告。通过设定图形状态可以定义内容,而通过验证图形状态和将验证有效的状态提交给GPU可以显示内容。对内容的定义和显示可以异步执行。
文档编号G06F9/38GK102707928SQ20121004869
公开日2012年10月3日 申请日期2012年2月27日 优先权日2011年2月25日
发明者S·马克特慕伊勒 申请人:奥多比公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1