用于与图形处理单元交接的基于交易的显示流水线的方法和系统与流程

文档序号:19792697发布日期:2020-01-24 14:38阅读:172来源:国知局

背景技术
::本专利申请整体涉及用于与一个或多个图形处理单元(gpu)交接的交易显示流水线。常规的显示流水线不是基于与gpu的交易接口,并且不使用原子显示特征处理。在常规显示流水线中,独立地提供gpu的特征请求以及gpu以该特征要作用于的数据。换句话讲,gpu被提供以一组数据并分开地被提供以用于应用于该数据的命令。此外,历史上,显示已经包括一个或多个消隐间隔,诸如水平消隐间隔和垂直消隐间隔。在光栅图形显示中,垂直消隐间隔(vbi)(也称为垂直间隔或vblank)是帧或场的最后一条线的结束与下一帧的第一条线的开始之间的时间。在vbi期间,输入数据流不被显示在屏幕上。在当前显示中可能没有所需的消隐间隔,因为它们不是基于光栅扫描。然而,可存在定义的寂死期,在该寂死期期间,显示存储器可被更新而不更新显示,从而不向用户呈现更新过程的不期望的伪影。技术实现要素:本文所公开的各种实施方案一般性涉及用于图形处理单元(gpu)的交易接口(例如,显示流水线)的方法和系统。交易包括表示gpu的工作单元的特征和数据的组合。交易可经由队列机制呈现并在离散时间点以原子方式进行处理以避免显示设备上的可见伪影。交易可以从用户级程序接口提供,或者可以在操作系统的内核函数内创建。gpu特征和能力可经由一个或多个查询函数迭代地确定能力或通过使用包含系联到gpu的特定能力的配置标识符的查找表来确定。在一个实施方案中,描述了一种用于与gpu的交易交互的方法。该方法可在包括gpu的系统中实施,并且可包括发现关于gpu的特征数据、根据通过应用程序接口(api)从用户级软件模块接收的命令将特征数据与交易数据绑定,其中交易数据包括影响像素在呈现在显示设备上之前的变换的信息,并且其中特征数据包括关于gpu的特征的使用的信息;将交易提交给图形流水线,所述交易包括绑定到所述特征数据的所述交易数据;以及通过根据特征数据使用gpu特征来处理交易,以根据交易处理交易数据。在另一个实施方案中,该方法可以体现在计算机可执行程序代码中并存储在非暂态存储设备中。在另一实施方案中,该方法可在具有(例如,经由缆线)直接连接的显示器或(例如,经由网络或无线通信技术)远程连接的显示器的处理设备中实施。附图说明图1以框图形式示出根据一个或多个实施方案的用户级应用的高层级交互以及其为了在显示设备上呈现数据的与显示流水线的交互。图2以框图形式示出根据一个或多个实施方案的示例性软件、内核和硬件级架构图。图3以流程图形式示出根据一个或多个实施方案的用于发现gpu的能力以及利用被提交给gpu的封装交易执行图形处理的方法。图4示出根据一个或多个实施方案的用于处理图形交易的一种可能的时间线和相关联的排队具体实施。图5示出两个示例图,根据一个或多个实施方案,第一示例图示出后面跟着数据的伽玛旁路,第二示例图将旁路和数据显示成分开的交易。图6以框图形式示出根据一个或多个实施方案的简化多功能设备。图7以表格形式示出根据一个或多个实施方案的相同硬件或不同设备的配置标识符的示例。具体实施方式本文公开了一种用于提供框架(通常称为iopresentment)、以及一组用于与gpu交互以利用交易模型进行图形处理的api的系统、计算机可读介质和方法。根据一个或多个实施方案,所述技术包括关于图形驱动器如何支持显示流水线以确定在显示器上以及在打印材料上看到什么颜色的描述。供应商(例如,gpu供应商)的硬件可支持的特征包括但不限于:应用数据和组装缓冲的像素格式;扫描输出缓冲特征(像素格式、类型和深度);伽玛校正表;通过缆线从系统发送给显示器的内容的精确度;和显示特性(抖动、深度和色域)。在不同实施方案中,可能期望图形驱动器应支持若干像素格式、扫描输出缓冲配置、伽玛校正表和显示颜色模式和深度。应支持缓冲之间的格式转换以及缓冲之间的抖动。如有必要,扫描输出缓冲的输出可被转换成显示器自身支持的格式。以下段落说明如何将转变成新的显示流水线状态指定成交易(例如,对gpu的交易接口)。在本讨论中,将参考被设计用于执行某些功能的api。在本公开的通篇中根据情况提供这些api的示例,以便于解释示例实施方案的细节。上述交易包含在单个时间点且在显示设备上没有可见毛刺的情况下要应用的显示流水线数据(例如,像素、伽玛或颜色矩阵)的组合。首先将介绍iopresentment框架。然后将讨论显示流水线交易模型及其api。最后,将给出configurationid的描述。configurationid包含显示流水线输入、输出和行为,因此供应商驱动器可表述其硬件和具体实施的不置于本文所述硬件api查询命令键的描述符中的特定功能。在以下描述中,为了解释的目的,阐述了很多具体细节以便提供对所公开构思的彻底理解。作为本说明书的一部分,本公开的一些附图以框图形式表示结构和设备,以避免模糊所公开实施方案的新颖方面。另外,作为本说明书的一部分,本公开的一些附图可以流程图的形式提供。任何特定流程图中的框可以特定顺序呈现。然而,应当理解,任何流程图的特定流程仅用于举例说明一个实施方案。在其他实施方案中,可删除流程图中描绘的任何各种组件,或者可以不同的顺序执行组件,或甚至同时执行组件。此外,其他实施方案可包括未被示为流程图的一部分的附加步骤。本公开中使用的语言主要是出于可读性和指导目的而选择的,并且可未选择它来描绘或限制所公开的主题。在本公开中提到“一个实施方案”或“实施方案”意指包括在至少一个实施方案中的结合该实施方案所述的特定特征、结构或特性,并且多次提到“一个实施方案”或“实施方案”不应被理解为必然地全部参考相同或不同的实施方案。应当理解,在任何实际具体实施的开发中(如在任何开发项目中),必须要作出许多决策以实现开发者的特定目标(如,符合与系统和商务相关的约束),并且这些目标将在不同具体实施之间变化。还应当理解,此类开发工作可能是复杂且费时的,但尽管如此,对于受益于本公开的图像捕获领域的普通技术人员而言,这仍然是他们的日常工作。现在参见图1,框图100示出根据一个或多个所公开实施方案的高层级显示流水线及其相关联组分。应用105、106、和107表示在计算机系统分级结构的用户级执行的不同用户应用。每个应用105、106、和107各自具有相关联的应用后备存储器110、111、和112。每个应用后备存储器包含与根据情况可呈现在显示器150上的图形信息有关的信息。应用后备存储器110、111、和112中每一者通信地耦接到gpu120,gpu包括像素格式、像素转移、光栅化、以及片段操作的功能。这些功能仅为示例,并且gpu120不限于这些功能。抖动/过滤功能在框130处以与gpu120的双向通信信道示出。在该实施方案中,组装缓冲器135以与抖动/过滤功能130和gpu120的通信信道示出。组装缓冲器135可包含浮点像素格式的数据。帧缓冲器140在已被gpu处理之后以帧缓冲格式从组装缓冲器135接收数据。框145示出gpu后端处理,其可包括在显示器150上以显示格式最终显示之前所应用的抖动或伽玛校正功能。iopresentment框架如本文所公开的,“显示流水线交易”表示特征的封装以及对于相关联ioaccleratorfamily为了执行从当前显示流水线相关状态到新的显示流水线相关状态的特定转变而需要的数据(参见图2的225)。交易的一个显著优点是能够以原子方式从一个扫描输出表面翻转到另一扫描输出表面,具有可描述转换、像素处理以及供应商的硬件所支持的其他特征的显示流水线交易数据。原子性描绘交易数据的锁存,因此转变是在单个时间点完成,而没有任何用户可见的伪影(即,毛刺)。交易的应用或硬件设置可能花费几个帧来进行。显示流水线交易的客户端(例如,用户应用和过程)使用iopresentment框架与供应商驱动器具体实施进行通信。在一个实施方案中,iopresentment是用户模式驱动器(umd),其提供下面的显示流水线硬件以及物理传输、拓扑和端点定时的跨硬件表示。在第二实施方案中,iopresentment被具体实现成提供类似能力的内核级接口。软件分级结构内iopresentment的具体实施的层级是一个设计选择。在该背景下,我们转向图2,其以框图200示出根据一个或多个实施方案的示例性软件、内核和硬件级架构图。在框图200中示出了三个层级。最高层级是用户级(有时称为应用层),最低层级是硬件级,内核级作为这两者之间的接口。这是用于描述计算机系统的常见逻辑分级结构,但层级的严格划分并不总是固定的。通常,操作系统包括在用户级和内核级两者之间执行和交接的部分。供应商驱动器(例如,供应商具体实施230和供应商驱动器237)交接在内核级部分(例如,可被视为操作系统一部分的ioacceleratorfamily225和iographics235)与实际硬件(例如,gpu250)之间。硬件设备(例如,gpu250)在具体实施实际硬件功能之前也可具有嵌入式软件作为附加接口点。需注意,iofb236表示用于在iographics235和供应商驱动器237之间传递数据的输入输出帧缓冲。iofb236也可由硬件诸如gpu250直接访问。如框图200所示,该示例具有被配置为控制从一个或多个用户级应用(未示出)到显示设备的输出的窗口服务器过程205。窗口服务器过程205具有用于执行这些应用的不同类型功能的多个部件(例如,skylight210、quartz211、和coredisplay215)。coredisplay215与该示例相关,并且向实际显示设备260提供用于应用的接口功能。需注意,出于本讨论的目的,显示设备260可为物理的,虚拟的,直接连接的,或远程连接的。所公开的不同实施方案可被配置为与任何方式的显示设备对话。coredisplay215包括如本文所公开配置的iopresentment220、以及对于该示例被认为不是基于交易的iographics用户模式驱动器221。如图所示,iopresentment220和iographics用户模式驱动器221中的每一者提供用户级与内核级之间的接口,并且被配置为根据情况而与ioacceleratorfamily225或iographics235对话。需注意,任意数量的iopresentment220实例可存在于窗口服务器205内,例如为系统检测到的每gpu250一个实例或操作系统所检测到的每个显示器(真实的、虚拟的、远程的等)一个实例。还需注意,在本公开的上下文内,gpu250可被配置为与供应商驱动器237和供应商具体实施230两者对话。还需注意,在gpu250内可实施一组用于线性化、色彩空间校正、伽玛校正等的功能,如gpu显示流水线251所示。在该示例中,gpu显示流水线251的输出负责什么最终被提供给显示器260。iopresentment的某些所公开实施方案的多态性设计和具体实施封装针对通过显示流水线的视觉消耗的交易相关资源的发现、通信和管理(参见图3)。iopresentment被设计为与跟gpu和ioframebuffer相关联的真实物理设备交接,以及启用和支持非ioframebuffer关联和/或非物理设备(或非本地设备,如驻留在远程显示器中的设备)。在iopresentment的一个实施方案中,窗口服务器205拥有用于内容更新的策略,但自刷新(当重复地重新使用相同数据以防止显示衰减时)除外。在该实施方案中,iopresentment控制启用和禁用镜像和旋转,但窗口服务器205拥有关于何时执行这些操作的策略。对于旋转,窗服务器205也可指定取向。在该实施方案中,下面的驱动器可能需要实施为了以交易方式支持镜像和旋转而需要的功能性。参考图3和流程图300,iopresentment及其用户客户端经过根据一个所公开实施方案描述的若干阶段。iopresentment发现阶段在框305处示出。在一个实施方案中,iopresentment为用户客户端提供单个接口用于发现在系统内能够实现交易的逻辑显示器的数量以及这些逻辑显示器与物理设备的关联。根据该实施方案,为了正确地支持gpu功能的发现和交易支持,供应商需要实现以下api:ioacceldisplaypipe和相关联的用于指示对交易显示流水线能力的支持的功能和标志、ioacceldisplaypipetransaction和相关联的用于指示对该api能力的支持的功能和标志。一旦支持被确定,供应商还必须提供用于获取显示流水线数据的api(例如,ioaccelldisplaypipedata)。iopresentment初始化阶段在框310处示出。在一些所公开的实施方案中,iopresentment在可被利用之前经过初始化阶段。在初始化期间,用户客户端可选择要应用交易的期望显示目标。为了使iopresentment能够为每个所期望的显示器创建ioacceldisplaypipe对象和其他所需支持结构,该显示器的供应商接口必须指示对交易的支持并提供用于接收交易的必要接口。采集iopresentment能力在该实施方案中,如框315所示,iopresentment经由各种接口为每个逻辑显示目标采集供应商和系统能力,并将这些能力作为表示逻辑显示器的单个字典呈现给用户客户端。供应商可经由适当的api访问被提供给iopresentment的能力。这些能力对相关联的逻辑显示器从其被查询开始直到任何后续的重新配置事件都是有效的。建议供应商仅为被原子支持的那些特征提供能力信息,或者可以以避免视觉损坏的方式将相关联的特征应用于硬件。用户客户端可被配置为在使用以非原子方式支持的特征时提供视觉分心。用户客户端利用这些能力来确定什么类型的特征和特征配置可用于交易。iopresentment运行时阶段(框320)在一个示例实施方案中,在运行时期间,用户客户端创建交易,将交易资源状态绑定到交易,并且最终提交交易以供供应商具体实施使用。在框320中示出从用户客户端到供应商驱动器具体实施的交易的可能运行时事件流。首先,在框325处,用户客户端分析所述能力并确定什么特征(或配置)(如果有的话)可被利用。框330指示用户客户端创建交易,然后在框335处将表面和/或交易资源状态绑定到交易。在框340处,用户客户端提交交易。在框350处,可调用用于提交或执行交易的api的供应商具体实施来将状态应用于硬件。此时,运行时阶段320被视为完成,并且流继续到框350。iopresentment终止阶段(框350)在iopresentment的使用已完成之后,可能有利的是提供终止阶段350并且将资源释放回系统。为了支持终止,可以不需要供应商具体实施改变。显示流水线交易模型显示流水线交易模型术语使用以下术语来描述根据一个实施方案用于显示流水线操作的交易模型具体实施。显示流水线交易-为了执行转变到新的显示流水线相关状态而需要的数据的封装。显示流水线交易数据-在交易执行期间使用的数据,诸如像素数据、伽玛表、csc矩阵、像素格式、表面维度和转换信息。显示流水线特征块-显示流水线特征块以高层级描述存在于显示流水线或显示平面内的特征和功能性,例如伽玛、csc、线性化等。显示流水线-与端点(也称为玻璃、简单显示器或复杂显示器)的单个逻辑连接的表示。显示流水线包含若干特征块。显示流水线具有一个或多个显示平面,并且显示流水线甚至于包含描述高层级特征和功能性的一个或多个特征块。显示平面-与显示流水线相关联的缓冲,其包含在像素已通过所述显示平面和流水线特征中任意者之后呈现给最终用户的z排序像素的表示。显示平面包含一个或多个特征块。交易资源状态(见图4)在一个示例性实施方案中,存在三个交易资源状态,但可根据需要定义任意数量的状态。此示例的三个状态包括:就绪-指示资源已使所有依赖性被解析并且所有gpu生成已完成的状态;活动-指示交易资源正用于活动扫描输出的状态;和完成-指示资源不再正用于活动扫描输出的状态。流水线流阶段(参见图4)如图4的时间线400所示,根据一个所公开的实施方案,有为所提交交易定义的四个流水线流阶段。队列表示被显示成图4的元素415、420、425、440、和445。如元素415所示,多个交易可在客户端处被准备并针对提交进行验证。一旦提交,队列条目的状态就前进通过这四个流水线流阶段。等待420-指示交易已在ioacceleratorfamily中内部地排队的阶段,其已成功地经过对validatetransaction()的调用,但尚未经由submittransaction()或performtransaction()被提供给供应商驱动器。未决425-指示交易已经由submittransaction()或performtransaction()被提供给供应商驱动器但尚未被处理到资源正活动地被用于扫描输出的点的阶段,如通过从istransactioncomplete()接收假而确定。存活440-指示资源现在活动地用于扫描输出的阶段,如通过从istransactioncomplete()接收真而确定。结束445-指示资源不再活动地用于扫描输出、并且这些资源可以被释放的阶段。显示流水线交易对象交易可由在加速器锁405被保持时在ioacceldisplaypipe::transaction_begin()内创建的ioacceldisplaypipetransaction对象表示。当前用户客户端和加速器在创建时与交易关联。交易所需的所有数据被包含在单个交易对象内。通过设计,交易对象不依赖于其他交易对象。交易对象包含为了执行转变到新的显示流水线状态而需要的所有数据(诸如像素数据、伽玛表、csc矩阵、像素格式和表面维度)。这个示例性实施方案支持每显示管道两个显示平面(由0和1索引)。交易流图4也示出显示流水线交易如何被创建和处理。所有交易被封装在一对用户-客户端调用内:transaction_begin和transaction_end(参见队列元素415)。在开始和结束调用之间,客户端可以根据要求或期望而将交易数据绑定到交易。transaction_begin调用创建“构建中”交易对象并将该对象置于初始队列415中。在所期望数据已绑定之后,用户客户端调用transaction_end,其对交易进行出队并将其调派到供应商具体实施,该交易在那里被下面的硬件和驱动器处理。客户端可自由创建多个交易,受队列的最大大小限制。客户端提供提交时间戳,其确定给定的交易何时被下面的具体实施处理。这使交易能够以任何次序被处理。供应商驱动器首先接收对validatetransaction()的调用以验证交易。在该实施方案中,这是交易流期间用户客户端对于交易有效性能从供应商驱动器接收错误以及供应商驱动器能安全地拒绝该交易的唯一时间。如果验证失败,则用户客户端可以修改并重新提交交易。如果验证成功,则准备交易资源。当所有依赖性对于交易资源都被解析并且所有gpu生成都已完成时,交易资源状态被设置为就绪(参见图4中指示资源状态的元素405)。此时,可请求供应商经由标准ioacceleratorfamily寻呼机制将资源寻呼到gpu上(如果尚不存在的话)。为合并所有资源写入事件的交易创建ioacceleventmachine事件。然后,当在ioaccelerator锁405下且在ioacceldisplaypipe工作循环410内时,经由submittransaction()将交易对象提供给供应商驱动器。如果供应商实施submittransaction(),则供应商不能接受交易失败。当在ioaccelerator锁405下且在ioacceldisplaypipe工作循环410内时,交易对象流进等待队列420。如果供应商不实施submittransaction(),则交易对象流入等待队列420,在那里,将请求供应商经由performtransaction()执行交易。当供应商驱动器经由performtransaction()被调用时,它不在ioaccelerator锁405下,但它在ioacceldisplaypipe工作循环410内。经由submittransaction()或performtransaction()呈现给供应商驱动器的交易对象被放置在未决队列425中。交易对象保持在未决队列425中直到供应商从istransactioncomplete()返回“真”,这表明:未决队列425中的交易已从就绪状态移动到活动状态,这指示交易资源正在用于扫描输出。存活队列440中的交易已被移动到结束队列445。未决队列425中的交易已被移至存活队列440,并且未决队列425被清空。存活队列440中的交易保留在该队列中,直到下一交易将其从存活队列440推到结束队列445。结束队列445中的交易在ioaccelerator锁405和ioacceldisplaypipe工作循环410两者下被清除。任何不再正用于活动扫描输出的交易资源(即,完成状态中)可被清除。在一些实施方案中,coredisplay被要求排他地使用交易,因此供应商驱动器不接收交易性和非交易性具体实施之间的交换请求作为设计选择。供应商交易应用当submittransaction()或performtransaction()被调用时,交易对象可被提供给供应商具体实施。供应商具体实施可针对所需资源状态查询对象,并相应地动作以应用该交易。在一个示例实施方案中,当供应商具体实施接收处理交易的请求时,有三个动作过程:1.在成功处理交易之后,供应商具体实施返回成功状态。2.仅performtransaction():如果供应商具体实施不能在当前时间点处理该交易,则它可返回错误代码returnnotready。返回returnnotready并不从未决队列425中移除该交易。3.如果事件测试未能报告gpu完成处理所述资源,则可启用时间戳中断。在启用戳中断以捕捉戳中断启用和事件测试之间的任何竞争条件之后,可针对完成立即重新测试该事件。在指示gpu仍未完成使用资源的第二失败测试之后,未决交易可留在未决队列中,直到供应商的具体实施发信号通知与交易资源相关联的gpu工作已完成。在该实施方案中,重要的是,供应商理解,根据该实施方案,在供应商驱动器发信号通知ioacceldisplaypipe之前没有任何进一步的交易被处理。如果无效状态或其他限制阻止供应商具体实施处理该交易,则供应商可以以适当的错误代码拒绝该交易。该交易被从未决队列425移除,并且不尝试任何进一步处理。从submittransaction()或performtransaction()返回错误代码导致丢弃该交易,这可能导致用户体验不佳。在submittransaction()或performtransaction()被调用之前,供应商可能希望调用validatetransaction()api以防止遇到错误状态。在供应商具体实施返回成功或错误代码之后,从未决队列425中移除该交易。显示流水线特征块操作(参见图5)在一些情况下,显示管道可以能够支持l/csc/g(线性化、色彩空间校正、伽玛),但可以不能提供一些块(例如,伽玛)的原子控制。驱动器可支持确保原子实现的交易来为一个或多个l/csc/g显示流水线特征块设置(或撤销)旁路,并且驱动器必须在能力标记中指示该支持。bypassinlinedata能力指示与旁路特征相关联的数据必须在启用旁路的同一交易中发送,如图5的示例500所示。bypassinlinedata交易包括:旁路启用、校正帧和流水线特征块数据(诸如伽玛lut或csc系数)。对于许多具体实施,交易被锁存到消隐周期。bypassinlinedata交易优选是原子的,其中具体实施支持特征数据的双缓冲(在软件或硬件中),或者具体实施可在特征块已被置于旁路模式中之后以特征数据对硬件进行编程。如果bypassinlinedata能力不可用于供应商驱动器,则coredisplay生成这些交易,如在图5的示例550中所示。在示例550中,具有l/csc/g标志的第一交易设置具有经校正帧的所选功能块的旁路原子控制。后面可以跟着任意数量的后续交易,每个交易具有经校正帧。这些帧的数量可以为零。然后是具有流水线特征块数据(诸如伽玛lut或csc系数)和经校正帧的交易。后面跟着具有未校正帧和用于撤销旁路的标志的最后交易。这些交易可以被锁存到消隐周期。根据一个示例性实施方案,以下步骤描述从应用程序到窗口服务器(图2的205)到coredisplay(图2的215)到供应商具体实施(图2的230)对像素流的交易支持:1.iopresentment获取供应商驱动器能力标志,包括旁路和交易能力。2.如果供应商驱动器具有在单个原子交易中执行所有流水线特征块处理的能力,则coredisplay可生成将像素数据的未校正帧发送给供应商驱动器并使其执行特征块处理的交易,并且生成准备就绪用于显示的帧。(也可在没有帧数据的情况下发送特征块改变)。3.如果供应商驱动器不具有步骤2中所描述的交易能力,但具有bypassinlinedata能力,则coredisplay应生成这些交易:a)具有经校正像素数据和用于设置所选功能块的旁路原子控制的l/csc/g标志的第一交易。b)具有(从第一交易得到的)未校正像素数据和用于撤销旁路的标记的第二交易。4.如果供应商驱动器没有所描述的bypassinlinedata交易能力,但在没有数据的情况下支持旁路能力,则coredisplay应生成这些交易:a)具有用于设置所选功能块的旁路原子控制的l/csc/g标志的第一交易。b)具有经校正像素数据的第二交易。c)具有(从前两个交易得到的)未校正像素数据和用于撤销旁路的标记的第三交易。如果供应商驱动器不具有步骤4中所描述的交易能力,则不使用供应商驱动器,并且软件解决方案处理帧数据。驱动器确保交易成功和被应用,或者验证失败。在失败情况下,coredisplay应用等同操作并提交新交易,该新交易可旁路iopresentment块。在那些情况下,coredisplay可在将那些帧发送给iopresentment之前使用iopresentment来预应用夜览白点调节。对于此类帧,coredisplay可能提交交易以配置未使用块,使得帧旁路它们。显示流水线交易apiioacceldisplaypipe类api为了支持某些所公开的实施方案,api的可能实施方案在这里仅作为示例进行讨论。在一个示例中,供应商必须实施istransactioncomplete方法,以及performtransaction或submittransaction方法。供应商具有实施validatetransaction方法来在提交之前进行交易验证的选项。供应商可任选地扩展ioacceldisplaypipetransaction类以包括特定于供应商的方法和成员变量,并实施对newdisplaypipetransaction方法的相应改变。istransactioncomplete所要求的供应商具体实施确定显示流水线交易是否已完成。(bool)istransactioncomplete(ioacceldisplaypipetransaction*transaction)返回值如果交易处于活动状态,则返回“真”。如果交易不处于活动状态,则返回“假”。(有关活动状态的描述,参见10.2.1节)。为了正确地支持该功能性,供应商可能需要内部地管理和跟踪交易数据。参数-交易封装显示流水线操作的对象。newdisplaypipetransaction任选的供应商具体实施创建新的显示流水线交易。(ioacceldisplaypipetransaction*)newdisplaypipetransaction(void)返回值返回封装一组显示流水线操作的对象。参数-无submittransaction所要求的供应商具体实施,如果performtransaction没有被实施,在ioaccelerator锁和ioacceldisplaypipe工作循环下被硬件入队用于处理的交易。供应商必须管理对显示翻转的资源隔离,并且具有对交易的fevent的访问权限,该fevent是与交易相关联的所有资源写入事件的合并。(ioreturn)submittransaction(ioacceldisplaypipetransaction*transaction)返回值如果交易要经由performtransaction处理,则返回kioreturnunsupported。如果交易被成功处理,则返回kioreturnsuccess。返回在iokit/ioreturn.h中定义的任何其他错误就导致丢弃交易。供应商必须不使该调用失败。根据供应商架构,供应商可能需要管理内部地到其驱动器的转变的入队/出队。参数-交易封装显示流水线操作的对象。performtransaction所要求的供应商具体实施,如果submittransaction没有被实施,在ioacceldisplaypipe工作循环下被硬件入队用于处理的交易。在该方法被调用时,不取ioaccelerator锁。(ioreturn)performtransaction(ioacceldisplaypipetransaction*transaction)返回值如果交易被成功处理,则返回kioreturnsuccess。如果交易在当前时间点不能被处理,则返回kioreturnnotready。如果交易根本不能被处理,则返回在iokit/ioreturn.h中定义的某个其他错误。从队列中移除该交易,并且供应商没有进一步的机会来处理该交易。实际上,该交易被丢弃。参数-交易封装显示流水线操作的对象。validatetransaction任选的供应商具体实施,但强烈推荐在交易使其资源被准备好、使事件被创建并被入队之前,验证该交易。这是供应商拦截和验证特定于供应商的要求的唯一机会。验证之后,该交易必须无误地被处理。如果validatetransaction()没有被实施或者如果其在没有同步验证的情况下被实施,则所述具体实施必须支持5.3.6.2节(表20)中描述的回退行为。如果交易包含无效同步类型,则validatetransaction()失败。(ioreturn)validatetransaction(ioacceldisplaypipetransaction*transaction)返回值如果交易得到验证,则返回kioreturnsuccess。参数-交易封装显示流水线操作的对象。submitflipbuffertransaction供应商不实施该方法这提交固定功能交易,该固定功能交易导致交易对象的分配,固定状态的应用(csc身份矩阵)、交易对象到交易队列的尾部上。返回值无参数-无ioacceleventmachine类apienablestampinterruptdisablestampinterrupt所要求的供应商具体实施对ioacceldisplaypipetransaction工作循环的时间戳更新的gpu中断的启用或禁用递送。(void)enablestampinterrupt(int32_tstamp_idx)(void)disablestampinterrupt(int32_tstamp_idx)返回值无参数-stamp_idx要启用/禁用的戳索引在某些实施方案中,供应商必须实施时间戳中断以供ioacceldisplaypipetransaction工作循环使用。交易事件是包含在交易内的资源写入事件的合并,并且该交易事件用于隔离对显示翻转的资源的gpu利用。如果事件测试未能报告gpu完成处理资源,则启用时间戳中断。在启用时间戳中断以捕捉时间戳中断启用和事件测试之间的任何竞争条件之后,立即针对完成重新测试该事件。在指示gpu仍未完成使用资源的第二失败测试之后,未决交易留在未决队列中,直到供应商的具体实施发信号通知与交易资源相关联的gpu工作已完成。重要的是,供应商理解在供应商驱动器调用ioacceleventmachine::signalstamp()来以信号通知ioacceldisplaypipe之前没有任何进一步的交易被处理。实施submittransaction()的供应商必须管理对其显示引擎更新的gpu资源的隔离。fevent是ioacceldisplaypipetransaction类的受保护成员,允许供应商驱动器对其访问。ioacceldisplaypipetransaction类api以下方法作为参考被提供,并且不应被视为以任何方式进行限制。getpipecolormatrix返回相关联的色彩矩阵,如果绑定的话。(sioacceldisplaypipecolormatrix)getpipecolormatrix(void)const返回值浮点的3x4矩阵。参数无相关定义这以sioacceldisplaypipecolormatrix结构返回色值。返回与色彩矩阵相关联的扩展变元,如果绑定的话。(有关详细信息,参见10.4节中的configurationid)。(sioacceldisplaypipecolormatrixargs)getpipecolormatrixargs(void)const返回值描述色彩矩阵的对象。参数无相关定义这以sioacceldisplaypipecolormatrixargs结构返回值。返回相关联的后csc伽玛表对象(类似于iofbsetgamma),如果绑定的话。供应商具体实施可能需要将值转换成适当的硬件格式。(ioacceldisplaypipegammatable*)getpipepostgammatable(void)const返回值包装对象以sioacceldisplaypipegammatabledata结构包含后csc伽玛条目。参数-无相关定义所返回的ioacceldisplaypipegammatable对象包含描述伽玛表的sioacceldisplaypipegammatabledata结构。返回相关联的前csc线性化伽玛表对象,如果绑定的话。供应商具体实施可能需要将值转换成适当的硬件格式。(ioacceldisplaypipegammatable*)getpipepregammatable(void)const返回值包含前csc伽玛条目的浮点表。参数-无相关定义参见getpipepostgammatable。getplaneiosurface返回与平面和立体索引相关联的iosurface对象。如果绑定的话,iosurface和/或ioaccelresource可表示与交易相关联的像素数据。例如,如果供应商实施submitflipbuffertransaction,则对于相关联的交易不存在任何iosurface对象。(iosurface*)getplaneiosurface(uint32_tplaneindex,uint32_tstereoindex)const返回值与平面和立体索引相关联的iosurface。参数-planeindex该交易的平面;stereoindex-该交易的立体索引getplaneresource返回与平面和立体索引相关联的ioaccelresource对象。如果绑定的话,ioaccelresource和/或iosurface可表示与交易相关联的像素数据。(ioaccelresource*)getplaneresource(uint32_tplaneindex,uint32_tstereoindex)const返回值与平面和立体索引相关联的ioaccelresource。参数-planeindex该交易的平面;stereoindex-该交易的立体索引getplanesrcrect返回与平面相关联的资源的源矩形。(sioacceldisplayrect)getplanesrcrect(uint32_tplaneindex)const返回值与平面相关联的资源的源矩形。参数-planeindex该交易的平面相关定义所返回的sioacceldisplayrect结构指定源矩形。typedefstructioacceldisplayrect{floatx;floaty;floatw;floath;}sioacceldisplayrect;gettransactiondirtybits返回定义什么状态已被绑定到交易的脏位。供应商驱动器可以使用这些来确定什么信息需要从交易对象拉取。(uint64_t)gettransactiondirtybits;(void)const返回值与交易相关联的脏位。参数-无gettransactionid返回与该交易相关联的id。(uint32_t)gettransactionid;(void)const返回值交易id。参数-无gettransactionoptions返回与已为交易设置的显示管道相关联的选项。(uint32_t)gettransactionoptions;(void)const返回值交易选项。参数-无相关定义gettransactionoptions返回eioacceldisplaypipetransactionoption选项值。以下ioacceldisplaypipetransaction方法当前未实施且不支持。getpipescalerstate当前未使用(sioacceldisplaypipescaler)getpipescalerstate;(void)const;返回值与显示管道相关联的缩放器。参数-无getplanedstrect返回相关联平面的目标矩形。(sioacceldisplayrect)getplanedstrect;(uint32_tplaneindex)const返回值与平面相关联的资源的目标矩形。参数-planeindex该交易的平面getplanegammatable返回相关联平面的伽玛数据。(ioacceldisplaypipegammatable*)getplanegammatable;(uint32_tplaneindex)const返回值关联到所指定平面的伽玛表对象,如果绑定的话。伽玛表条目作为浮点被提供。供应商具体实施可能需要将表条目值转换成适当的硬件格式。参数-planeindex该交易的平面getplanetransactionoptions返回与已为交易设置的显示平面相关联的选项(参见gettransactionoptions)。(uint32_t)getplanetransactionoptions;(uint32_tplaneindex)const返回值与为交易设置的平面相关联的选项。参数-planeindex该交易的平面相关定义参见gettransactionoptions,对于所返回的eioacceldisplaypipetransactionoption选项值。gettimestamp当前未使用(uint64_t)gettimestamp;(void)const;返回值交易的时间。参数-无现在参考图6,其示出了根据一个实施方案的例示性多功能电子设备600的简化功能框图。多功能电子设备600可包括处理器605、显示器610、用户界面615、图形硬件620、设备传感器625(例如,接近传感器/环境光传感器、加速度计和/或陀螺仪)、麦克风630、音频编解码器635、扬声器640、通信电路645、数字图像捕获电路650、视频编解码器655(例如,支持数字图像捕获单元650)、存储器660、存储设备665和通信总线670。多功能电子设备600可是例如数码相机或个人电子设备,例如个人数字助理(pda)、个人音乐播放器、移动电话或平板电脑。处理器605可执行为了执行或控制由设备600执行的许多功能的操作所必需的指令(例如,诸如本文所公开的显示流水线的交易接口)。处理器605可例如驱动显示器610并可从用户界面615接收用户输入。用户界面615可允许用户与设备600交互。例如,用户界面615可呈现多种形式,诸如按钮、小键盘、拨号盘、点击轮、键盘、显示屏和/或触摸屏。处理器605也可以例如是片上系统,诸如存在于移动设备中的那些,并且可包括专用gpu。处理器605可基于精简指令集计算机(risc)架构或复杂指令集计算机(cisc)架构或任何其他合适的架构,并且可包括一个或多个处理内核。图形硬件620可以是用于处理图形和/或辅助处理器605以处理图形信息的专用计算硬件。在一个实施方案中,图形硬件620可包括可编程gpu。图像捕获电路650可包括镜头组件680。镜头组件可具有相关联的传感器元件690。另选地,两个或更多个透镜组件可共用共同的传感器元件。图像捕获电路650可捕获静态图像和/或视频图像。通过以下设备至少部分地可处理来自图像捕获电路650的输出:视频编解码器655和/或处理器605和/或图形硬件620、和/或结合在图像捕获电路650内的专用图像处理单元或管道。这样捕获的图像可被存储在存储器660和/或存储装置665中。传感器和图像捕获电路650可捕获可至少部分地由以下设备根据本公开进行处理的静态图像和视频图像:视频编解码器655和/或处理器605和/或图形硬件620、和/或结合在图像捕获电路650内的专用图像处理单元。这样捕获的图像可被存储在存储器660和/或存储装置665中。存储器660可包括由处理器605和图形硬件620用于执行设备功能的一个或多个不同类型的介质。例如,存储器660可包括存储器高速缓存、只读存储器(rom)、和/或随机存取存储器(ram)。存储装置665可存储介质(例如,音频文件、图像文件和视频文件)、计算机程序指令或软件、偏好信息、设备配置文件信息以及任何其它合适的数据。存储装置665可包括一个或多个非暂态存储介质,所述非暂态存储介质包括例如磁盘(固定硬盘、软盘和可移动磁盘)和磁带、光学介质诸如cd-rom和数字视频光盘(dvd)、以及半导体存储器设备诸如电可编程只读存储器(eprom)、和电可擦除可编程只读存储器(eeprom)。存储器660和存储装置665可用于有形地保持被组织成一个或多个模块并以任何所需的计算机编程语言编写的计算机程序指令或代码。在例如由处理器605执行时,此类计算机程序代码可实现本文所述的方法中的一者或多者。configurationid(参见图7)第三方供应商通常为软件供应商提供硬件规范,其详细描述其设备的硬件特征集。这些规范为软件供应商提供为了通过其他方式(例如,着色器)模拟硬件功能性而需要的详细信息。通过引入ioacceldisplaypipe交易模型,供应商和软件提供方可相互决定实施供应商提供的configurationid,其定义给定供应商的“配置”,并且可捕获从供应商到供应商以及设备到设备的显示流水线特征的不同具体实施。configurationid描述不能以现有能力字段或在查询函数中准确描述的复杂特征和功能性。在一个实施方案中,configuratonid是供应商定义的uint64_t令牌,其描述硬件和特定特征。configurationid最好被描述为用于记录代码内功能性的代码外方式,并且供应商可实施由软件供应商的需求和供应商硬件的限制确定的configurationid支持。供应商必须以足够详细的方式记录configurationid,以允许软件供应商适当地以预期结果利用配置。要以软件供应商可访问的方式记录特征的确切详细信息,诸如其受限的预期使用。规范、configurationid、以及configurationid与配置的关联向软件供应商描述如何最好地利用硬件以及如何为色彩空间校正(csc)、线性化和/或伽玛的特定配置准备经由iopresentment(交易路径)传递给驱动器的内容。configurationid和格式例如,configurationid可以是由四个16位组分构成的64位值:pci供应商id、pci设备id、pci修订id和供应商提供的id。以此方式提供pci供应商id、pci设备id、pci修订id和供应商提供的id就允许软件供应商快速执行适当的查找并满足软件供应商和供应商对可用功能性的选择的需求。每个供应商有其自己的硬件特征集。各个特征系联到其硬件,并且可能系联到其硬件的特定修订。configurationid的前三个组分(48位)系联到供应商和硬件设备。最后一个组分(16位):供应商提供的id对于管理硬件的软件是唯一的。前48位的值由硬件确定,但供应商在如何选择最后16位方面有自由。configurationid必须是唯一的,并代表csc、线性化或伽玛的单个配置。有相同值的configurationid代表两个不同的配置是无效的。区别仅在于供应商提供的id(即,具有相同的pci供应商id、pci设备id和pci修订id,但在最后16位中的值不同)的configurationid指定单个硬件具体实施支持的多个软件配置。此外,供应商可按某种逻辑方式预留位以标识功能性的特定配置。例如,在表700中,供应商选择使用供应商提供的id的最后4位来表示csc配置,使用最后4位前面近邻的4位表示伽玛配置,然后前面近邻的4位表示线性化配置,其中设备的多个族或修订共享硬件功能性。另外,供应商可以跨设备或修订来实施供应商提供的id位组织。例如,表750示出具有一致地表示相同软件配置的configurationid的两个不同设备。上文所述的系统和方法可以软件、硬件、固件或它们的任何组合来实现。所述过程优选地在一个或多个计算机程序中实施,所述一个或多个计算机程序在计算机或其他可编程设备上执行,所述计算机或其他可编程设备包括处理器、所述处理器能读取的存储介质以及输入和输出设备。每个计算机程序可以是驻留在计算机的随机存取存储器中的代码模块中的一组指令(程序代码)。在计算机需要之前,所述指令集可被存储在另一计算机存储器中(例如,在硬盘驱动器中,或在可移除存储器诸如光盘、外部硬盘、存储卡或闪存驱动器中),或被存储在另一计算机系统上并经由互联网或其他网络下载。因此,已经描述了若干示例性实施方案,应当理解,本领域的技术人员将容易地想到各种改变、修改和改进。此类改变、修改和改进旨在形成本公开的一部分,并且旨在在本公开的实质和范围内。虽然本文给出的一些示例涉及功能或结构元件的特定组合,但应当理解,那些功能和元件可根据本公开以其他方式组合来实现相同或不同的目的。具体地讲,结合一个实施方案讨论的动作、元件和特征不旨在被排除在其他实施方案中的类似或其他角色之外。另外,本文所述的元件和组分可进一步分成附加组分或者接合在一起形成更少的组分用于执行相同的功能。本公开所公开的主题的范围应该参考所附权利要求书以及权利要求书的等同物的全部范围来确定。在所附权利要求书中,术语“包括(including)”和“其中(inwhich)”被用作相应术语“包括(comprising)”和“其中(wherein)”的通俗英语等同形式。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1