CN1728093A - 生成比特块传输函数的交叉平台运行时间代码 - Google Patents

生成比特块传输函数的交叉平台运行时间代码 Download PDF

Info

Publication number
CN1728093A
CN1728093A CNA2005100922522A CN200510092252A CN1728093A CN 1728093 A CN1728093 A CN 1728093A CN A2005100922522 A CNA2005100922522 A CN A2005100922522A CN 200510092252 A CN200510092252 A CN 200510092252A CN 1728093 A CN1728093 A CN 1728093A
Authority
CN
China
Prior art keywords
bitblt
special
function
code
machine language
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.)
Granted
Application number
CNA2005100922522A
Other languages
English (en)
Other versions
CN100498696C (zh
Inventor
J·R·斯路易斯
J·W·布克曼
K·D·卢蒂斯
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of CN1728093A publication Critical patent/CN1728093A/zh
Application granted granted Critical
Publication of CN100498696C publication Critical patent/CN100498696C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units

Abstract

一种示意性的用于完成比特块传输(bitblt)的方法,包括:接收一个或多个指定该bitblt的图形参数,以及生成用于完成该bitblt的专用bitblt函数。该专用的bitblt函数包括基于该图形参数从代码块超集中选择出的一个或多个代码块。一种系统,包括一个专用的比特块传输(bitblt)函数产生器,用于生成一个专用的bitblt函数以完成规定的bitblt。该专用的bitblt函数包括与指定该bitblt的一个或多个图形参数相应的中间语言代码。一个翻译器将该专用的bitblt函数翻译成专用机语言代码。

Description

生成比特块传输函数的交叉平台运行时间代码
技术领域
本发明所描述的主题涉及计算机中的数据传输,更特别地,是涉及生成比特块传输函数的交叉平台运行时间代码。
背景技术
在计算的某些领域,经常需要从一个存储器位置向另一个存储器位置传输矩形比特块。例如,在视频博弈中,表示一个图像或平面的比特块可以从系统存储器传输到视频存储器以用于向用户显示。这种数据传输通常被称为比特块传输(bitblt)。在视频博弈中,bitblt应当是非常迅速的,以至于使图形表现是平滑的并且无显著延迟地显示给用户。在缺少复杂的图形硬件,例如图形加速卡的计算机中,bitblt通常由仿真图形硬件的软件来完成,例如仿真软件。
bitblt函数通常不仅包括数据块的传输,还包括在数据上完成的操作。例如,在数据块从一个存储器位置向另一个存储器位置传输的同时,可对数据块应用透明度操作。也可以根据情况完成其它操作,例如光栅操作(ROP)、拉伸、收缩以及颜色转换。在bitblt期间可以要求各种操作的任何组合。
bitblt软件研发者典型地开发管理所有所需的bitblt操作的代码。不幸的是,开发bitblt软件函数的传统方法在代码大小和代码性能之间充斥着不同的折中方案。两种常用的方法包括:(1)写入许多(例如,几百个)函数,其中每一个函数都用于一个bitblt操作,以便在所有情况下获得软件bitblt的最佳性能,或者(2)写入一个(或较小数量的)bitblt函数,通过在该函数内对正确的bitblt操作进行分支来完成任意的bitblt。第一种方法可带来快速的bitblt性能,但代码的大小非常庞大。第二种方法具有合理的代码大小,但由于对正确的bitblt操作进行分支所带来的开销使得bitblt性能变慢许多。
另外,传统的bitblt函数不能对运行时间进行优化。在系统调用之前,传统的bitblt函数典型地被编码并被编译成用于特定目标平台(例如微处理器)的机器代码。虽然传统的bitblt函数,作为一个整体,可在编译的时候为该目标平台进行速度(或大小)的优化,可是一旦进行了编译,传统bitblt函数中的特定操作(例如ROP、透明度等等)就不能在调用后进一步进行速度的优化。当使用一个bitblt函数,并且对特定bitblt操作进行分支时,分支操作就会导致对该特定操作的性能的次优化。
发明内容
在这里描述并要求用于在运行时间内生成专用的比特块传输(bitblt)函数的实现方式。专用的bitblt函数完成一个或多个bitblt操作,并从bitblt操作的超集中生成。该专用的bitblt函数由中间语言代码构成,它在运行时间内被翻译成专用平台机器语言代码。能够显著地优化该专用的bitblt函数在运行时间内的速度。
附图说明
图1示出了生成比特块传输函数的运行时间代码的示意性比特块传输(bitblt)系统,以用于在对数据块完成一个或多个图形操作的同时将数据块从一个位置传输到另一个位置;
图2示出了用于生成完成一个规定的bitblt操作的专用bitblt函数的算法;
图3示出了用于实现生成bitblt函数的交叉平台运行时间代码的通用目的计算机。
具体实施方式
示意性的比特块传输系统
图1示出了用于在对数据块完成一个或多个图形操作的同时,将该数据块从一个位置传输到另一个位置的示意性比特块传输(bitblt)系统100。该bitblt系统100能够以诸如图3所示的通用目的计算机那样的一种通用目的计算机来实现,或者以诸如博弈系统的专用计算机来实现。
该bitblt系统100包括完成一个规定的bitblt操作的bitblt模块102。该bitblt模块102典型地以软件模块来实现,虽然它也可以用硬件、固件或这些技术的组合来实现。
通常,bitblt模块102接收指定一个特定bitblt操作的图形参数104,并将数据块从源106传输到目的地108。典型地在对bitblt模块102的函数调用过程中提供图形参数104。包含在图形参数104中的是用于指定要在数据块上完成的任意操作的信息,其中该数据块要在bitblt操作中进行传输。包含在图形参数104中的还有用于源106和目的地108的标识符。
源106是一个存储器位置,数据块从这里进行传输,而目的地108是该数据块传输到的存储器位置。源106和目的地108可以是任意种类的存储器,包括,但不限制于系统存储器或视频存储器。源106和目的地108可以用指针在图形参数104中进行指定。该图形参数104还可以指定在bitblt操作期间使用的其他存储器位置,例如图象存储器(未示出)和掩模存储器(未示出)。
最初,执行程序110接收图形参数104。该执行程序110是bitblt模块102中的逻辑部件,它使用该图形参数104来判断要怎样执行规定的bitblt操作。执行程序110可生成专用bitblt函数,然后执行该函数以完成该规定的bitblt操作。执行程序110还在高速缓存112中存储所生成的bitblt函数,并且用唯一的bitblt签名对专用的所生成的bitblt函数进行标注,其中该签名标识了专用的所生成的bitblt函数。如果将来需要专用的bitblt函数的话,就从该高速缓存中接收,而不是重新生成一个。
因此,当执行程序110接收图形参数时,该执行程序110调用bitblt签名产生器114。这种对bitblt签名产生器114的调用包括图形参数104。基于该图形参数104,bitblt签名产生器114创建一个唯一标识所需的bitblt操作的bitblt签名。由bitblt签名产生器114所完成的操作的示意性实现方式将在图2中示出并将在下面进一步讨论。
执行程序110使用从bitblt签名产生器114中生成的bitblt签名,来判断专用的bitblt函数是否已存在于高速缓存112中,或者确定是否需要生成一个专用的bitblt函数。执行程序110在高速缓存112中搜索一个其bitblt签名等于bitblt签名产生器114所生成的bitblt签名的专用bitblt函数。如果在高速缓存112中找到一个具有规定的bitblt操作的bitblt签名的专用bitblt函数,那么执行程序就执行那个专用的bitblt函数。
如果没有在高速缓存112中找到具有生成的bitblt签名的bitblt函数,那么执行程序110就调用bitblt函数产生器116来生成一个专用的bitblt函数以完成规定的bitblt操作。bitblt函数产生器116通过从bitblt代码块的超集118中选择一个或多个代码块来生成该专用的bitblt函数。bitblt代码块的超集118中的每个代码块,在被执行时完成一个bitblt操作或一个bitblt操作的一部分。Bitblt函数产生器116从代码块的超集118中选择代码块或多个代码块,并将选出的代码块或多个代码块复制到专用的bitblt函数中。
bitblt函数产生器116使用一个或多个数据结构120,以便从bitblt代码块的超集118中选择代码块。数据结构120提供关于bitblt代码块的超集118的信息,例如偏移量、代码块大小,以及指出是否将来自bitblt代码块的超集118的代码块复制到专用bitblt函数的条件信息。下面将示出在为专用bitblt函数选择代码块所使用的示意性数据结构120,并在下面对其进一步描述。
在bitblt代码块的超集118的一个实现方式中,代码块表现为中间语言(IL)代码。术语IL指的是一种目标语言,以源语言形式的单句或源程序的全部或一部分在进行进一步的翻译或解释之前都要翻译成这种目标语言。IL代码通常是平台,或者是独立于微处理器的。因此,IL代码可进入到任何平台,其中该平台具有用于将IL代码翻译(或解释)成可在特定平台上执行的专用机语言的翻译器(或解释器)。在该实现方式中,bitblt函数产生器116基于bitblt代码块的超集118中的IL代码块,以IL代码创建一个专用的bitblt函数。
bitblt函数翻译器122将专用的bitblt函数的IL代码翻译成专用机(或特殊平台)代码。该bitblt函数翻译器的一种特定的实现方式包括一台虚拟机,例如来自微软公司的NET平台。
在将专用的bitblt函数翻译成专用机代码之后,该专用机的专用bitblt函数就存储在高速缓存112中。在高速缓存112的一种实现方式中,所生成的bitblt使用一种固定大小的函数高速缓存,以便最小化整个bitblt代码的大小。
专用bitblt函数被存储在高速缓存112中,并使用该专用bitblt函数的bitblt签名从中对其进行检索。从高速缓存112中,如果将来需要相应的bitblt操作,就能够再次执行这种专用的bitblt函数。
另外,在将专用的bitblt函数翻译成专用机语言代码之后,优化模块124可以优化该专用bitblt函数。可以为所有的专用bitblt函数进行优化,或者也可以只为那些可被访问多于规定的次数的专用bitblt函数进行优化。优化可包括移走不必要的代码线,重新排列代码线,或相反,以便改善专用的bitblt函数的性能。
在bitblt代码块的超集118的一种实现方式中,bitblt代码块包含在通用的bitblt函数中。下面将示出以中间语言代码来表示的示意性的通用bitblt函数的一小部分。为了便于解释说明,只示出了14行中间语言代码。实际上,通用的bitblt函数的一种实现方式典型地将包含许多行IL代码(例如,几千行)。
  gb_1_0           ;Offset=0

  if b0            ;Offset=1

      mov r0,0     ;Offset=3

  endif            ;Offset=6

  if b1            ;Offset=7

      mov r0,2     ;Offset=9

      if b2         ;Offset=12

          mov r0,3  ;Offset=14

      endif         ;Offset=17

  else              ;Offset=18

      mov r0,4      ;Offset=19

      mov r0,5      ;Offset=22

  endif             ;Offset=25

  eof               ;Offset=26
通用bitblt函数的每行代码的偏移量将代码的相应线的(字节形式的)地址偏移量提供到通用bitblt函数。
通用bitblt函数可被设计为完成任意的bitblt操作,包括,但不限制于拉伸、收缩、透明度、Alpha合成、颜色转换、任一种256三重光栅操作(ROP3)、使用掩模来选择两种不同的ROP3,或者这些操作的组合。对于一种特定的bitblt操作,将不会执行这些操作中的某些操作(例如,拉伸和收缩是互斥的,颜色转换只在两种不同的格式而不是所有不同的格式之间执行,等等)。生成只包括完成特定bitblt操作所必须的代码的专用bitblt函数。
在一个特定的实现方式中,专用bitblt函数产生器116最初基于bitblt签名来加载一组IL寄存器。在该实现方式中,IL寄存器数据结构中的b寄存器(b0-b31)加载来自bitblt签名的数据。下面是b寄存器如何加载的一个实例:
b0:Blt Signature SolidFill
b1:Blt Signature ScanXPositive
b2:Blt Signature ScanYPositive
b3:Blt Signature StretchX
b4:Blt Signature StretchY
b5:Blt Signature ShrinkX
b6:Blt Signature ShrinkY
b7:Blt Signature SourceConstantAlpha
b8:Blt Signature PerPixelAlpha
b9:Blt Signature SrcColorKey
b10:Blt Signature DstColorKey
b11:True if the destination is in video memory
b12:True if the source is in video memory
b13:True if the pattern is in video memory
b14:True if the mask is in video memory
b15:Blt Signature MirrorX
b16:Blt Signature MirrorY
b17:Blt Signature Lookup
b18:Blt Signature Convert
b19:True if any of b3,b4,b5,or b6 is true
b20:True if the destination is used as part of the ROP3
b21:True if the source is used as part of the ROP3
b22:True if the pattern is used as part of the ROP3
b23:True if the mask is used as part of the bitblt
b24:True if the ROP3 is used as part of the bitblt
b25:True if the source is 24 bits per pixel
b26:True if the destination is 8 bits per pixel
b27:True if the destination is 16 bits per pixel
b28:True if the destination is 24 bits per pixel
b29:True if the destination is 32 bits per pixel
下面将更加详细地讨论示意性的bitblt签名数据。
在以bitblt签名数据加载b寄存器之后,专用bitblt函数产生器116在通用bitblt函数中单步调试代码块,并基于b寄存器中的值以及数据结构120中的值来判断哪一代码块应当复制到专用bitblt函数中。用于非必须的操作的代码不需要从通用bitblt函数中复制到专用bitblt函数中。
数据结构120的一种实现方式包括3个表,专用bitblt函数产生器116使用这3个表来判断是否要将一个代码块复制到专用bitblt函数中,这3个表为:不变量表、Rop3表和转换表。不变量表是首先使用的表,它描述了需要专用bitblt函数的什么指令来完成特定的bitblt操作。Rop3表指出256个ROP3操作的每一ROP3操作需要什么指令。转换表指出在任意两个颜色格式之间进行转换需要哪些指令。下面将按照C语言的结构来示出并描述不变量表、ROP3表和转换表的示意性定义。
不变量表
struct
{
short Offset;
short Condition;
short Size;
short Skip;
}  InvariantTable[256];
参考上面的示意性的不变量表,Offset字段表示从通用的bitblt函数的开始到当前代码块的开始的DWORD的数量。代码块是不变量表中的一个项目所涉及的连续的中间语言指令。
Condition字段可呈现3种不同的意义。如果Condition是0,那么这个代码块就不是一个条件块,它应当被复制到专用bitblt函数中。如果Condition比0大,然后如果寄存器b[Condition-1]是真,那么该块应当被复制,但如果寄存器b[Condition-1]是假,那么该块就被跳过。如果Condition小于0,然后如果寄存器b[Conditon-1]是真,那么代码块就被跳过,但如果寄存器b[Condition-1]是假,那么块就被复制到专用bitblt函数。
不变量表的Size字段表示要复制到专用bitblt函数的代码块的(DWORD)大小。Skip字段表示为到达下一代码块而要跳过的DWORD的数量。
Rop3表
struct
{
    short Offset;
    BYTE Size;
    BYTE Rop3;
}  Rop3Table[256];
Offset字段表示从通用bitblt函数的开始到控制特定的ROP3代码的代码块的开始的DWORD数量。Size字段表示要复制到专用bitblt函数中的代码块的(DWORD)大小。Rop3字段是与该代码块相关的ROP3代码,其中该代码块由该表的这一项所引用的代码块。
转换表
struct
{
    short Offset;
    BYTE Size;
    BYTE Convert;
}  ConvertTable[256];
Offset字段表示从通用bitblt函数的开始到控制特定的颜色转换处理的块的开始的DWORD数量。Size字段表示要复制到专用bitblt函数的代码块的(DWORD)大小。Convert字段是与该代码块相关的颜色转换代码,其中该代码块由该表的这一项所引用的代码块。
现在描述使用这3个表的方式。如上所述,基于与一个规定的bitblt操作相应的bitblt签名对b寄存器(b0-b31)进行初始化。然后使用b寄存器的状态以从该通用bitblt函数和这3个表中构建该专用的bitblt函数。
相对于这些表而使用下列规则以便产生一个专用的bitblt函数:
1.如果Condition字段是0,那么将Size DWORD复制到专用的bitblt函数,并且在通用的bitblt函数中跳过Skip DWORD。
2.如果Condition变量是正的并且相关的b寄存器是真,就跳过“if”指令。如果b寄存器是假,就在通用的bitblt函数中跳过Skip DWORD。
3.如果Condition变量是负的并且相关的b寄存器是真,就在通用的bitblt函数中跳过Skip DWORD。如果b寄存器是假,就跳过“else”指令。
为了示出如何使用这些表,下面将示意性地示出不变量表并示意性地给出具体方案。下列实例是基于上面示意性示出的通用bitblt函数的示范性部分。为了便于说明,下面示意性地列出IL代码:
  gb_1_0           ;Offset=0

  if b0            ;Offset=1

      mov r0,0     ;Offset=3

  endif            ;Offset=6

  if b1            ;Offset=7

      mov r0,2     ;Offset=9

      if b2         ;Offset=12

          mov r0,3  ;Offset=14

      endif         ;Offset=17

  else              ;Offset=18

      mov r0,4      ;Offset=19

      mov r0,5      ;Offset=22

  endif             ;Offset=25

  eof               ;Offset=26
表1:示意性的不变量表
   Offset   Condition    Size    Skip
    0     0     1     1
    1     1     3
    3     0     3     3
    6     0     0     1
    7     2     9
    9     0     3     3
    12     3     4
    14     0     3     3
    17     0     0     1
    18     -2     6
    19     0     6     6
    25     0     0     1
    26     0     1     1
在上面的不变量表中,Offset列包含进入通用bitblt函数的偏移量。当Condition字段是0时,Size字段所指出的相当数量的代码就会从在该Offset字段所示出的偏移量开始,被复制到专用的bitblt函数中。在给出上述示意性的不变量表和上述示意性的通用bitblt函数的情况下,假设b0是真,b1是假,以及b2是真,那么所得的专用bitblt函数就是:
gb_1_0
mov r0,0
mov r0,4
mov r0,5
eof
作为另一个实例,如果b0是假,b1是真,以及b2是真,那么使用上面的不变量表和通用bitblt函数,所得的专用bitblt函数就是:
gb_1_0
mov r0,2
mov r0,3
eof
在运行时间上通过以下方式产生表格,即通过分析通用bitblt函数,查找跟随着一个可选的“else”指令的指令“if<b-register>”,而并且可选的“else”指令跟随着的一个所需的“endif”指令。指令“ifb18”指的是应当使用转换表,指令“ifb24”指的是应当使用Rop3表。
在特定的实现方式中,遵循下列规则来构建这些表:
1.一个“ifb<N>”指令可产生一个项目,该项目具有正Condition值(<N>+1),Size被忽略并且Skip被设置为DWORD的数量,直至出现与“if”执行相应的“else”或“endif”指令。
2.一个“else”指令可产生一个项目,该项目具有负Condition值-(<N>+1),Size被忽略并且Skip被设置为DWORD的数量,直至与“endif”指令匹配。
3.一个“endif”指令可产生一个项目,该项目中Condition数是0,Size为0以及Skip为1。
4.不包括“if”,“else”或“endif”的指令块被分组在表中Condition值为0的一个项目中,并且Size和Skip变量是当前指令块的DWORD数量。
示意性的bitblt签名和bitblt生成过程
在bitblt签名产生器的一个特定的实现方式中,一个C结构(被称为BltSignature)以3个主要部分来组成:一个32位值,其用作包含关于规定的bitblt操作的信息的一个比特字段,一个16位值,其提供了关于要由bitblt操作的该比特块或多个比特块的格式的附加信息,以及另一个16位值,它包括用于专用bitblt操作的一个或多个ROP代码。在这种示意性的实现方式中,比特块被称为表面,它指的是一块像素数据。下列图表示出了BltSignature结构的布局,以及每个位的意义。
BltSignature结构:
字段名                 比特数量
DstFormat                 4
SrcFormat                 4
BltMode                   5
PatternType               1
ScanXPositive             1
ScanYPositive             1
UseStretch                4
UseAlpha                  2
ColorKeyType              2
DstMemory                 1
SrcMemory                 1
PatMemory                 1
MaskMemory                1
MirrorX                   1
MirrorY                   1
Lookup                    1
Convert                   1
Dst8Bpp                   1
Dst16Bpp                  1
Dst24Bpp                  1
Dst32Bpp                  1
Src24Bpp                  1
Unused                    11
ForegroundRop             8
BackgroundRop             8
前述的BltSignature结构能够以C编程语言或任意其它的适当的语言来实现。BltSignature的每个字段如下所述:
DstFormat and SrcFormat:
0  This is an invalid format number
1  The pixel format is ARGB8888
2  The pixel format is ABGR8888
3  The pixel format is RGB888
4  The pixel format is BGR888
5  The pixel format is RGB565
6  The pixel format is RGB555
7  A surface with a color palette
8  A 1 bit per pixel surface.
   Some unknown format type that uses bit
9  masks.
BltMode和Unused字段可以忽略。
Pattern Type:
0 A solid color
1 A bitmap pattern
ScanXPositive:
0 Process pixels in the-X direction.
1 Process pixels in the X direction
ScanYPositive:
0 Process pixels in the-Y direction
1 Process pixels in the Y direction
UseStretch:
0 No stretching or shrinking
1 Stretching in the X direction
2 Stretching in the Y direction
4 Shrinking in the X direction
8 Shrinking in the Y direction
UseAlpha:
0 No AlphaBlending
1 Use source constant alpha
2 Use per-pixel source alpha
ColorKeyType:
0 No color key
1 The source has a color key
2 The destination has a color key
DstMemory,SrcMemory,PatMemory,MaskMemory:
0 Video Memory
1 System Memory
MirrorX:
0 Don′t flip the source surface about the X axis
1 Flip the source surface about the X axis
MirrorY:
0 Don′t flip the source surface about the Y axis
1 Flip the source surface about the Y axis
Lookup:
0 Don′t use a color lookup table
1 Use a color lookup table
Convert:
0 Don′t use color conversion
1 Use color conversion
Dst8Bpp:
0 The destination is not 8 bits per pixel
1 The destination is 8 bits per pixel
Dst16Bpp:
0 The destination is not 16 bits per pixel
1 The destination is 16 bits per pixel
Dst24Bpp:
The destination is not 24 bits per
0 pixel
1 The destination is 24 bits per pixel
Dst32Bpp:
0 The destination is not 32 bits per pixel
1 The destination is 32 bits per pixel
Src24Bpp:
0 The source is not 24 bits per pixel
1 The source is 24 bits per pixel
在这种特定的实现方式中,ForegroundRop和BackgroundRop都是指定与规定的bitblt操作相关的光栅操作的ROP3代码。
现在要描述一个示意性的具体方案,以示出如何基于从bitblt函数调用中接收的图形参数来生成bitblt签名。
假设一个应用程序以下列调用来调用bitblt函数BitBlt():BitBlt(hdc,0,0,100,100,hdcSrc,0,0,SRCCOPY),这里hdc表示视频存储器中的RGB 565表面,而hdcSrc表示系统存储器中的8比特每像素(bpp)的托盘化表面。前述的示意性函数调用的图形参数与下列由BltSignature结构所表示的bitblt签名相应:
字段名                       值(16进制)
DstFormat                     5
SrcFormat                     7
BltMode                       0
PatternType                   0
ScanXPositive                 1
ScanYPositive                 1
UseStretch                    0
UseAlpha                      0
ColorKeyType                  0
DstMemory                     0
SrcMemory                     1
PatMemory                     0
MaskMemory                    0
MirrorX                       0
—                                                       —
MirrorY                       0
Lookup                        1
Convert                       1
Dst8Bpp                       0
Dst16Bpp                      1
Dst24Bpp                      0
Dst32Bpp                      0
Src24Bpp                      0
Unused                        0
ForegroundRop                 0xCC
BackgroundRop                 0xCC
对于SRCCOPY ROP3,不需要图象和掩模,因此值PattemType和MaskMemory都是0。对BitBlt()的示意性的调用不包括alpha合成,因此UseAlpha被设置为0。对BitBlt()的示意性的调用不包括透明图像,因此ColorKeyType被设置为0。该示意性的函数BitBlt()不允许拉伸,因此UseStretch也是0。如果用负的宽度或高度来调用StretchBlt、AlphaBlend或TransparentImage,那么MirrorX和MirrorY可以仅仅是非零的,因此在这种情况下,它们都是0。最后,BltMode是0,因为BltMode只应用于StretchBlt。
由于目的地hdc是视频存储器中的RGB 565表面,因此其暗示了DstFormat是5,Dst8Bpp是0,Dst16Bpp是1(由于RGB565被定义为16比特每像素),Dst24Bpp是0,Dst32Bpp是0,并且DstMemory是0。因为源hdcSrc是系统存储器中的8比特每像素托盘化表面,因此其暗示了SrcFormat是7,Src24Bpp是0,并且SrcMemory是1。由于源和目的地是不同的像素格式,因此将Convert设置为值1。源是托盘化表面,因此Lookup也被设置为1,以便使专用函数可以找到托盘化颜色值。
项目ForegroundRop和BackgroundRop是相同的,这是因为对BitBlt的示意性调用不包括掩摸操作。如所示,ForegroundRop和BackgroundRop是0xCC,因为0xCC是用于SRCCOPY的以数字表示的值。
示意性的操作
这里所描述的是用于产生比特块传输(bitblt)函数的交叉平台运行时间代码的示意性方法。这里描述的方法具体化为存在于一个或多个计算机可读介质上的逻辑指令。在当处理器上执行时,这些逻辑指令可对通用目的计算设备进行编程,使其成为实现上述方法的专用目的机器。在下列示意性的操作中,在图中所描述的元件和连接关系可用于实现生成bitblt函数的交叉平台运行时间代码。
图2示出了示意性的bitblt算法200,它使用专用的bitblt函数来完成规定的bitblt操作。通常,如果在高速缓冲存储器中找到专用的bitblt函数,那么就执行所缓存的专用bitblt函数。如果没有在高速缓冲存储器中找到专用的bitblt函数,就在运行时间内生成并执行专用的bitblt函数。假设,一但进入bitblt算法200,bitblt函数调用就要求一个bitblt操作。该函数调用包括一个或多个指定要完成的bitblt操作的图形参数。
生成操作202基于图形参数生成一个bitblt签名。生成操作的一种实现方式是使用图形参数创建一个BltSignature(如上所述)。该bitblt签名唯一地标识在bitblt函数调用中所批定的bitblt操作。
判断操作204判断专用机语言的专用bitblt函数调用是否存在于与所要求的bitblt操作相应的高速缓存中。该判断操作204在高速缓存中搜索具有与由生成操作202生成的bitblt签名相同的bitblt签名的函数。如果在高速缓存中找到一个专用的bitblt函数,那么该bitblt算法就将“是”分支给判断操作212,下面将进行讨论。如果没有在高速缓存中找到一个专用的bitblt函数,那么该bitblt算法就将“否”分支给生成操作206。
生成操作206生成与所要求的bitblt操作相应的专用bitblt操作。在生成操作206的一种实现方式中,生成操作206单步调试一个通用bitblt函数,判断位于通用bitblt函数中的代码块是否应当用于完成所要求的bitblt操作。在每个位于通用bitblt函数中的代码块上,生成操作206使用bitblt签名来判断给定的代码块是否是必须的。
生成操作206还访问诸如上述的不变量表、转换表和ROP3表的数据结构,以便判断代码块是否是必须的,并且如果是必须的,那么判断需要从通用bitblt函数复制多少数据到专用bitblt函数中去。生成操作206还使用这些表来判断在通用bitblt函数中要跳过多少数据才能到达下一代码块。生成操作206的输出是中间语言代码的专用bitblt操作。
翻译操作208将专用bitblt函数从中间语言代码翻译成专用机语言代码。该翻译操作208由翻译器来完成,其中该翻译器能够读取中间语言代码并生成专用于运行该bitblt算法的机器的代码。翻译操作208可以由虚拟机来完成。
缓存操作210对描述该专用bitblt函数的专用机语言代码进行缓存。缓存操作210用bitblt签名(在生成操作202中生成的)对专用机语言的专用bitblt函数进行标注,并将专用机语言的专用bitblt函数保存在高速缓冲存储器中。在缓存操作210的一个实现方式中,使用固定大小的函数高速缓存以便最小化整体bitblt代码的大小。
判断操作212判断是否要对专用机语言的专用bitblt函数进行优化。在判断操作212的一个实现方式中,判断是否频繁地执行专用机语言的专用bitblt函数。在这种实现方式中,判断操作212判断专用机语言的专用bitblt函数是否已执行了规定的次数。如果判断操作212判断出该专用机语言的专用bitblt函数应当进行优化,那么bitblt算法200就将“是”分支给优化操作214。
优化操作214在运行时间内对专用机语言的专用bitblt函数进行优化。优化操作214改变专用机语言的专用bitblt函数,以使函数更快、更有效,或相反提高性能。优化操作214的一种实现方式是逐渐增加地对专用机语言的专用bitblt函数进行优化。
在优化操作214之后,如果判断操作212判断出不应当对专用机语言的专用bitblt函数进行优化,那么执行操作216就执行该专用机语言的专用bitblt函数。
示意性的计算设备
图3是用于实现生成比特块传输(bitblt)函数的交叉平台运行时间代码的示意性计算设备300的示意图。计算设备300包括一个或多个处理器或处理单元332、系统存储器334以及将包括该系统存储器334的各种系统元件耦合到处理器332上的总线336。总线336代表多种类型的总线结构中的任意一个或多个,包括存储器总线或存储器控制器、外设总线、加速图形端口以及使用多种总体系结构中的任一种的处理器或本地总线。系统存储器334包括只读存储器(ROM)338以及随机存取存储器(RAM)340。包含有助于在计算设备300内的部件之间,例如在启动期间,传输信息的基本例程的基本输入/输出系统(BIOS)342,被存储在ROM338中。
计算设备300还包括用于从硬盘(未示出)读取并向其写入的硬盘驱动器344,并且可以包括用于从可移动的磁盘348读取并向其写入的磁盘驱动器346,以及用于从诸如CD-ROM或其他光学介质的可移动的光盘352读取并向其写入的光盘驱动器350。硬盘驱动器344、磁盘驱动器346和光盘驱动器350通过适当的接口354a、354b和354c连接到总线336。
驱动器和与它们相关的计算机可读介质为计算设备300提供了对计算机可读指令、数据结构、程序模块和其他的数据的非易失性存储。尽管这里所描述的示意性的环境采用了硬盘、可移动的磁盘348和可移动的光盘352,但是其他类型的计算机可读介质,例如磁带盒、闪存卡、数字化视频光盘、随机存取存储器(RAM)、只读存储器(ROM)等到,也可以用在该示意性的操作环境中。
可在硬盘344、磁盘348、光盘352、ROM338或RAM340中存储许多程序模块,包括操作系统358、一个或多个应用程序360、其他程序模块362以及程序数据364。用户可以通过诸如键盘366和定点设备368的输入设备,将命令和信息输入到计算设备300中。其他的输入设备(未示出)可包括麦克风、操纵杆、博弈垫、圆盘式卫星电视天线、扫描仪等等。这些和其他的输入设备通过耦合到总线336的接口356连接到处理单元332。监视器372或其他类型的显示设备也经由接口,例如视频适配器374连接到总线336。
通常,计算设备300的数据处理器通过存储在计算机的各种计算机可读存储介质的不同时期的指令来编程。程序和操作系统,例如可分布在软盘、CD-ROM中,或电子上地,并被安装或加载到计算设备300的辅助存储器中。在执行过程中,程序至少部分地加载到计算设备300的主要电子存储器中。
计算设备300可以在一个使用逻辑连接到一个或多个远程计算机,例如远程计算机376的联网环境中操作。远程计算机376可以是个人计算机、服务器、路由器、网络PC、同级设备或其它的公共网络节点,该远程计算机376典型地包括许多或所有的与计算设备300相关的上述元件。图3中所描述的逻辑连接包括LAN 380和WAN 382。逻辑连接可以是有线的、无线的或它们的任意组合。
WAN 382可包括许多网络和子网络,数据可通过它们从计算设备300和远程计算机376等等进行路由。WAN 382可包括任意数量的节点(例如,DNS服务器、路由器等等),通过这些节点可将消息指向合适的目的节点。
当在一个LAN联网环境中使用时,计算设备300通过网络接口或适配器384连接到本地网络380。当在一个WAN联网环境中使用时,计算设备300典型地包括一个调制解调器386或其它用于在广域网382,例如因特网中建立通信的装置。调整解调器386可以是内置的或外置的,并且经由串行端口接口356连接到总线336。
在联网环境中,所描述的与计算设备300相关的程序模块或其一部分,可以存储在远程存储器存储设备中。可以理解,所示出的网络连接是示意性的,也可以使用在计算机之间建立通信链路的其它装置。
计算设备300可以用一个服务器计算机来实现,它专门用于运行服务器应用程序,或者也可以运行其它的应用程序。可选择地,作为示例,计算设备300可以是独立的个人台式机或膝上型计算机(PC)、工作站、个人数字助理(PDA)或电子设备,这里只列出这些。
这里的各种模块和技术通常在可由一个或多个计算机或其它设备执行的计算机可执行指令的情况中进行描述,例如程序模块。通常,程序模块包括例程、程序、对象、元件、数据结构等等,它们完成特定的任务或实现特定的抽象数据类型。典型地,程序模块的功能性可按需进行组合或分布在各种实施方式中。
这些模块和技术的一种实现方式是可以存储在计算机可读介质上或以某个形式的计算机可读介质来传输。计算机可读介质可以是可由计算机访问的任意可用的介质。作为实例,但不是限制,计算机可读介质可包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括易失的和非易失的,可移动的和不可移动的介质,它们可由用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任一种方法或技术来实现。计算机存储介质包括,但不限制于,RAM、ROM、EEPROM、闪存或其它存储技术,CD-ROM、数字化视频光盘(DVD)或其它光学存储器,磁带盒、磁带、磁盘存储器或其它磁存储设备,或者用于存储所需信息并可由计算机访问的任意其它介质。
“通信介质”典型地包含计算机可读指令、数据结构、程序模块或其它具有经调制的数据信号的数据,例如载波或其它运输机制。通信介质还包括任一种信息传送介质。术语“经调制的数据信号”指的是一种信号,它具有一个或多个它的特征集,或为在该信号中编码信息而进行改变。作为实例,但不是限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声波、RF、红外或它无线介质的无线介质。上述任一种组合也可包括在计算机可读介质的范畴内。
除了在此明确阐述的特定实现方式之外,从这里所解释的说明书中得出其它方面和实现方式,对于本领域的技术人员来说是显而易见的。说明书和所描述的实现方式只被认为是示例,其包括在下列权利要求的精神和真实范围内。

Claims (35)

1、一种用于完成比特块传输(bitblt)的方法,该方法包括:
接收一个或多个指定该bitblt的图形参数;以及
生成用于完成该bitblt的专用bitblt函数,该专用的bitblt函数包括来自于与多个bitblt操作相应的代码块超集的一个或多个代码块的集合。
2、如权利要求1所述的方法,其中该生成步骤包括生成表示该专用bitblt函数的中间语言代码。
3、如权利要求2所述的方法,还包括将该中间语言代码翻译成专用机语言代码。
4、如权利要求3所述的方法,还包括缓存该专用机语言代码。
5、如权利要求3所述的方法,还包括:
缓存该专用机语言代码;以及
响应于接收操作来执行所缓存的专用机语言代码。
6、如权利要求3所述的方法,还包括执行该专用机语言代码以完成bitblt。
7、如权利要求1所述的方法,还包括基于该一个或多个图形参数生成bitblt签名。
8、如权利要求1所述的方法,其中该生成步骤包括基于该一个或多个图形参数从一个通用的bitblt函数中选择该一个或多个代码块的集合。
9、如权利要求1所述的方法,还包括:
判断该专用的bitblt函数是否缓存在一个存储器中;以及
如果该专用的bitblt函数缓存在该存储器中,就从该存储器中执行该专用的bitblt函数。
10、如权利要求1所述的方法,其中该生成步骤包括:
生成表示该专用的bitblt函数的中间语言代码;
将该中间语言代码翻译成专用机语言代码;以及
优化该专用机语言代码。
11、如权利要求10所述的方法,其中该优化步骤包括逐渐增加地优化该专用机语言代码。
12、如权利要求10所述的方法,其中该优化步骤包括在运行时间内优化该专用机语言代码。
13、一种编码用于在计算机系统上执行计算机处理的计算机程序的计算机程序产品,该计算机处理包括:
接收一个或多个指定比特块传输(bitblt)的图形参数;以及
动态地生成用于完成该bitblt的专用bitblt函数,该专用的bitblt函数包括中间语言代码。
14、如权利要求13所述的计算机程序产品,其中生成步骤包括从一个通用的bitblt函数中选择代码块,其中该通用的bitblt函数包括与多个bitblt操作相应的多个代码块。
15、如权利要求13所述的计算机程序产品,该计算机处理还包括将中间语言代码翻译成专用机语言代码。
16、如权利要求15所述的计算机程序产品,该计算机处理还包括缓存该专用机语言代码。
17、如权利要求15所述的计算机程序产品,该计算机处理还包括优化该专用机语言代码。
18、如权利要求17所述的计算机程序产品,其中优化步骤包括逐渐增加地优化该专用机语言代码。
19、如权利要求14所述的计算机程序产品,该计算机处理还包括:
从该一个或多个图形参数中生成bitblt签名;以及
基于该bitblt签名在该通用的bitblt函数中标识该代码块。
20、如权利要求13所述的计算机程序产品,该计算机处理还包括:
判断该专用的bitblt函数是否已进行缓存;以及
执行已缓存的专用的bitblt函数。
21、一种系统,包括:
专用的比特块传输(bitblt)函数产生器,它产生用于完成一个规定的bitblt的专用bitblt函数,该专用的bitblt函数包括与指定该bitblt的一个或多个图形参数相应的中间语言代码;
翻译器,将该专用的bitblt函数翻译成专用机语言代码。
22、如权利要求21所述的系统,还包括bitblt签名产生器,它基于该一个或多个图形参数生成bitblt签名,该bitblt签名唯一地标识该规定的bitblt。
23、如权利要求21所述的系统,还包括优化模块,它在运行时间内对专用机语言代码进行优化。
24、如权利要求21所述的系统,还包括高速缓存,它包含一个或多个专用机语言代码形式的专用bitblt函数。
25、如权利要求21所述的系统,还包括数据结构,用于标识与该规定的bitblt相应的通用bitblt中的代码块。
26、一种计算机可读介质,具有存储于其上的有助于创建专用的比特块传输(bitblt)函数以完成规定的bitblt的一个或多个数据结构,其中该一个或多个数据结构包括:
偏移量字段,包括表示从一个通用的bitblt函数的基地址到在通用的bitblt函数中的一个代码块的存储器偏移量;
条件字段,具有指示在该专用的bitblt函数中是否需要该代码块的条件值;以及
大小字段,具有表示该代码块的大小的大小值。
27、如权利要求26所述的计算机可读介质,该一个或多个数据结构还包括具有一个值的跳过字段,它指示在对该通用bitblt函数进行单步调试以便在该专用的bitblt函数中标识所需的代码块的同时在该通用bitblt函数中要跳过的存储器的量。
28、如权利要求26所述的计算机可读介质,该一个或多个数据结构还包括转换字段,它具有与该通用的bitblt函数中的代码块相关的颜色转换代码。
29、如权利要求26所述的计算机可读介质,该一个或多个数据结构还包括光栅操作3(ROP3)字段,它具有与该通用的bitblt函数中的代码块相关的ROP3代码。
30、一种系统,包括:
源存储器和目的地存储器;
用于动态地创建一个专用的比特块传输(bitblt)函数的装置,以用于根据由一个或多个图形参数所指定的所需的bitblt操作,将数据从该源存储器传输到该目的地存储器。
31、如权利要求30所述的系统,其中该用于动态地创建一个专用的bitblt函数的装置包括一个bitblt签名产生器,以生成唯一标识该所需的bitblt操作的bitblt签名。
32、如权利要求31所述的系统,其中该用于动态地创建一个专用的bitblt函数的装置还包括一个专用bitblt函数产生器,用于从多个代码块中选择一个代码块,其中该多个代码块中的每一个都与特定的bitblt操作相应,所选择的代码块与该所需的bitblt操作相应。
33、如权利要求32所述的系统,其中该专用的bitblt函数产生器将从多个代码块中选择出的代码块复制到该专用的bitblt函数。
34、如权利要求30所述的系统,其中该用于动态地创建一个专用的bitblt函数的装置包括一个翻译器,用于将该专用的bitblt函数从中间语言代码翻译成专用机语言代码。
35、如权利要求34所述的系统,其中该用于动态地创建一个专用的bitblt函数的装置还包括一个优化模块,用于优化该专用机语言代码。
CNB2005100922522A 2004-06-24 2005-06-24 生成比特块传输函数的交叉平台运行时间代码 Active CN100498696C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/877,029 US7782331B2 (en) 2004-06-24 2004-06-24 Cross-platform runtime code generation for bit block transfer functions
US10/877,029 2004-06-24

Publications (2)

Publication Number Publication Date
CN1728093A true CN1728093A (zh) 2006-02-01
CN100498696C CN100498696C (zh) 2009-06-10

Family

ID=34940175

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100922522A Active CN100498696C (zh) 2004-06-24 2005-06-24 生成比特块传输函数的交叉平台运行时间代码

Country Status (5)

Country Link
US (2) US7782331B2 (zh)
EP (1) EP1610220A3 (zh)
JP (1) JP2006018830A (zh)
KR (1) KR20060049681A (zh)
CN (1) CN100498696C (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4522290B2 (ja) * 2005-03-01 2010-08-11 キヤノン株式会社 印刷制御装置及びその制御方法とプログラム
US20080055286A1 (en) * 2006-09-06 2008-03-06 Mayank Garg Method And Apparatus For Displaying Bitmap Images
EP1981279B1 (en) * 2007-04-13 2018-11-21 BlackBerry Limited Decoding entropy-encoded data using dynamic program generation
US8457419B2 (en) 2007-04-13 2013-06-04 Research In Motion Limited Method of decoding entropy-encoded data
US20100198844A1 (en) * 2009-01-30 2010-08-05 Thales-Raytheon Systems Company, LLC Automatic Code Generation
US8610731B2 (en) * 2009-04-30 2013-12-17 Microsoft Corporation Dynamic graphics pipeline and in-place rasterization
US9449585B2 (en) 2013-11-15 2016-09-20 Ncomputing, Inc. Systems and methods for compositing a display image from display planes using enhanced blending hardware
US9142053B2 (en) * 2013-11-15 2015-09-22 Ncomputing, Inc. Systems and methods for compositing a display image from display planes using enhanced bit-level block transfer hardware
US10846356B2 (en) * 2018-06-13 2020-11-24 At&T Intellectual Property I, L.P. Scalable whittled proxy execution for low-latency web over cellular networks

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5283863A (en) * 1985-10-22 1994-02-01 Texas Instruments Incorporated Process for effecting an array move instruction, a graphics computer system, a display system, a graphics processor and graphics display system
ATE134272T1 (de) * 1990-08-08 1996-02-15 Peerless Group Verfahren und vorrichtung zur bildwiedergabe
US5357604A (en) * 1992-01-30 1994-10-18 A/N, Inc. Graphics processor with enhanced memory control circuitry for use in a video game system or the like
US5604850A (en) 1992-07-06 1997-02-18 Microsoft Corporation Method and system for dynamically generating computer instructions for performing a logical operation on bitmaps
US5497498A (en) * 1992-11-05 1996-03-05 Giga Operations Corporation Video processing module using a second programmable logic device which reconfigures a first programmable logic device for data transformation
US5706483A (en) 1994-12-13 1998-01-06 Microsoft Corporation Run-time code compiler for data block transfer
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
US6256752B1 (en) 1998-07-24 2001-07-03 International Business Machines Corporation Method and apparatus for dynamic swappable bytecode loop in java virtual machines
US6324688B1 (en) 1998-07-30 2001-11-27 International Business Machines Corporation Method and apparatus for optimizing execution of Java programs
US6330711B1 (en) 1998-07-30 2001-12-11 International Business Machines Corporation Method and apparatus for dynamic application and maintenance of programs
US6279030B1 (en) 1998-11-12 2001-08-21 International Business Machines Corporation Dynamic JAVA™ class selection and download based on changeable attributes
US6305012B1 (en) 1998-12-03 2001-10-16 International Business Machines Corporation Method and apparatus for dynamic selection of instructions for compiling using tags
TW591513B (en) * 2003-03-05 2004-06-11 Via Tech Inc 2D graphic acceleration system and method

Also Published As

Publication number Publication date
KR20060049681A (ko) 2006-05-19
US7379070B2 (en) 2008-05-27
CN100498696C (zh) 2009-06-10
US20050285870A1 (en) 2005-12-29
EP1610220A2 (en) 2005-12-28
US20050285869A1 (en) 2005-12-29
EP1610220A3 (en) 2006-01-04
JP2006018830A (ja) 2006-01-19
US7782331B2 (en) 2010-08-24

Similar Documents

Publication Publication Date Title
CN1728093A (zh) 生成比特块传输函数的交叉平台运行时间代码
CN1253790C (zh) 指令调度方法和指令调度设备
CN1149492C (zh) 遥控方法和服务器
CN1293465C (zh) Gui显示装置及光标或gui组件动画显示处理方法
CN1111836C (zh) 数据处理器和数据处理设备
CN1177482C (zh) 编码方法,解码方法,编码装置以及解码装置
CN1271545C (zh) 语言翻译系统
CN1558348A (zh) 将基于模式的分级数据结构转换成平面数据结构的方法以及系统
CN1014845B (zh) 在结构式文件中制作、扩展及收缩组元标记的技术
CN1179312C (zh) 显示方法
CN1783075A (zh) 用于显示网络数据的方法、设备、处理器配置
CN1517869A (zh) 处理器、运算处理方法和优先度决定方法
CN1592915A (zh) 用户可定义的图像基准点
CN1175034A (zh) 存储器控制器和存储器控制系统
CN1912926A (zh) 可中断图形处理单元处理多个程序的方法和图形处理单元
CN1734438A (zh) 信息处理设备、信息处理方法和程序
CN1758222A (zh) 程序处理装置
CN1399244A (zh) 字符显示设备、方法和程序以及用于它们的记录媒体
CN1218223A (zh) 执行移动对象的方法以及存储移动对象的记录介质
CN1991798A (zh) 半导体存储装置
CN101065725A (zh) 命令供给装置
CN1194295C (zh) 程序变换装置及程序变换方法
CN1160667C (zh) 轮廓平滑化处理方法及其装置
CN1241078C (zh) 可编程控制器系统
CN1287295C (zh) 信息处理装置和方法及摄像装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150430

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150430

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.