KR20060049681A - 비트 블록 전송 펑크션들을 위한 크로스-플랫폼 런타임코드 생성 - Google Patents

비트 블록 전송 펑크션들을 위한 크로스-플랫폼 런타임코드 생성 Download PDF

Info

Publication number
KR20060049681A
KR20060049681A KR1020050054782A KR20050054782A KR20060049681A KR 20060049681 A KR20060049681 A KR 20060049681A KR 1020050054782 A KR1020050054782 A KR 1020050054782A KR 20050054782 A KR20050054782 A KR 20050054782A KR 20060049681 A KR20060049681 A KR 20060049681A
Authority
KR
South Korea
Prior art keywords
bitblt
special
function
code
language code
Prior art date
Application number
KR1020050054782A
Other languages
English (en)
Inventor
제프리 알. 시로이스
조슈아 더블유. 버크맨
켄트 디. 로티스
Original Assignee
마이크로소프트 코포레이션
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 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060049681A publication Critical patent/KR20060049681A/ko

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

비트 블록 전송(bitblt)을 수행하기 위한 예시적 방법은 bitblt를 특정하는 하나 이상의 그래픽 파라미터들을 수신하는 단계 및 bitblt를 수행하기 위한 특수 bitblt 펑크션을 발생시키는 단계를 포함한다. 특수 bitblt 펑크션은 그래픽 파라미터들에 기초해 코드 블록들의 슈퍼세트로부터 선택되는 하나 이상의 코드 블록들을 포함한다. 시스템은 특정 bitblt를 수행하기 위한 특수 bitblt 펑크션을 발생시키는 특수 bitblt 펑크션 발생기를 포함한다. 특수 bitblt 펑크션은 bitblt를 특정하는 하나 이상의 그래픽 파라미터들에 대응되는 중간 언어 코드를 포함한다. 번역기는 특수 bitblt 펑크션을 머신-특정 언어 코드로 번역한다.
비트 블록 전송, 그래픽 파라미터들, 중간 언어 코드, 머신-특정 언어 코드, 코드 블록

Description

비트 블록 전송 펑크션들을 위한 크로스-플랫폼 런타임 코드 생성 {CROSS-PLATFORM RUNTIME CODE GENERATION FOR BIT BLOCK TRANSFER FUNCTIONS}
도 1은, 데이터의 블록에 대해 하나 이상의 그래픽 동작들을 수행하면서, 데이터의 블록을 하나의 로케이션으로부터 다른 로케이션으로 전송하는 비트 블록 전송(bitblt) 펑크션의 런타임 코드 생성을 위한 예시적 bitblt 시스템을 도시하는 도면.
도 2는 특정한 bitblt 동작을 수행하는 특수 bitblt 펑크션을 생성하기 위한 알고리즘을 도시하는 도면.
도 3은 bitblt 펑크션들을 위한 크로스-플랫폼 런타임 코드 생성에 사용될 수 있는 범용 컴퓨터를 도시하는 도면.
<도면의 주요 부분에 대한 부호의 설명>
100 : 비트 블록 전송(BltBlt) 시스템
102 : bitblt 모듈
104 : 그래픽 파라미터들
106 : 소스
108 : 수신지
110 : 실행 프로그램
112 : 캐시
114 : bitblt 서명 발생기
116 : bitblt 펑크션 발생기
118 : bitblt 코드 블록들의 슈퍼세트
120 : 데이터 구조들
122 : bitblt 펑크션 번역기
124 : 최적화 모듈
아래에 설명되는 주제는 컴퓨터에서의 데이터 전송에 관한 것으로서, 보다 구체적으로는, 비트 블록 전송(bit block transfer;bitblt) 펑크션들을 위한 크로스-플랫폼 런타임 코드 생성에 관한 것이다.
컴퓨팅의 일부 분야들에서는, 비트들의 직사각형 블록을 하나의 메모리 로케이션에서 다른 메모리 로케이션으로 전송하는 것이 종종 필요하다. 예를 들어, 비디오 게임시에는, 이미지 또는 표면을 표현하는 비트들의 블록이 사용자로의 디스플레이를 위해 시스템 메모리에서 비디오 메모리로 전송될 수 있다. 이러한 데이터 전송을 보통 비트 블록 전송(bitblt)라고 한다. 비디오 게임시에는, 그래픽 표현이 원활하며 지연들이 사용자의 눈에 띄지 않도록 하기 위해, bitblt가 아주 빨라야 한다. AGP(accelerated graphics card)와 같은, 정교한 그래픽 하드웨어가 부족한 컴퓨터에서, bitblt들은 대개, 그래픽 하드웨어를 모방하는, 에뮬레이션 소프트웨어와 같은, 소프트웨어에 의해 수행된다.
bitblt 펑크션들은 대개 데이터 블록 전송 뿐만 아니라 그 데이터에 대해 수행되는 동작을 수반한다. 예를 들어, 데이터 블록이 하나의 메모리 로케이션에서 다른 메모리 로케이션으로 전송되고 있는 동안, 그 데이터 블록에 투명화 동작(transparency operation)이 적용될 수 있다. 상황에 따라, ROP들(raster operations), 신장, 수축, 알파-블렌드, 및 컬러-변환과 같은, 다른 동작들이 수행될 수도 있다. bitblt 동안, 동작들의 임의 조합이 요구될 수도 있다.
bitblt 소프트웨어 개발자는 통상적으로, 요구될 수 있는 모든 bitblt 동작들을 핸들링하기 위한 코드를 개발한다. 불행하게도, bitblt 소프트웨어 펑크션을 개발하는 종래의 접근 방법들은 코드 사이즈와 코드 성능간의 어려운 양립 관계들(trade-offs)을 내포한다. 2가지의 일반적 접근 방법들은 (1) 모든 상황들에서 소프트웨어 bitblt들의 최적 성능을 실현하기 위해, 각각의 bitblt 동작에 대해 하나씩, 많은 (예를 들어, 수백개의) 펑크션들을 기입하는 단계 또는 (2) 펑크션내에서 정확한 bitblt 동작들로 분기하는 것에 의해 임의의 bitblt를 수행할 수 있는 단일(또는 소수의) bitblt 펑크션(들)을 기입하는 단계를 포함한다. 제 1 접근 방법은 빠른 bitblt 성능을 발생시키지만, 코드 사이즈가 지나치게 커진다. 제 2 접근 방법은 합리적인 코드 사이즈를 발생시키지만, 정확한 bitblt 동작들로의 분기에 수반되는 오버헤드로 인해 bitblt 수행의 속도가 너무 느려진다.
또한, 종래의 bitblt 펑크션으로는 런타임 최적화가 불가능하다. 종래의 bitblt 펑크션은 통상적으로 코딩되어, 시스템에 배치되기 전에, 소정의 타깃 플랫폼(예를 들어, 마이크로프로세서)용 머신 코드로 컴파일된다. 종래의 bitblt 펑크션이, 전반적으로, 컴파일시에 타깃 플랫폼에 대한 스피드(또는 사이즈)에서는 최적화될 수 있겠지만, 일단 컴파일되고 되고 나면, 종래의 bitblt 펑크션내의 소정 동작들(예를 들어, ROP들, 투명화 등)이 배치 이후의 스피드에 대해서는 더 이상 최적화될 수 없다. 단일 bitblt 펑크션이 사용되어 특정 bitblt 동작으로 분기할 경우, 분기는 특정 동작에 대해 부-최적 성능(sub-optimal performance)을 초래할 수 있다.
여기에서는 런타임시에 특수 비트 블록 전송(bitblt) 펑크션을 발생시키기 위한 구현들이 설명되고 청구된다. 특수 bitblt 펑크션은 하나 이상의 bitblt 동작들을 수행하며 bitblt 동작들의 슈퍼세트로부터 생성된다. 특수 bitblt 펑크션은, 런타임시에 플랫폼-특정 기계어로 번역되는 중간 언어 코드로 이루어진다. 특수 bitblt 펑크션은, 런타임 동안, 스피드를 위해 점진적으로 최적화될 수 있다.
예시적인 비트 블록 전송 시스템
도 1은, 데이터의 블록에 대해 하나 이상의 그래픽 동작들을 수행하면서, 데이터의 블록을 하나의 로케이션으로부터 다른 로케이션으로 전송하기 위한 예시적 비트 블록 전송(bitblt) 시스템(100)을 도시한다. bitblt 시스템(100)은, 도 3에 나타낸 범용 컴퓨터와 같은, 범용 컴퓨터 또는, 게임 시스템과 같은, 특수 컴퓨터 로 구현될 수 있다.
bitblt 시스템(100)은, 특정 bitblt 동작을 수행하는 bitblt 모듈(102)을 포함한다. bitblt 모듈(102)은 통상적으로 소프트웨어 모듈로서 구현되겠지만, 하드웨어, 펌웨어, 또는 이러한 기술들의 조합으로 구현될 수도 있다.
일반적으로, bitblt 모듈(102)은 소정 bitblt 동작을 특정하는 그래픽 파라미터들(104)을 수신하고 데이터 블록을 소스(106)에서 수신지(108)로 전송한다. 그래픽 파라미터들(104)은 통상적으로 bitblt 모듈(102)로의 펑크션 호출로 제공된다. 그래픽 파라미터들(104)에는, bitblt 동작으로 전송될 데이터 블록에 대해 수행될 임의의 동작들을 특정하는 정보가 포함되어 있다. 또한, 그래픽 파라미터들(104)에는 소스(106) 및 수신지(108)에 대한 식별자가 포함되어 있다.
소스(106)는, 그로부터 데이터 블록이 전송될 메모리 로케이션이고, 수신지(108)는, 데이터 블록이 전송될 메모리 로케이션이다. 소스(106) 및 수신지(108)는, 시스템 메모리 또는 비디오 메모리를 포함하지만, 이에 한정되는 것은 아닌, 임의 유형의 메모리일 수 있다. 소스(106) 및 수신지(108)는 포인터들을 가진 그래픽 파라미터들(104)로 특정될 수 있다. 또한, 그래픽 파라미터들(104)은, (나타내지 않은) 패턴 메모리 및 (나타내지 않은) 마스크 메모리와 같은, bitblt 동작 동안에 사용되는 다른 메모리 로케이션을 특정할 수도 있다.
처음에는, 실행 프로그램(executive;110)이 그래픽 파라미터들(104)을 수신한다. 실행 프로그램(110)은, 그래픽 파라미터들(104)을 사용해 특정 bitblt 동작이 실행될 방법을 판정하는, bitblt 모듈(102)내의 로직 컴포넌트이다. 실행 프로 그램(110)은 특수 bitblt 펑크션을 발생시킨 다음 특수 bitblt 동작을 수행하도록 실행될 수 있다. 또한, 실행 프로그램(110)은 발생된 bitblt 펑크션을 캐시(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 펑크션(specialized bitblt function)이 이미 캐시(112)에 존재하는지의 여부 또는 특수 bitblt 펑크션이 생성되어야 하는지의 여부를 판정한다. 실행 프로그램(110)은, bitblt 서명 발생기(114)에 의해 발생된 bitblt 서명과 동일한 bitblt 서명을 가진 특수 bitblt 펑크션을 위해 캐시(112)를 검색한다. 캐시(112)에서 특정한 bitblt 동작의 bitblt 서명을 가진 특수 bitblt 펑크션이 발견되면, 실행 프로그램은 그러한 특수 bitblt 펑크션을 실행한다.
발생된 bitblt 서명을 가진 bitblt 펑크션이 캐시(112)에서 발견되지 않으면, 실행 프로그램(110)은, 특정한 bitblt 동작을 수행하기 위한 특수 bitblt 펑크 션을 발생시키기 위해 bitblt 펑크션 발생기(116)를 호출한다. bitblt 펑크션 발생기(116)는, bitblt 코드 블록들의 슈퍼세트(118)로부터 하나 이상의 코드 블록들을 선택하는 것에 의해 특수 bitblt 펑크션을 발생시킨다. 코드 블록들의 슈퍼세트(118)에서의 코드 블록들 각각은, 실행될 경우, bitblt 동작 또는 bitblt 동작의 일부를 수행한다. bitblt 펑크션 발생기(116)는 코드 블록들(118)의 슈퍼세트로부터 코드 블록 또는 코드 블록들을 선택하고, 선택된 코드 블록 또는 코드 블록들을 특수 bitblt 펑크션으로 카피한다.
bitblt 펑크션 발생기(116)는 하나 이상의 데이터 구조들(120)을 사용해 bitblt 코드 블록들의 슈퍼세트(118)로부터 코드 블록들을 선택한다. 데이터 구조들(120)은, 오프셋들, 코드 블록 사이즈들, 및 bitblt 코드 블록들의 슈퍼세트(118)로부터의 코드 블록을 특수 bitblt 펑크션으로 카피할 것인지의 여부를 특정하는 조건 정보와 같은, bitblt 코드 블록들의 슈퍼세트(118)에 관한 정보를 제공한다. 특수 bitblt 펑크션을 위한 코드 블록들의 선택시에 사용하기 위한 예시적 데이터 구조들(120)이 다음에 도시되어 있으며 부연된다.
bitblt 코드 블록들의 슈퍼세트(118)에 대한 일 구현에서, 코드 블록들은 중간 언어(IL) 코드로 표현된다. IL이라는 용어는, 소스 언어의 단일 스테이트먼트 또는 소스 프로그램의 전부 또는 일부가, 추가적으로 번역되거나 해석되기 전에, 번역되는 타깃 언어를 의미한다. IL 코드는 일반적으로 플랫폼 또는 마이크로프로세서 독립적이다. 따라서, IL 코드는, IL 코드를 소정 플랫폼에서 실행될 수 있는 머신-특정 코드로 번역(또는 해석)하는 번역기(또는 해석기)를 가진 임의의 플랫폼 으로 이식될 수 있다. 이러한 구현에서, bitblt 펑크션 발생기(116)는, bitblt 코드 블록들의 슈퍼세트(118)에서의 IL 코드 블록들에 기초해, IL 코드의 특수 bitblt 펑크션을 생성한다.
bitblt 펑크션 번역기(122)는 특수 bitblt 펑크션의 IL 코드를 머신-특정(또는 플랫폼-특정) 코드로 번역한다. bitblt 펑크션 번역기의 소정 구현은, MICROSOFT CORPORATION으로부터의 .NET 플랫폼과 같은, 가상 머신을 포함한다.
특수 bitblt 펑크션이 머신 특정 코드로 번역된 후, 머신-특정 특수 bitblt 펑크션은 캐시(112)에 저장된다. 캐시(112)의 일 구현에서, 발생된 bitblt들은 총 bitblt 코드 사이즈를 최소화하기 위해 고정 사이즈의 펑크션 캐시를 사용한다.
특수 bitblt 펑크션은, 특수 bitblt 펑크션의 bitblt 서명을 사용해 캐시(112)에 저장되거나 그로부터 검색된다. 대응되는 bitblt 동작이 요청된다면, 캐시(112)로부터, 특수 bitblt 펑크션은 차후에 다시 실행될 수 있다.
또한, 특수 bitblt 펑크션이 머신 특정 언어 코드로 번역된 후, 최적화 모듈(124)은 특수 bitblt 펑크션을 최적화할 수 있다. 최적화는 특수 bitblt 펑크션들 모두에 대해 발생하거나, 특정 횟수 이상 액세스되는 특수 bitblt 펑크션들에 대해서만 발생할 수도 있다. 최적화는, 특수 bitblt 펑크션의 성능을 향상시키기 위해, 코드의 불필요한 라인들을 삭제하는 단계, 코드의 라인들을 재정렬하는 단계 등을 포함할 수 있다.
bitblt 코드 블록들의 슈퍼세트(118)에 대한 일 구현에서, bitblt 코드 블록들은 일반 bitblt 펑크션에 포함되어 있다. 다음은 중간 언어 코드로 표현된 예시 적인 일반 bitblt 펑크션의 일부분을 나타낸다. 설명의 용이화를 위해, 14라인의 중간 언어 코드만을 표시하였다. 일반 bitblt 펑크션의 실제 구현은 통상적으로 좀더 많은 라인들(예를 들어, 수천 라인들)의 IL 코드를 포함한다.
Figure 112005033626065-PAT00001
일반 bitblt 펑크션에서의 각 코드 라인에 대한 오프셋은 대응되는 코드 라인의, 일반 bitblt 펑크션으로의 어드레스 오프셋을 (바이트로) 제공한다.
일반 bitblt 펑크션은, 신장, 수축, 투명화, 알파 블렌딩, 컬러 변환, 256 ROP3(256 ternary raster operations), 2개의 상이한 ROP3를 선택하기 위한 마스크의 사용, 또는 이러한 동작들의 조합들을 포함하지만, 이에 한정되는 것은 아닌, 임의의 bitblt 동작을 수행하도록 설계될 수 있다. 특정 bitblt 동작의 경우, 이러한 동작들 중 일부는 수행되지 않을 것이다(예를 들어, 신장과 수축은 상호 배타적이고, 컬러 변환은, 상이한 모든 포맷들이 아니라, 2개의 상이한 포맷들 사이에서만 해당되는 등이다). 특정 bitblt 동작을 수행하는데 필요한 코드만을 포함하는 특수 bitblt 펑크션이 발생된다.
특정 구현에서, 특수 bitblt 펑크션 발생기(116)는 먼저 bitblt 서명에 기초해 한 세트의 IL 레지스터들을 로드한다. 이러한 구현에서, IL 레지스터 데이터 구조의 b-레지스터들(b0-b31)에는 bitblt 서명으로부터의 데이터가 로드된다. b-레지스터들이 로드될 수 있는 방법의 일례는 다음과 같다.
b0: Blt Singnature SolidFill
b1: Blt Singnature ScanXPositive
b2: Blt Singnature ScanYPositive
b3: Blt Singnature StretchX
b4: Blt Singnature StretchY
b5: Blt Singnature ShrinkX
b6: Blt Singnature ShrinkY
b7: Blt Singnature SourceConstantAlpha
b8: Blt Singnature PerPixelAlpha
b9: Blt Singnature SrcColorKey
b10: Blt Singnature DstColorKey
b11: 수신지가 비디오 메모리에 해당되면 참
b12: 소스가 비디오 메모리에 해당되면 참
b13: 패턴이 비디오 메모리에 해당되면 참
b14: 마스크가 비디오 메모리에 해당되면 참
b15: Blt Singnature MirrorX
b16: Blt Singnature MirrorY
b17: Blt Singnature Lookup
b18: Blt Singnature Convert
b19: b3, b4, b5, 또는 b6 중 하나가 참이면 참
b20: 수신지가 ROP3의 일부로서 사용된다면 참
b21: 소스가 ROP3의 일부로서 사용된다면 참
b22: 패턴이 ROP3의 일부로서 사용된다면 참
b23: 마스크가 bitblt의 일부로서 사용된다면 참
b24: ROP3가 bitblt의 일부로서 사용된다면 참
b25: 소스가 매 픽셀당 24비트라면 참
b26: 수신지가 매 픽셀당 8비트라면 참
b27: 수신지가 매 픽셀당 16비트라면 참
b28: 수신지가 매 픽셀당 24비트라면 참
b29: 수신지가 매 픽셀당 32비트라면 참
예시적인 bitblt 서명 데이터는 다음에서 부연된다.
b-레지스터들에 bitblt 서명 데이터가 로드된 후, 특수 bitblt 펑크션 발생기(116)는 일반 bitblt 펑크션의 코드 블록들을 통해 진행하며, b-레지스터들의 값들 및 데이터 구조들(120)의 값들에 기초해 어떤 코드 블록들이 특수 bitblt 펑크션으로 카피되어야 하는지를 판정한다. 불필요한 동작들을 위한 코드는 일반 bitblt 펑크션으로부터 특수 bitblt 펑크션으로 카피될 필요가 없다.
데이터 구조들(120)의 일 구현은, 특수 bitblt 펑크션 발생기(116)가, 코드 블록이 특수 bitblt 펑크션으로 카피될 것인지의 여부를 판정하는데 사용하는, 3개 의 테이블들: 불변 테이블, Rop3 테이블, 및 변환 테이블을 포함한다. 불변 테이블은 사용되는 일차 테이블이고, 특수 bitblt 펑크션의 어떤 명령어들이 특정 bitblt 동작을 수행하는데 필요한지를 설명한다. Rop3 테이블은, 256 ROP3 동작들 각각을 위해 어떤 명령어들이 필요한지를 지시한다. 변환 테이블은, 임의의 2개 컬러 포맷들 사이에서 변환하기 위해서는 어떤 명령어들이 필요한지를 지시한다. 불변 테이블, Rop3 테이블, 및 변환 테이블의 예시적 정의들이, C 언어의 구조들 관점에서, 다음에 표시되어 있으며 후술된다.
InvariantTable
Figure 112005033626065-PAT00002
상기한 예시적 불변 테이블을 참조하면, Offset 필드는 일반 bitblt 펑크션의 시작에서 현재 코드 블록 시작까지의 DWORD들의 수를 표현한다. 코드 블록은, InvariantTable의 엔트리가 참조하는 연속적인 중간 언어 명령어들이다.
Condition 필드는 3가지의 상이한 의미들을 취할 수 있다. Condition이 0라면, 이 코드 블록은 조건 블록이 아니므로, 특수 bitblt 펑크션으로 카피되어야 한다. Condition이 0보다 클 경우, 레지스터 b[Condition - 1]가 참이라면, 블록은 카피되어야 겠지만, 레지스터 b[Condition - 1]가 거짓이라면, 블록은 스킵되어야 한다. Condition이 0보다 작을 경우, 레지스터 b[Condition - 1]가 참이라면, 블록은 스킵되어야 겠지만, 레지스터 b[Condition - 1]가 거짓이라면, 블록은 특수 bitblt 펑크션으로 카피되어야 한다.
InvariantTable의 Size 필드는 특수 bitblt 펑크션으로 카피할 코드 블록의 사이즈를 (DWORD들로) 표현한다. SKIP 필드는 후속 코드 블록을 취하기 위해 스킵해야 할 DWORD들의 수를 표현한다.
Rop3Table
Figure 112005033626065-PAT00003
Offset 필드는 일반 bitblt 펑크션의 시작으로부터 특정 ROP3 코드를 핸들링하는 코드 블록의 시작까지의 DWORD들의 수를 표현한다. Size 필드는 특수 bitblt 펑크션으로 카피할 코드 블록의 사이즈를 (DWORD들로) 표현한다. Rop3 필드는 테이블 참조들의 이 엔트리에 의해 참조되는 코드 블록과 관련된 ROP3 코드이다.
ConvertTable
Figure 112005033626065-PAT00004
Offset 필드는 일반 bitblt 펑크션의 시작으로부터 특정 컬러 변환 프로세스를 핸들링하는 블록의 시작까지의 DWORD들의 수를 표현한다. Size 필드는 특수 bitblt 펑크션으로 카피할 코드 블록의 사이즈를 (DWORD들로) 표현한다. Convert 필드는 테이블의 이 엔트리에 의해 참조되는 코드 블록과 관련된 컬러 변환 코드이다.
이제는 3개 테이블들의 사용 방식이 설명된다. 상술된 바와 같이, b-레지스터들(b0-b31)은 특정 bitblt 동작에 대응되는 bitblt 서명에 기초해 초기화된다. 그 다음, b-레지스터들의 상태를 사용해 일반 bitblt 펑크션 및 3개 테이블들로부터 특수 bitblt 펑크션을 구성한다.
테이블들과 관련하여 특수 bitblt 펑크션을 발생시키는데 다음의 규칙들이 사용된다.
1. Condition 필드가 0이면, Size DWORD들은 특수 bitblt 펑크션으로 카피되고, Skip DWORD들은 일반 bitblt 펑크션에서 스킵된다.
2. Condition 변수가 양이고 관련된 b-레지스터가 참이면, "if" 명령어는 스킵된다. b-레지스터가 거짓이면, Skip DWORD들은 일반 bitblt 펑크션에서 스킵된다.
3. Condition 변수가 음이고 관련된 b-레지스터가 참이면, Skip DWORD들은 일반 bitblt 펑크션에서 스킵된다. b-레지스터가 거짓이면, "else" 명령어는 스킵된다.
테이블들이 사용될 수 있는 방법을 설명하기 위해, 다음에서는 예시적인 가변 테이블이 도시되며 예시적인 시나리오가 제시된다. 다음의 예들은 상기 일반 bitblt 펑크션의 예시적 부분에 기초한다. 설명의 용이화를 위해, 예시적 IL 코드는 다음과 같이 표현된다.
Figure 112005033626065-PAT00005
Figure 112005033626065-PAT00006
상기 가변 테이블에서, 오프셋 컬럼은 일반 bitblt 펑크션으로의 오프셋들을 포함한다. 조건 필드가 0일 경우, 오프셋 필드에 나타낸 오프셋으로부터 시작해, 사이즈 필드에서 지시되는 코드량이 특수 bitblt 펑크션으로 카피된다. 상기한 예시적 InvariantTable 및 상기한 예시적 일반 bitblt 펑크션이 주어지고, b0는 참이며, b1은 거짓이고, b2는 참이라고 가정하면, 얻어지는 특수 bitblt 펑크션은 다음과 같다.
Figure 112005033626065-PAT00007
다른 예로서, b0는 거짓이고, b1은 참이며, b2는 참일 경우, 상기 InvariantTable 및 일반 bitblt 펑크션을 사용하면, 얻어지는 특수 bitblt 펑크션은 다음과 같다.
Figure 112005033626065-PAT00008
테이블들은, 필요한 "endif" 명령어가 수반되며, 선택적인 "else" 명령어가 수반되는 "if<b-register>" 명령어를 검색하여 일반 bitblt 펑크션을 분석하는 것에 의해, 런타임시에 발생된다. "if b18" 명령어는 ConvertTable이 사용되어야 한다는 것을 지시하고 "if b24" 명령어는 Rop3Table이 사용되어야 한다는 것을 지시한다.
특정 구현에서는, 테이블들을 구성하기 위해 다음의 규칙들이 지켜진다.
1. "if b<N>" 명령어는 양의 Condition 값(<N>+1)을 가지며, Size는 무시되고, Skip은 "if" 명령어에 대응되는 "else" 또는 "endif" 명령어까지의 DWORD들의 수로 설정되는 엔트리를 발생시킨다.
2. "else" 명령어는 음의 Condition 값 -(<N>+1)을 가지며, Size는 무시되고, Skip은 매칭되는 "endif" 명령어까지의 DWORD들의 수로 설정되는 엔트리를 발생시킨다.
3. "endif" 명령어는, Condition 번호에 대해 0, Size에 대해 0, 그리고 Skip에 대해 1을 가진 엔트리를 발생시킨다.
4. "if", "else", 또는 "endif"를 포함하지 않는 명령어들의 블록은 다같이, 0의 Condition 값을 가지며, Size 및 Skip 변수들은 명령어들의 현재 블록에서의 DWORD들의 수인, 테이블의 일 엔트리로 분류된다.
예시적인 bitblt 서명 및 bitblt 생성 프로세스
bitblt 서명 발생기의 특정 구현에서, (BitSignature라고 하는) C 구조는 3개의 주된 부분들: 특정 bitblt 동작에 관한 정보를 포함하는 bitfield로서 사용되는 32비트 값, bitblt에 의해 동작될 비트 블록 또는 블록들의 포맷에 관한 추가 정보를 제공하는 16비트 값, 및 특정 bitblt 동작에 사용되는 하나 이상의 ROP 코드들을 포함하는 또 하나의 16비트 값으로 편성된다. 이러한 예시적 구현에서는, 비트 블록을, 픽셀 데이터의 블록을 의미하는 표면이라고 한다. 다음의 도면은 BitSignature 구조의 레이아웃 및 각 비트의 의미를 나타낸다.
BitSignature 구조:
Figure 112005033626065-PAT00009
상기 BitSignature 구조는 C 프로그래밍 언어 또는 임의의 적합한 다른 언어로 구현될 수 있다. BitSignature의 필드들 각각은 다음과 같이 설명된다.
DstFormat 및 SrcFormat
0 이것은 무효 포맷 번호임
1 픽셀 포맷은 ARGB8888
2 픽셀 포맷은 ABGR8888
3 픽셀 포맷은 RGB888
4 픽셀 포맷은 BGR888
5 픽셀 포맷은 RGB565
6 픽셀 포맷은 RGB555
7 컬러 팔레트를 가진 표면
8 매 픽셀 표면당 1비트
9 비트 마스크들을 사용하는 미지의 소정 포맷 유형
BitMode 및 Unused 필드들은 무시될 수 있다.
PatternType:
0 솔리드 컬러
1 비트맵 패턴
ScanXPositive:
0 X-방향으로의 픽셀 프로세싱
1 Y-방향으로의 픽셀 프로세싱
ScanYPositive:
0 Y-방향으로의 픽셀 프로세싱
1 X-방향으로의 픽셀 프로세싱
UseStretch:
0 무신장 또는 무수축
1 X-방향으로의 신장
2 Y-방향으로의 신장
4 X-방향으로의 수축
8 Y-방향으로의 수축
UseAlpha:
0 무 AlphaBlending
1 소스 상수 알파 사용하기
2 매 픽셀당 소스 알파 사용하기
ColorKeyType:
0 컬러 키 없음
1 소스가 컬러 키를 가짐
2 수신지가 컬러 키를 가짐
DstMemory, SrcMemory, PatMemory, MaskMemory:
0 비디오 메모리
1 시스템 메모리
MirrorX:
0 소스 표면을 X축 주위로 플리핑(flipping)하지 않기
1 소스 표면을 X축 주위로 플리핑하기
MirrorY:
0 소스 표면을 Y축 주위로 플리핑하지 않기
1 소스 표면을 Y축 주위로 플리핑하기
Lookup:
0 컬러 룩업 테이블 사용하기 않기
1 컬러 룩업 테이블 사용하기
Convert:
0 컬러 변환 사용하기 않기
1 컬러 변환 사용하기
Dst8Bpp:
0 수신지는 매 픽셀당 8비트가 아님
1 수신지는 매 픽셀당 8비트임
Dst16Bpp:
0 수신지는 매 픽셀당 16비트가 아님
1 수신지는 매 픽셀당 16비트임
Dst24Bpp:
0 수신지는 매 픽셀당 24비트가 아님
1 수신지는 매 픽셀당 24비트임
Dst32Bpp:
0 수신지는 매 픽셀당 32비트가 아님
1 수신지는 매 픽셀당 32비트임
Src24Bpp:
0 소스는 매 픽셀당 24비트가 아님
1 소스는 매 픽셀당 24비트임
이러한 특정 구현에서, ForegroundRop 및 BackgroundRop 모두는, 특정 bitblt 동작과 관련된 래스터 동작을 특정하는 ROP3 코드들이다.
이제는, bitblt 펑크션 호출에서 수신된 그래픽 파라미터들에 기초해 bitblt 서명을 발생시키는 방법을 묘사하는 예시적 시나리오가 설명된다.
애플리케이션은 다음의 호출: bitblt(hdc, 0, 0, 100, 100, hdcSrc, 0, 0, SRCCOPY)로 bitblt 펑크션 bitblt()를 호출한다고 가정하는데, 이 경우, hdc는 비디오 메모리의 RGB565 표면을 표현하고 hdcSRC는 시스템 메모리의 8bpp(bits-per-pixel)로 팔레트화된 표면을 표현한다. 상기한 예시적 펑크션 호출의 그래픽 파라미터들은 BitSignature 구조에 의해 표현되는 다음의 bitblt 서명에 대응된다.
Figure 112005033626065-PAT00010
SRCCOPY ROP3의 경우, 패턴 및 마스크는 불필요하므로, PatternType 및 MaskMemory의 값들은 모두 0이다. bitblt()로의 예시적 호출은 알파 블렌드를 수반하지 않으므로, UseAlpha는 0으로 설정된다. bitblt()로의 예시적 호출은 투명한 이미지를 수반하지 않으므로, ColorKeyType은 0으로 설정된다. bitblt()로의 예시적 호출은 신장을 허용하지 않으므로, UseStretch 또한 0으로 설정된다. MirrorX 및 MirrorY는, StretchBlt, AlphaBlend, 또는 TransparentImage가 음의 폭 또는 높이로 호출될 경우에만 0이 아닌 값을 가질 수 있으므로, 이 경우에는, 이들도 0이다. 마지막으로, BltMode는 StretchBlt에만 적용되기 때문에, BltMode는 0이다.
수신지 hdc가 비디오 메모리의 RGB565 표면이라는 것은 DstFormat이 5라는 것을 의미하기 때문에, Dst8Bpp는 0이고, (RBG565는 정의에 의해 매 픽셀당 16비트이므로) Dst16Bpp는 1이며, Dst24Bpp는 0이고, Dst32Bpp는 0이며, DstMemory는 0이다. 소스 hdcSrc가 시스템 메모리의 8bpp로 팔레트화된 표면이라는 것은 SrcFormat이 7이라는 것을 의미하기 때문에, Src24Bpp는 0이고, SrcMemory는 1이다. 소스 및 수신지가 상이한 픽셀 포맷이므로, Convert는 1의 값으로 설정된다. 소스가 팔레트화된 표면이므로, Lookup 또한, 특수 펑크션이 팔레트화된 컬러 값을 찾을 수 있도록 하기 위해, 1로 설정된다.
bitblt로의 예시적 호출이 마스크 동작을 수반하지 않기 때문에, ForegroundRop 및 BackgroundRop 엔트리들은 동일하다. 나타낸 바와 같이, ForegroundRop 및 BackgroundRop은 0XCC인데, 0XCC가 SRCCOPY를 위한 수치 값이기 때문이다.
예시적인 동작들
여기에서는 bitblt 펑크션들의 크로스-플랫폼 런타임 코드 생성을 위한 예시적 방법들이 설명된다. 여기에서 설명된 방법들은 하나 이상의 컴퓨터-판독 가능 매체상의 논리 명령어들로 구체화될 수 있다. 프로세서상에서 실행될 때, 논리 명령어들은, 범용 컴퓨팅 장치가, 설명된 방법들을 구현하기 위한 특수-목적 머신으로 프로그램될 수 있게 한다. 다음의 예시적 동작들에서는, 도면들에 도시된 컴포넌트들 및 접속들이 bitblt 펑크션들의 크로스-플랫폼 런타임 코드 생성을 구현하는데 사용될 수 있다.
도 2는, 특정한 bitblt 동작을 수행하기 위한 특수 bitblt 펑크션을 사용하는 예시적 bitblt 알고리즘(200)을 도시한다. 일반적으로, 특수 bitblt 펑크션이 캐시 메모리에서 발견되면, 캐싱된 특수 bitblt 펑크션이 실행된다. 특수 bitblt 펑크션이 캐시 메모리에서 발견되지 않으면, 특수 bitblt 펑크션은 런타임 동안에 생성되어 실행된다. bitblt 알고리즘(200)으로의 엔트리에 대해, bitblt 동작을 요청하기 위한 bitblt 펑크션 호출이 있었다고 가정한다. 펑크션 호출은, 수행될 bitblt 동작을 특정하는 하나 이상의 그래픽 파라미터들을 포함한다.
동작을 발생시키는 단계(202)는 그래픽 파라미터들에 기초해 bitblt 서명을 발생시킨다. 동작을 발생시키는 단계의 일 구현은 그래픽 파라미터들을 사용해 (상술된) BitSignature를 생성한다. 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)는, 코드 블록이 필요한지의 여부 및, 그렇다면, 얼마나 많은 데이터가 일반 bitblt 펑크션으로부터 특수 bitblt 펑크션으로 카피되어야 하는지를 판정하기 위해, 상술된, InvariantTable, ConvertTable, 및 Rop3Table과 같은, 데이터 구조들에도 액세스한다. 또한, 동작을 발생시키는 단계(206)는, 테이블들을 사용해, 후속 코드 블록으로 진행하기 위해 일반 bitblt 펑크션에서 얼마나 많은 데이터가 스킵되어야 하는지도 판정한다. 동작을 발생시키는 단계(206)의 출력은 중간 언어 코드의 특수 bitblt 동작이다.
동작을 번역하는 단계(208)는 특수 bitblt 펑크션을 중간 언어 코드에서 머신-특정 언어 코드로 번역한다. 동작을 번역하는 단계(208)는, 중간 언어 코드를 판독하여, bitblt 알고리즘이 실행되는 머신에 대해 특정적인 코드를 발생시킬 수 있는 번역기에 의해 수행된다. 동작을 번역하는 단계(208)는 가상 머신에 의해 수행될 수 있다.
동작을 캐싱하는 단계(210)는 특수 bitblt 펑크션을 표현하는 머신-특정 언어 코드를 캐싱한다. 동작을 캐싱하는 단계(210)는 (동작을 발생시키는 단계(202)에서 발생된) bitblt 서명으로 머신-특정 언어의 특수 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)는, 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스, AGP(accelerated graphics port), 및 다양한 버스 아키텍처들 중 하나를 사용하는 프로세서 또는 로컬 버스를 포함하는, 몇가지 유형의 버스 구조들 중 하나 이상을 표현한다. 시스템 메모리(334)는 ROM(read only memory;338) 및 RAM(random access memory;340)을 포함한다. 스타트-업(start-up) 동안과 같은 때에, 컴퓨팅 장치(300)내의 요소들 사이에서 정보 전송을 지원하는 기본 루틴들을 포함하는 BIOS(basic input/output system;342)는 ROM(338)에 저장된다.
컴퓨팅 장치(300)는 (나타내지 않은) 하드 디스크로부터 판독하고 그에 기입하는 하드 디스크 드라이브(344)를 더 포함하며, 분리형 자기 디스크(348)로부터 판독하고 그에 기입하는 자기 디스크 드라이브(346) 및, CD-ROM 또는 다른 광학 매체와 같은, 분리형 광학 디스크(352)로부터 판독하고 그에 기입하는 광학 디스크 드라이브(350)를 포함할 수 있다. 하드 디스크 드라이브(344), 자기 디스크 드라이브(346), 및 광학 디스크 드라이브(350)는 적합한 인터페이스들(354a, 354b, 및 354c)에 의해 버스(336)에 접속된다.
드라이브들 및 그들과 관련된 컴퓨터-판독 가능 매체는 컴퓨팅 장치(300)에 컴퓨터-판독 가능 명령어들, 데이터 구조들, 프로그램 모듈들, 및 다른 데이터의 비휘발성 저장을 제공한다. 여기에서 설명된 예시적 환경은 하드 디스크, 분리형 자기 디스크(348), 및 분리형 광학 디스크(352)를 이용하지만, 자기 카세트들, 플래시 메모리 카드들, DVD들, RAM들, ROM들 등과 같은 컴퓨터-판독 가능 매체들의 다른 유형들도 예시적 동작 환경에 사용될 수 있다.
오퍼레이팅 시스템(358), 하나 이상의 애플리케이션 프로그램들(360), 다른 프로그램 모듈들(362), 및 프로그램 데이터(364)를 포함하여, 다수의 프로그램 모듈들이 하드 디스크, 자기 디스크(352), 광학 디스크(352), ROM(338), 또는 RAM(340)에 저장될 수 있다. 사용자는 키보드(366) 및 포인팅 장치(368)와 같은 입력 장치들을 통해 컴퓨팅 장치(300)에 명령들 및 정보를 입력할 수 있다. (나타내지 않은) 다른 입력 장치들로는 마이크로폰, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 들 수 있다. 이들 및 다른 입력 장치들은 버스(336)에 결합되어 있는 인터페이스(356)를 통해 프로세싱 유닛(332)에 접속된다. 또한, 모니터(372) 또는 다른 유형의 디스플레이 장치가, 비디오 어댑터(374)와 같은, 인터페이스를 통해 버스(336)에 접속되어 있다.
일반적으로, 컴퓨팅 장치(300)의 데이터 프로세서들은 컴퓨터의 다양한 컴퓨터-판독 가능 저장 매체들에 상이한 시간에 저장된 명령어들에 의해 프로그램된다. 프로그램들 및 오퍼레이팅 시스템들은, 예를 들어, 플로피 디스크들에, CD-ROM들에, 또는 전기적으로 분산될 수 있고, 컴퓨팅 장치(300)의 제 2 메모리에 설치되거나 로드된다. 실행시에, 프로그램들은 컴퓨팅 장치(300)의 일차 전자 메모리로 적어도 부분적으로 로드된다.
컴퓨팅 장치(300)는, 원격 컴퓨터(376)와 같은, 하나 이상의 원격 컴퓨터들로의 논리적 접속들을 사용하는 네트워크 환경에서 동작할 수도 있다. 원격 컴퓨터(376)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치, 또는 다른 공통 네트워크 노드일 수 있고, 통상적으로 컴퓨팅 장치(300)와 관련하여 상술된 요소들 중 많은 것을 또는 요소들 전부를 포함한다. 도 3에 도시된 논리적 접속들은 LAN(380) 및 WAN(382)을 포함한다. 논리적 접속들은 유선, 무선, 또는 그들의 임의 조합일 수 있다.
WAN(382)은, 그를 통해 데이터가 컴퓨팅 장치(300)로부터 원격 컴퓨터(376)로 그리고 그 반대로 라우팅될 수 있는 다수의 네트워크들 및 서브네트워크들을 포함할 수 있다. WAN(382)은, 그에 의해 메시지들이 적당한 수신지 노드로 방향 지정되는 임의 갯수의 노드들(예를 들어, DNS 서버들, 라우터들 등)을 포함할 수 있다.
LAN 네트워킹 환경에서 사용될 경우, 컴퓨팅 장치(300)는 네트워크 인터페이스 또는 어댑터(384)를 통해 LAN(380)에 접속된다. WAN 네트워킹 환경에서 사용될 경우, 컴퓨팅 장치(300)는 통상적으로, 인터넷과 같은, WAN(382)을 통해 통신을 확립하기 위한 모뎀(386) 또는 다른 수단을 포함한다. 내장형이거나 외장형일 수 있는 모뎀(386)은 직렬 포트 인터페이스(356)를 통해 버스(336)에 접속된다.
네트워크 환경에서, 컴퓨팅 장치(300)와 관련하여 도시된 프로그램 모듈들 또는 그것의 일부는 원격 메모리 저장 장치에 저장될 수도 있다. 나타낸 네트워크 접속들은 예시적인 것이며 컴퓨터들간에 통신 링크를 확립하는 다른 수단이 사용될 수도 있다는 것을 알 수 있을 것이다.
컴퓨팅 장치(300)는 서버 애플리케이션들에 전용되는 서버 컴퓨터로서 또는 다른 애플리케이션들도 실행하는 서버 컴퓨터로서 구현될 수 있다. 다른 방법으로, 컴퓨팅 장치(300)는, 예시로써, 몇가지만 열거하자면, 독립형 퍼스널 데스크탑 또는 랩탑 컴퓨터들(PC들), 워크스테이션, PDA, 또는 가전 제품으로 구현될 수 있다.
다양한 모듈들 및 기술들이 여기에서는, 하나 이상의 컴퓨터들 또는 다른 장치들에 의해 실행되는, 프로그램 모듈들과 같은, 컴퓨터-실행 가능 명령어들의 일반적인 문맥에서 설명될 수 있다. 일반적으로, 프로그램 모듈들은 특정한 태스크들을 수행하거나 특정한 추상적 데이터형들을 구현하는 루틴들, 프로그램들, 오브젝트들, 컴포넌트들, 데이터 구조들 등을 포함한다. 통상적으로, 프로그램 모듈들의 기능은 다양한 실시예들에서의 필요에 따라 조합되거나 분산될 수 있다.
이러한 모듈들 및 기술들의 구현은 소정 형태의 컴퓨터-판독 가능 매체들상에 저장되거나 그를 통해 전송될 수 있다. 컴퓨터-판독 가능 매체는, 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있다. 한정이 아닌 일례로써, 컴퓨터-판독 가능 매체는 "컴퓨터 저장 매체" 및 "통신 매체"를 구비할 수 있다.
"컴퓨터 저장 매체"는, 컴퓨터 판독 가능 명령어들, 데이터 구조들, 프로그램 모듈들, 또는 다른 데이터와 같은, 정보의 저장을 위해 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD 또는 다른 광학 저장 장치, 자기 카세트들, 자기 테이프, 자기 디스크 저장 장치 또는 다른 자기 저장 장치들, 또는 소정 정보를 저장하는데 사용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이에 한정되는 것은 아니다.
"통신 매체"는 통상적으로 컴퓨터 판독 가능 명령어들, 데이터 구조들, 프로그램 모듈들이나, 반송파 또는 다른 전송 메커니즘과 같은, 변조 데이터 신호의 다른 데이터를 구현한다. 통신 매체는 임의의 정보 전달 매체도 포함한다. "변조 데이터 신호"라는 용어는, 그것의 특징들에 대한 하나 이상의 세트를 가지며 정보를 신호로 인코딩하는 방식으로 변경된 신호를 의미한다. 한정이 아닌 일례로써, 통신 매체는 유선 네트워크 또는 직접-유선 접속과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 상기한 것들의 임의 조합들 또한 컴퓨터-판독 가능 매체의 범위내에 포함되어야 한다.
여기에서 명시적으로 설명된 특정 구현들 이외에, 여기에 개시되어 있는 스펙에 대한 고려로부터, 당업자들에게는 다른 태양들 및 구현들이 명백할 것이다. 이러한 스펙 및 설명된 구현들은 일례일 뿐이며, 진정한 범위 및 정신은 다음의 청구항들에 의해 정해져야 한다.
본 발명에서는 런타임시에 특수 비트 블록 전송(bitblt) 펑크션을 발생시키기 위한 구현들이 제안된다. 특수 bitblt 펑크션은 하나 이상의 bitblt 동작들을 수행하며 bitblt 동작들의 슈퍼세트로부터 생성되며, 런타임시에 플랫폼-특정 기계어로 번역되는 중간 언어 코드로 이루어진다. 이러한 특수 bitblt 펑크션은 런타임 동안 스피드를 위해 점진적으로 최적화될 수 있다.

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 펑크션으로부터 코드 블록을 선택하는 단계를 포함하는 컴퓨터 프로그램 제품.
  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 서명 발생기를 더 포함하는 시스템.
  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 항에 있어서,
    상기 하나 이상의 데이터 구조들은 상기 일반 bitblt 펑크션에서의 상기 코드 블록과 관련된 ROP3(raster operation 3) 코드를 가진 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 펑크션을 동적으로 발생시키는 수단은 상기 머신-특정 언어 코드를 최적화하는 최적화 모듈을 더 포함하는 시스템.
KR1020050054782A 2004-06-24 2005-06-24 비트 블록 전송 펑크션들을 위한 크로스-플랫폼 런타임코드 생성 KR20060049681A (ko)

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 (1)

Publication Number Publication Date
KR20060049681A true KR20060049681A (ko) 2006-05-19

Family

ID=34940175

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050054782A KR20060049681A (ko) 2004-06-24 2005-06-24 비트 블록 전송 펑크션들을 위한 크로스-플랫폼 런타임코드 생성

Country Status (5)

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

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
US8457419B2 (en) 2007-04-13 2013-06-04 Research In Motion Limited Method of decoding entropy-encoded data
EP1981279B1 (en) * 2007-04-13 2018-11-21 BlackBerry Limited Decoding entropy-encoded data using dynamic program generation
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
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
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
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
US6330711B1 (en) 1998-07-30 2001-12-11 International Business Machines Corporation Method and apparatus for dynamic application and maintenance of programs
US6324688B1 (en) 1998-07-30 2001-11-27 International Business Machines Corporation Method and apparatus for optimizing execution of Java 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
EP1610220A2 (en) 2005-12-28
CN100498696C (zh) 2009-06-10
EP1610220A3 (en) 2006-01-04
JP2006018830A (ja) 2006-01-19
US20050285870A1 (en) 2005-12-29
US7379070B2 (en) 2008-05-27
US20050285869A1 (en) 2005-12-29
US7782331B2 (en) 2010-08-24
CN1728093A (zh) 2006-02-01

Similar Documents

Publication Publication Date Title
KR20060049681A (ko) 비트 블록 전송 펑크션들을 위한 크로스-플랫폼 런타임코드 생성
US7450131B2 (en) Memory layout for re-ordering instructions using pointers
US7006101B1 (en) Graphics API with branching capabilities
US10255650B2 (en) Graphics processing using dynamic resources
US8203566B2 (en) Fixed function pipeline application remoting through a shader pipeline conversion layer
JP2006127556A (ja) シェーダ駆動による描画アセットの編集を実施するためのシステムおよび方法
US7779391B2 (en) Method of employing instructions to convert UTF characters with an enhanced extended translation facility
US8615729B2 (en) Extending existing model-to-model transformations
CN111158756A (zh) 用于处理信息的方法和装置
US7719545B1 (en) System and method for converting a vertex program to a binary format capable of being executed by a hardware graphics pipeline
JP2004505355A (ja) データ処理システムにおける動的グラフィックス・コンテキスト切替の方法および装置
US8082528B2 (en) Process-independent schema library
CN115989479A (zh) 用于支持外部代码的仿真的本机仿真兼容的应用二进制接口
US9274772B2 (en) Compact type layouts
US8954947B2 (en) Fast variable validation for state management of a graphics pipeline
CN115997195A (zh) 具有一致性参考地址的双架构函数指针
EP3920022A1 (en) Information processing device, method, and program
US6337701B1 (en) Apparatus for hardware support of software color cursors and method therefor
CN115997194A (zh) 支持码流折叠的混合二进制
US20040015679A1 (en) Mechanism for enabling efficient execution of an instruction
JP2019204348A (ja) 情報処理装置及びその制御方法、並びにプログラム
CN116795374A (zh) 一种字节码的执行方法、装置、电子设备及可读存储介质
US7039798B2 (en) Method and apparatus to enable cross platform configuration
KR20240025509A (ko) 크로스 링크 방법, 장치, 전자 설비 및 저장 매체
CN115237590A (zh) 映射生成方法、映射生成装置、介质及电子设备

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid