KR101057977B1 - 고정된 파이프라인을 지원하는 3d 그래픽스 처리 - Google Patents

고정된 파이프라인을 지원하는 3d 그래픽스 처리 Download PDF

Info

Publication number
KR101057977B1
KR101057977B1 KR1020090020705A KR20090020705A KR101057977B1 KR 101057977 B1 KR101057977 B1 KR 101057977B1 KR 1020090020705 A KR1020090020705 A KR 1020090020705A KR 20090020705 A KR20090020705 A KR 20090020705A KR 101057977 B1 KR101057977 B1 KR 101057977B1
Authority
KR
South Korea
Prior art keywords
microcode
pipeline
hazard
shader
api
Prior art date
Application number
KR1020090020705A
Other languages
English (en)
Other versions
KR20090097816A (ko
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 KR20090097816A publication Critical patent/KR20090097816A/ko
Application granted granted Critical
Publication of KR101057977B1 publication Critical patent/KR101057977B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • 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/451Execution arrangements for user interfaces
    • G06F9/453Help systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/32Image data format

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Processing Or Creating Images (AREA)

Abstract

3D 그래픽 처리를 위한 장치 및 방법이 개시된다. 그래픽 프로세서는 고정된 파이프라인을 지원하는 API(Application Programming Interface)를 제1 마이크로 코드로 변환하는 고정 파이프라인 코드 생성부, 프로그래머블 파이프라인을 지원하는 API를 제2 마이크로 코드로 변환하는 쉐이더 파이프라인 코드 생성부, 및 쉐이더 프로그램을 이용하여 상기 제1 마이크로 코드 또는 상기 제2 마이크로 코드를 처리하는 쉐이더 파이프라인을 포함한다.
Figure R1020090020705
그래픽스, 그래픽 프로세싱, 3D, OpenGL, OpenGL ES

Description

고정된 파이프라인을 지원하는 3D 그래픽스 처리{PROCESSING 3D GRAPHICS SUPPORTING FIXED PIPELINE}
본 발명은 3D(3-dimensional) 그래픽스 처리에 관한 것이다.
다양한 3D 그래픽스 애플리케이션들이 휴대폰(mobile phone), PDA(personal digital assistant), 포터블 게임 콘솔과 같은 모바일 환경상에 실행되고 있다. 3D 애플리케이션들을 처리하기 위해, 모바일 환경을 위한 3D 그래픽스 API(Application Programming Interface)가 제공되고 있다. 몇몇 3D 그래픽스 API는 고정된 파이프라인(fixed pipeline)을 지원하지만, 다른 3D 그래픽스 API는 프로그래머블 파이프라인(programmable pipeline)을 지원한다.
고정된 파이프라인과 프로그래머블 파이프라인을 동시에 지원하는 3D 그래픽스 처리 장치 및 방법이 제공된다.
일 양태에 있어서, 3D 그래픽 처리를 위한 그래픽 프로세서가 제공된다. 상기 그래픽 프로세서는 고정된 파이프라인을 지원하는 API(Application Programming Interface)를 제1 마이크로 코드로 변환하는 고정 파이프라인 코드 생성부, 프로그래머블 파이프라인을 지원하는 API를 제2 마이크로 코드로 변환하는 쉐이더 파이프라인 코드 생성부, 및 상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 쉐이더 프로그램을 이용하여 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나를 처리하는 쉐이더 파이프라인을 포함한다.
상기 그래픽 프로세서는 상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 입력 API를 입력받아 고정된 파이프라인 또는 프로그래머블 파이프라인의 지원 여부를 판단하는 API 선택부를 더 포함할 수 있다.
상기 쉐이더 파이프라인은 버텍스 쉐이더와 단편 쉐이더를 포함할 수 있다. 상기 고정 파이프라인 코드 생성부는 수신한 입력 API의 객체의 속성을 파싱(parse)하고, 파싱된 속성에 따른 상태 정보를 출력하는 상태부, 상기 출력된 상 태 정보를 기반으로 상기 제1 마이크로 코드를 생성하는 코드 생성기, 및 상기 제1 마이크로 코드를 저장하는 코드 버퍼를 포함할 수 있다.
상기 그래픽 프로세서는 상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 스톨(stall)을 나타내는 해저드(hazard)의 발생을 구분하기 위해 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나의 처리 순서와 실행 시간을 확인하고, 상기 해저드의 발생에 따른 처리를 수행하는 해저드 제어기를 더 포함할 수 있다. 상기 해저드 제어기는 각 마이크로 코드의 처리 순서와 실행 시간을 확인하여, 상기 해저드의 발생 여부를 확인하는 해저드 확인부, 및 상기 제어기는 상기 해저드가 발생한 마이크로 코드의 처리 순서를 재정렬하는 재정렬부를 포함할 수 있다. 상기 해저드 제어기는 상기 해저드가 발생한 마이크로 코드의 이전 마이크로 코드의 결과값을 다른 마이크로 코드의 실행을 위해 포워딩하는 포워딩부를 더 포함할 수 있다.
상기 고정된 파이프라인을 지원하는 API는 OpenGL ES 1.x이고, 상기 프로그래머블 파이프라인을 지원하는 API는 OpenGL ES 2.x 일 수 있다.
다른 양태에 있어서, 그래픽 프로세서에 의해 수행되는 3D 그래픽 프로세싱 방법이 제공된다. 상기 방법은 고정된 파이프라인을 지원하는 API(Application Programming Interface)로부터 프로그래머블 파이프라인을 지원하는 쉐이더가 인식할 수 있는 제1 마이크로 코드로 변환하는 단계, 및 상기 제1 마이크로 코드를 처리하여 3D 그래픽 처리를 수행하는 단계를 포함한다. 처리된 3D 그래픽스는 버퍼와 같은 메모리에 저장될 수 있다. 또한, 처리된 3D 그래픽스는 모바일 환경의 디스프 레이상으로 표시될 수도 있다.
상기 방법은 프로그래머블 파이프라인을 지원하는 API로부터 상기 쉐이더가 인식할 수 있는 제2 마이크로 코드로 변환하는 단계를 더 포함할 수 있다.
상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는 입력 API의 객체의 속성에 따른 상태 정보를 획득하는 단계, 및 상기 상태 정보를 기반으로 상기 제1 및 제2 마이크로 코드를 생성하는 단계를 포함할 수 있다.
상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는 각 마이크로 코트에 후속하는 마이크로 코드의 실행이 스톨(stall)되는 해저드의 발생하는지 여부를 확인하는 단계를 더 포함할 수 있다. 상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는 상기 해저드가 발생하는 경우 상기 해저드가 발생한 마이크로 코드를 재정렬하는 단계를 더 포함할 수 있다. 상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는 상기 해저드가 발생하는 경우 해저드가 발생한 마이크로 코드의 이전 마이크로 코드의 결과 값을 다른 마이크로 코드로 포워딩하는 단계를 더 포함할 수 있다.
또 다른 양태에 있어서, 컴퓨터 장치는 CPU(central processing unit); 및 상기 CPU와 연결되어, 3D 그래픽을 처리하는 그래픽 프로세서를 포함한다. 상기 그래픽 프로세서는 고정된 파이프라인을 지원하는 API를 제1 마이크로 코드로 변환하는 고정 파이프라인 코드 생성부, 프로그래머블 파이프라인을 지원하는 API를 제2 마이크로 코드로 변환하는 쉐이더 파이프라인 코드 생성부, 및 상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 쉐이더 프로그램을 이용하여 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나를 처리하는 쉐이더 파이프라인을 포함한다.
제안된 3D 그래픽스 처리 방법 및 장치에 의하면, 작은 하드웨어 크기 및 낮은 전력 소모가 제공된다. 고정된 파이프라인 또는 프로그래머블 파이프라인에 따라 추가적인 명령이나 컴파일이 필요하지 않고, 필요한 메모리가 최소화할 수 있다. 또한, 해저드로 인한 쉐이더의 스톨을 완화하여 3D 그래픽스의 성능을 향상시킬 수 있다.
OpenGL ES(OpenGL for Embedded Systems)는 휴대폰(mobile phone), PDA(personal digital assistant), 콘솔과 같은 임베디드(embedded) 장치을 위해 설계된 OpenGL 3D 그래픽스 API(Application Programming Interface)의 부집합이다. OpenGL ES는 비영리 기술 그룹인 "Khronos Group"에 의해 관리되고 있다.
OpenGL ES의 몇몇 버전(verstion)이 있다. 예를 들어, OpenGL ES 1.0는 OpenGL 1.3 버전을 기초로 작성되었다. OpenGL ES 1.0는 OpenGL 1.5 버전과 관련되어 작성되었다. OpenGL ES 2.0는 OpenGL 2.0 버전과 관련되어 작성되었다. 2007년 5월에 반포된 OpenGL ES 2.0은 고정된 렌더링 파이프라인을 없애고 프로그래머블 파이프라인을 도입하고 있다. 고정된 기능 API(fixed-function API)에 의해 기술된 매체(material)나 광원 파라미터들의 명세와 같은 변환 및 광원 파이프라인의 대부분의 렌더링 특징들이 그래픽스 프로그래머에 의해 씌어지는 쉐이더(shader)로 교체되었다.
OpenGL ES 1.x는 OpenGL ES 1.0, 1.1, 1.5 중 적어도 하나의 버전을 포함하고, OpenGL ES 2.x는 OpenGL ES 2.0을 포함한다.
OpenGL ES 1.x는 고정된 기능 하드웨어를 위해 설계되고, 가속, 화상 품질 및 성능을 제공한다. 또한, OpenGL ES 1.x는 API의 하드웨어 가속을 강조한다. OpenGL ES 1.x와 달리, OpenGL ES 2.x는 완전한 프로그래머블 3D 그래픽스를 가능케한다. 또한, OpenGL ES 2.x는 쉐이더 및 프로그램 객체를 생성하기 위한 능력과 버텍스(vertex) 및 단편 쉐이더(fragment shader)의 능력을 강조한다. OpenGL ES 2.x는 OpenGL ES 1.x의 고정된 기능 변환 및 단편 파이프라인을 지원하지 않는다. 따라서, OpenGL ES 2.x는 OpenGL ES 1.x과 하위 호환되지 않는다.
상술한 바와 같이, OpenGL ES 1.x는 고정된 파이프라인을 지원하지만, OpenGL ES 2.x는 프로그래머블 파이프라인(programmable pipeline)을 지원한다. OpenGL ES 2.x에 의해 지원되는 프로그래머블 파이프라인은 쉐이더를 사용한다. 쉐이더는 높은 유연성을 갖는 그래픽스 하드웨어 상에서 주로 렌더링 효과를 연산하 기 위해 사용되는 소프트웨어 명령들의 집합이다.
예를 들어, Direct3D, OpenGL 및 OpenGL ES 그래픽스 라이브러리는 다음과 같은 3가지 유형의 쉐이더를 사용한다.
(1) 버텍스 쉐이더(vertex shader)는 그래픽 프로세서에서 각 버텍스마다 한번씩 실행된다. 이는 각 버텍스의 가상 공간상의 3D 위치를 스크린상에 표시되는 3D 위치인 2D 좌표(Z-버퍼의 깊이 값(depth value)과 같이)로 변환하는 것이다. 버텍스 쉐이더는 위치, 색상 및 텍스쳐 좌표와 같은 특성들을 다룰 수 있다. 버텍스 쉐이더의 출력은 기하 쉐이더(geometry shader)나 래스터라이저(rasterizer)와 같은 다음 단계의 파이프라인으로 제공된다.
(2) 기하 쉐이더(geometry shader)는 메쉬(mesh)로부터 버텍스를 추가하거나 제거할 수 있다. 기하 쉐이더는 절차적으로 기하를 생성하는데 사용되거나, CPU(central processing unit)에 의해 처리되기에 무거운 현재 메쉬들에 부피 상세(volumetric detail)를 추가하는데 사용된다. 기하 쉐이더가 사용되는 경우 그 출력은 래스터라이저로 제공된다.
(3) 단편 쉐이더(fragment shader)는 픽셀 쉐이더(pixel shader)라고도 하며, 각 단편(또는 픽셀)의 색상을 연산할 수 있다. 이 단계의 입력은 그래픽스 파이프라인을 통해 보내지는 폴리곤(polygon)을 채우는 래스터라이저로부터 제공된다. 단편 쉐이더는 범프 맵핑(bump mapping)이나 색상 토닝(color toning)과 같은 효과와 경관 조명(scene lighting)에 사용될 수 있디. 고정된 파이프라인은 고정된 구조에 유한한(finite) 상태 변수들을 조정함으로써 단지 제한된 유형의 연산만을 제공한다. 하지만, 단편 쉐이더는 프로그래밍을 통한 일반적이고 복잡한 연산을 가능케하고, 이론적으로 무한한 상태 변수들을 제공할 수 있다.
도 1은 쉐이더를 이용한 프로그래머블 파이프라인(programmable pipeline)의 구조를 나타낸다. 버텍스 쉐이더(110)는 사용자 정의 속성 값들(user defined attribute variables)을 입력받아, 좌표 변환 및/또는 조명을 계산한다. 버텍스 쉐이더(110)의 출력은 래스터라이저(120)에 의해 래스터 포맷(raster format)으로 변환된다. 단편 쉐이더(130)는 텍스쳐 연산과 색상 토닝(color toning)과 같은 처리를 수행한다. 단편 쉐이더(130)의 출력은 프레임 버퍼(140)로 보내져 디스플레이를 위한 처리가 수행된다.
OpenGL ES 2.x가 OpenGL ES 1.x와 하위 호환되지 않는 것은 고정된 파이프라인과 프로그래머블 파이프라인의 차이에 기인한다. 프로그래머블 파이프라인은 사용자에게 유연성을 제공할 수 있지만, 고정된 파이프라인도 처리 속도의 면에서 잇점이 있다.
그래픽의 한 장면(scene)에 포함되는 모든 객체(object)가 쉐이더를 필요로 하는 것은 아니며, 화려한 그래픽 효과가 상대적으로 필요하지 않은 부분이나 연산 처리의 신속성이 요구되는 부분에서는 OpenGL ES 1.x을 기준으로 표현될 수 있다. 그러므로, 제안된 기술, 장치 및 방법은 프로그래머블 파이프라인와 고정된 파이프라인을 동시에 지원하는 데 사용될 수 있다. 프로그래머블 파이프라인와 고정된 파이프라인을 동시에 지원함으로써, 하드웨어 크기와 파워 소모가 감소되고, 특정 모바일 환경에 효율적일 수 있다.
이하의 기술은 Direct3D, OpenGL, OpenGL ES 등과 같은 다양한 3D 그래픽스 API를 처리하기 위한 하드웨어 및/또는 소프트웨어로 구현될 수 있다. OpenGL ES 1.x는 OpenGL ES 1.0, 1.1, 1.5 중 적어도 하나의 버전을 포함하고, OpenGL ES 2.x는 OpenGL ES 2.0을 포함한다.
설명을 명확히 하기 위해, 고정된 파이프라인을 지원하는 그래픽스 API(Application Programming Interface)로 OpenGL ES 1.x를 기술하고, 프로그래머블 파이프라인을 지원하는 그래픽스 API로 OpenGL ES 2.x를 기술하나 이는 예시에 불과하고, 제한이 아니다. 본 발명의 기술적 사상은 고정된 파이프라인 또는 프로그래머블 파이프라인을 지원하는 다른 그래픽스 API에도 적용될 수 있다.
다음 문서들의 내용들이 참조될 수 있다.
http://www.khronos.org/registry/gles/specs/1.1/es_full_spec.1.1.12.pdf로부터 얻어지는 "OpenGL ES 1.1 Specification"; 및
http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.23.pdf로부터 얻어지는"OpenGL ES 2.0 Specification".
도 2는 3D 그래픽스 처리를 구현할 수 있는 컴퓨터 장치의 블록도를 나타낸다. 컴퓨터 장치(200)는 휴대폰, PDA, 콘솔, 모바일 PC(personnel computer) 등과 같은 휴대용 기기(mobile device) 일 수 있다. 컴퓨터 장치(200)는 CPU(central processing unit, 210), 메모리(220), 그래픽 프로세서(230) 및 인터페이스부(interface unit, 240)를 포함한다. 컴퓨터 장치(200)의 각 요소는 시스템 버스(290)를 통해 연결될 수 있다. CPU(210)는 소프트웨어 애플리케이션을 실행한다. 메모리(220)는 CPU(220)에 의해 사용되는 애플리케이션과 데이터를 저장한다.
그래픽 프로세서(230)는 3D 그래픽스 처리를 수행한다. 그래픽 프로세서(230)는 고정된 파이프라인을 지원하는 그래픽스 API 및 프로그래머블 파이프라인을 지원하는 그래픽스 API를 처리할 수 있다. 예를 들어, 그래픽 프로세서(230)는 OpenGL ES 1.x 및/또는 OpenGL ES 2.x를 지원하는 API를 처리할 수 있다. 그래픽 프로세서(230)에 관해서는 이하 도 3 내지 8을 참조하여 자세히 기술한다.
도 3은 본 발명의 일 실시예에 따른 그래픽 프로세서의 블록도의 일 예를 나타낸다. 그래픽 프로세서(300)는 API 선택부(310), 고정 파이프라인 코드 생성부(330), 쉐이더 파이프라인 코드 생성부(340), 해저드 제어기(350) 및 쉐이더 파이프라인(360)을 포함한다.
API 선택부(310)는 API를 입력받아 고정된 파이프라인 및/또는 프로그래머블 파이프라인의 지원 여부를 판단한다. API 선택부(310)는 입력되는 API가 고정된 파이프라인을 지원한다고 판단되면 고정 파이프라인 코드 생성부(330)로 보내고, 프로그래머블 파이프라인을 지원한다고 판단되면 쉐이더 파이프라인 코드 생성부(340)로 보낸다.
고정 파이프라인 코드 생성부(330)는 고정된 파이프라인을 지원하는 API를 쉐이더 파이프라인(360)이 인식할 수 있는 마이크로 코드(micro code, 즉 제1 마이크로 코드)로 변환한다. 제1 마이크로 코드는 쉐이더 파이프라인(360)에서 어떠한 연산을 수행할 지를 나타내는 코드이다. 예를 들어, 고정 파이프라인 코드 생성부(330)는 OpenGL ES 1.x에 기반하는 API를 쉐이더 기반의 마이크로 코드로 변환할 수 있다.
쉐이더 파이프라인 코드 생성부(340)는 프로그래머블 파이프라인을 지원하는 API를 쉐이더 파이프라인(360)이 인식할 수 있는 다른 마이크로 코드(즉, 제2 마이크로 코드)로 변환한다. 제2 마이크로 코드는 쉐이더 파이프라인(360)에서 어떠한 연산을 수행할 지를 나타내는 코드이다. 예를 들어, 쉐이더 파이프라인 코드 생성부(340)는 OpenGL ES 2.x에 기반하는 API를 쉐이더 기반의 마이크로 코드로 변환할 수 있다.
해저드 제어기(350)는 고정 파이프라인 코드 생성부(330)에 의해 생성된 제1 마이크로 코드 및/또는 쉐이더 파이프라인 코드 생성부(340)에 의해 생성된 제2 마이크로 코드로부터 쉐이더 파이프라인(360)에서의 실행시 스톨(stall)이 발생하는지 여부에 관한 해저드를 검사한다. 해저드가 발생할 경우 스톨을 완화시킬 수 있는 처리를 수행한다. 해저드 제어기(350)는 해저드(hazard)가 발생하면, 상기 제1 및 제2 마이크로 코드의 재정렬(reordering), 포워딩(forwarding) 및/또는 인터락(inter-lock)을 수행할 수 있다.
쉐이더 파이프라인(360)은 제1 및 제2 마이크로 코드를 읽고(fetch), 해독하여(decoding) 실행하는(execute) 과정을 통해 쉐이더 프로그램을 처리한다. 쉐이더 파이프라인(360)은 도 1의 예에 나타난 바와 같이 버텍스 쉐이더 및 단편 쉐이더로 구성될 수 있다. 버텍스 쉐이더는 각 버텍스 및 버텍스 계산에 필요한 상수들을 입력받아 좌표 변환 및 조명을 계산하여, 변환된 값을 출력한다. 변환된 값은 클리핑(clipping)과 래스터라이제이션(rasterization) 과정을 거쳐 단편 쉐이더로 입력 될 수 있다. 단편 쉐이더는 텍스쳐 연산과 색상 토닝(toning)을 처리한다.
프로그래머블 파이프라인을 지원하는 OpenGL ES 2.x은 기본적으로 쉐이더 프로그램을 이용한다. 따라서, 쉐이더 파이프라인 코드 생성부(330)는 쉐이더 파이프라인(360)을 위한 제2 마이크로 코드를 생성할 수 있다.
그러나, 고정된 파이프라인을 지원하는 OpenGL ES 1.x로부터 쉐이더 기반의 마이크로 코드를 생성하는 것은 용이하지 않다. OpenGL ES 1.x을 지원하기 위해 객체의 속성이 변할 때마다 실시간으로 컴파일을 수행할 수 있지만 이는 하드웨어에 추가적인 코드 메모리가 요구될 수 있다. 만약 하나의 코드 메모리만을 사용한다면, OpenGL ES 2.x로부터 OpenGL ES 1.x로의 전환 및/또는 OpenGL ES 1.x로부터 OpenGL ES 2.x로의 전환이 발생할 때 마다 이전 코드 메모리의 명령을 지우고 새로 컴파일된 명령어들을 삽입하는 오버헤드가 발생할 수 있다.
모바일 환경에서 추가적인 메모리 또는 오버헤드의 증가는 하드웨어 면적의증가, 추가적인 파워 소모를 가져올 수 있다. 따라서, 작은 하드웨어 크기, 낮은 전력, 높은 성능 향상을 갖도록 그래픽 프로세서(300)를 설계할 필요가 있다.
도 4는 본 발명의 일 실시예에 따른 고정 파이프라인 코드 생성부의 블록도를 나타낸다. 고정 파이프라인 코드 생성부(330)는 상태부(state unit, 331), 코드 생성기(332), 코드 버퍼(333) 및 제어기(334)를 포함한다.
상태부(331)는 입력되는 객체의 속성을 파싱(parse)하고, 파싱된 속성에 따른 상태 정보를 출력한다. 상태부(331)는 유한 상태 머신(finite state machine)으로, 사용자 정의된 속성에 따라 상태를 변경한다. 각 상태는 복수의 서브-상태를 포함한다.
코드 생성기(332)는 상태 정보에 따른 마이크로 코드를 생성한다. 각 상태는 마이크로 코드 멀티플렉서(미도시)로 입력되어 적어도 하나의 마이크로 코드를 선택하여 출력한다. 하나의 마이크로 코드는 64비트일 수 있다.
코드 버퍼(333)는 생성된 마이크로 코드를 저장하고, 제어기(334)의 지시에 따라 쉐이더로 저장된 마이크로 코드를 보낸다.
제어기(334)는 상태부(311), 코드 생성기(332) 및 코드 버퍼(333)를 관리한다. 제어기(334)는 객체의 속성에 따라 상태부(331)의 상태의 변경 또는 유지(hold)를 제어할 수 있다.
상기와 같이 구성된 고정 파이프라인 코드 생성부(330)의 크기는 일반적인 코드 메모리의 5%에 불과한 크기를 가진다. 따라서, 하드웨어의 크기가 작아지고 낮은 전력 소모를 제공할 수 있다.
이제 고정 파이프라인 코드 생성부(330)의 동작에 대해 보다 구체적인 예를 들어 기술한다.
도 5는 속성에 따른 상태들의 일 예를 나타낸다. 입력되는 속성에 따라, 현재 상태는 초기화 상태(initial state), 버텍스 상태(vertex state), 텍스쳐 상태(texture state), 라이트 상태(light state) 및 포그 상태(fog state) 중 적어도 어느 하나의 상태로 변경된다. 각 상태는 상호 계층적으로 연계되는 50 내지 170 개의 서브-상태를 포함할 수 있다.
예를 들어, OpenGL ES 1.1에서의 포그 상태를 고려하자. 설정되면, 포그 상 태는 포그 색상을 블렌딩 팩터(blending factor) f를 이용하여 래스터라이즈된 단편의 포스트 텍스쳐(post-texture) 색상으로 블렌딩한다. 블렌딩 팩터 f는 다음 3개의 식들 중 하나로 계산된다.
Figure 112009014745330-pat00001
Figure 112009014745330-pat00002
Figure 112009014745330-pat00003
여기서, c는 시선 좌표 (0; 0; 0; 1)인 시선으로부터 단편 중심까지의 시선 좌표 거리(eye-coordinate distance)이다. d, e, 및 s를 통해 상기 식은 다음과 같이 설정된다.
void Fog{xf}(enum pname, T param );
void Fog{xf}v( enum pname, T params );
pname이 'FOG MODE'이면, param 및/또는 params는 포그 연산을 위해 선택되는 각 식들을 나타내는 심볼 상수들 'EXP' 'EXP2' 또는 'LINEAR' 중 하나를 가리킨다. 만약 pname이 'FOG DENSITY', 'FOG START' 또는 'FOG END'이면, param 및/또는 params는 각각 d, e 또는 s를 가리킨다.
따라서, 상기 식들에 의해 정의되는 포그 모드들 'EXP', 'EXP2', 'LINEAR'는 결과적으로 포그가 얼마나 짙게 렌더링되는지 여부를 가리킨다고 할 수 있다. 'EXP', 'EXP2', 'LINEAR'가 각각 포그 상태의 서브-상태가 된다. 즉, 포그 모드가 설정되고, 포그 API가 입력으로써 제공되면, 현재 상태는 포그 상태로 변경되고(또는 현재 상태가 포그 상태라면 그대로 유지), 포그 상태의 서브-상태로 'EXP', 'EXP2', 'LINEAR' 중 어느 하나가 지정된다.
쉐이더 파이프라인(360)에서 인식 가능한 마이크로 코드는 64비트의 포맷을 가질 수 있다. 마이크로 코드의 명령어의 종류로 일반적 동작(ordinary operation)과 흐름 제어(flow control)의 2가지로 나눌 수 있다.
도 6은 일반적 동작을 위한 64비트 마이크로 코드의 포맷의 일 예를 나타내고, 도 7은 흐름 제어를 위한 64비트 마이크로 코드의 포맷의 일 예를 나타낸다. 각 필드는 다음 표과 같이 정의된다.
Figure 112009014745330-pat00004
다음 표는 OpenGL ES 쉐이더를 지원하는 명령어 집합의 일 예를 나타낸다.
Figure 112009014745330-pat00005
도 8은 포그 상태에서 마이크로 코드들의 생성을 나타낸다. 현재 상태로 포그 모드가 선택되면, 코드 생성기(332)는 각 서브-상태에 따른 마이크로 코드들을 생성한다. 생성된 마이크로 코드들은 쉐이더로 입력되어 처리된다.
'LINEAR', 'EXP', 'EXP2'에 따라 생성되는 마이크로 코드들은 예시에 불과하며, 본 발명의 기술적 사상을 제한하는 것은 아니다.
이제 마이크로 코드들을 쉐이더 파이프라인(360)이 보다 효율적으로 처리하기 위한 해저드(hazard) 방지에 대해 대해 기술한다. API를 쉐이더가 인식할 수 있는 마이크로 코드로 변환함에 따라 쉐이더에서의 마이크로 코드들의 수행에 스톨(stall)이 발생할 수 있다. 스톨의 발생를 해저드라고도 한다.
예를 들어, 쉐이더가 마이크로 코드를 처리하기 위해 F(fetch), D(decode), E(execution), W(writeback)의 4가지 과정을 순차적으로 수행한다고 하자.
도 9는 해저드가 발생되는 경우를 나타낸다. 오피코드(Opcode) RSQ는 일반적으로 오피코드 ADD 또는 SUB보다 긴 실행 시간(execution time)을 필요로 한다. 예를 들어, RSQ는 총 5 단위시간(F/D/E1/E2/W)이 소요되고, ADD 또는 SUB는 4 단위시간(F/D/E/W)이 소요된다고 하자. 마이크로 코드들 'RSQ R2 R0', 'ADD R3 R1 R2', 'SUB R6 R4 R5'가 1 단위시간 간격으로 순차적으로 수행된다고 하자. 'ADD R3 R1 R2'를 처리하기 위해서는 먼저 'RSQ R2 R0’의 수행이 완료되어야 한다. 그런데, 'ADD R3 R1 R2'의 시작 시점에 아직 'RSQ R2 R0'이 완료되지 못하고 있으므로 쉐이더는 'ADD R3 R1 R2'의 실행을 연기한다. 이를 인터록(inter-lock)이라 한다. 'ADD R3 R1 R2'의 수행이 지연되므로 다음 마이크로 코드 'SUB R6 R4 R5'의 처리도 지연된다.
상기의 예제에서, 'SUB R6 R4 R5'는 이전 마이크로 코드들 'RSQ R2 R0', 'ADD R3 R1 R2'의 수행 여부와 상관없이 처리가 가능하다. 'ADD R3 R1 R2'와 ‘SUB R6 R4 R5’의 처리 순서를 바꾸어준다면 쉐이더의 스톨을 최소화하고 처리 속도를 높일 수 있다. 이를 재정렬(reordering)이라 한다.
도 10은 본 발명의 일 실시예에 따른 해저드 제어기를 나타낸 블록도이다. 해저드 제어기(800)는 해저드 확인부(hazard checker, 810), 재정렬부(reordering unit, 820) 및 포워딩부(forwarding unit, 830)를 포함한다.
버퍼부(850)은 다수의 버퍼(buffer #0, buffer #1, …, buffer #M)를 포함하고, 각 버퍼에는 마이크로 코드가 저장된다. 버퍼부(850)는 고정 파이프라인 코드 생성부(330) 또는 쉐이더 파이프라인 코드 생성부(340) 내에 포함될 수 있으며, 시스템 버스(390)를 통해 해저드 제어기(800)로 마이크로 코드를 보낼 수 있다. 또는, 버퍼부(850)는 해저드 제어기(800) 내에 포함될 수도 있다.
해저드 확인부(810)는 각 마이크로 코드의 처리 순서와 실행 시간을 확인하여, 해저드의 발생 여부를 확인한다. 해저드 확인부(810)는 해저드가 발생되면 해저드가 발생되는 마이크로 코드의 이전 또는 이후의 마이크로 코드의 실행 시간과 처리 순서를 확인하여 재정렬 여부를 결정한다.
해저드 확인부(810)는 재정렬 정보를 재정렬부(820)로 보내, 재정렬부(820)가 마이크로 코드를 재정렬하도록 한다. 전술한 도 9의 예제에서, 'ADD R3 R1 R2'와 'SUB R6 R4 R5'의 처리 순서를 재정렬함으로써 쉐이더의 스톨의 발생을 완화시킬 수 있다.
포워딩부(830)는 상기 해저드가 발생한 마이크로 코드의 이전 마이크로 코드의 결과값이 다른 마이크로 코드의 실행을 위해 사용된다면, 상기 결과값을 다른 마이크로 코드로 포워딩한다.
해저드가 발생하는 경우, 스톨로 인한 지연을 방지하기 위해 재정렬 및/또는 포워딩을 사용함으로써 쉐이더의 성능을 향상시킬 수 있다. 그래픽 프로세서와 CPU간의 데이터 전송을 줄여 버스 대역폭의 낭비를 방지할 수 있다.
도 11은 본 발명의 일 실시예에 따른 그래픽 프로세싱 방법의 순서도를 나타낸다. 단계 S810에서, 입력되는 API에 대해 고정된 파이프라인을 지원하는 API인지 또는 프로그래머블 파이프라인을 지원하는 API인지 여부를 판단한다. 예를 들어, OpenGL ES 1.x에 해당되는 API인지 또는 OpenGL ES 2.x에 해당되는 API인지 여부를 판단한다.
단계 S820에서, 그래픽 프로세서는 프로그래머블 파이프라인을 지원하는 API를 쉐이더가 인식할 수 있는 제1 마이크로 코드로 변환한다.
단계 S830에서, 그래픽 프로세서는 고정된 파이프라인을 지원하는 API를 프로그래머블 파이프라인을 지원하는 쉐이더가 인식할 수 있는 제2 마이크로 코드로 변환한다. 상기 마이크로 코드로 변환하기 위해, 입력되는 상기 API의 객체의 속성에 따른 상태 정보를 획득하고, 상기 상태 정보를 기반으로 상기 마이크로 코드를 생성할 수 있다.
단계 S840에서, 그래픽 프로세서는 생성된 마이크로 코드의 실행이 스톨(stall)되는 해저드의 발생 여부를 확인한다.
단계 S850에서, 그래픽 프로세서는 상기 해저드가 발생하는 경우 해저드가 발생한 마이크로 코드를 재정렬하거나, 또는 이전 마이크로 코드의 포워딩을 통해 스톨을 감소시킬 수 있는지 여부를 판단한다. 단계 S860에서, 그래픽 프로세서는 마이크로의 재정렬 및/또는 포워딩을 수행하거나, 단계 S870에서, 마이크로 코드의 인터록을 수행한다.
단계 S890에서, 그래픽 프로세서는 상기 마이크로 코드를 처리하여 3D 그래픽 처리를 수행한다. 처리된 3D 그래픽스는 모바일 환경의 디스플레이 유닛상으로 표시되거나, 모바일 환경의 저장 유닛상으로 저장될 수 있다.
상세한 설명에서 기술된 주요부나 기능적 동작의 실시예들은 상세한 설명에 개시된 구조 또는 균등물을 포함하는 디지털 전자회로, 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어, 또는 이들의 조합으로 구현될 수 있다. 상세한 설명에 개시된 주요부의 실시예들은 예를 들어, 데이터 처리 장치에 의해 실행가능한 컴퓨터 가독 매체상으로 인코딩된 컴퓨터 프로그램 명령어들의 하나 또는 그 이상의 모듈과 같은 하나 또는 그 이상의 컴퓨터 프로그램 제품으로 구현될 수 있다. 컴퓨터 가독 매체는 기계 가독 저장 장치, 기계 가독 저장 매체, 메모리 장치, 기계 가독 신호에 영향을 주는 매체의 합성 또는 이들의 조합일 수 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트 등으로 알려진)은 컴파일된 언어, 인터프리트되는 언어, 절차적 언어와 같은 어떤 형태의 프로그래밍 언어로 씌여질 수 있다. 이는 독자적인 프로그램이나 모듈, 콤포넌트, 서브루틴 또는 컴퓨팅 환경에의 사용에 적합한 다른 유닛으로 전개될 수 있다.
컴퓨터 프로그램은 파일 시스템내의 파일에 반드시 대응되는 것은 아니다. 프로그램은 다른 프로그램이나 데이터(마크업(markup) 언어 문서내에 저장되는 하나 또는 그 이상의 스크립트와 같은)를 포함하는 화일의 일부로 저정될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터상에 실행되도록 배치될 수 있고, 하나의 위치에 위치하는 다중 컴퓨터, 다중 위치상으로 분산되는 다중 컴퓨터 또는 통신 네트워크로 연결된 다중 컴퓨터 상에 실행되도록 배치될 수도 있다.
상세한 설명내의 프로세스나 논리적 흐름은 입력 데이터를 처리하고 출력을 생성하는 기능을 수행하는 적어도 하나의 컴퓨터 프로그램을 실행하는 하나 또는 그 이상의 프로그래머블 프로세서에 의해 수행될 수 있다. 프로세스나 논리적 흐름은 또한 FPGA(field programmable gate array)나 ASIC(application specific integrated circuit)와 같이 특별한 목적의 회로로써 구현되는 장치에 의해 수행될 수도 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서는 예를 들어, 일반적인 마이크로프로세서(microprocessor) 또는 어떤 종류의 디지털 컴퓨터의 적어도 하나의 프로세서를 포함할 수 있다. 프로세서는 ROM(read only memory) 또는 RAM(random access memory)로부터 데이터 및 명령어를 얻는다. 컴퓨터의 필수적인 요소는 명령어를 수행하는 프로세서와, 명령어와 데이터를 저장하는 적어도 하나의 메모리 장치이다. 일반적으로 컴퓨터는 광 디스크와 같은 데이터 저장을 위한 대용량 저장 장치를 더 포함한다. 컴퓨터는 다른 장치에 임베드(embed)될 수도 있다.
컴퓨터 프로그램 명령어와 데이터를 저장하기에 적합한 컴퓨터 가독 매체는 비휘발성 메모리, 매체, 하드디스크, 제거가능한 디스크, CD-ROM, DVD-ROM 및 메모리 장치를 포함한다. 메모리 장치는 EPROM, EEPROM 및 플래쉬 메모리 장치와 같은 반도체 메모리 장치를 포함한다.
상세한 설명은 특정적인 요소를 포함하지만, 이들은 본 발명의 범위의 제한으로 해석할 수는 없고, 특정한 실시예에 특정적인 특징의 기술로 보아야 할 것이다. 분리된 실시예들의 전후 관계상으로 상세한 설명에 기술돤 어떤 특징은 하나의 실시예에서 조합으로 구현될 수 있다. 하나의 실시예의 전후 관계로 기술된 다양한 특징들은 다중 실시예들에서 분리되어 구현될 수 있다. 더구나, 어떤 특징은 어떤 조합으로 작동함으로 기술할 수 있지만, 하나 또는 그 이상의 특징은 조합에서 제외될 수도 있고, 다양한 부조합(subcombination)으로 이루어질 수도 있다.
비록 도면에서 특정한 순서로 동작을 기술하고 있지만, 특정한 순서 또는 순차적인 순서로의 동작이 이루어짐을 요구하는 것은 아니고, 원하는 결과을 얻기 위한 모든 예시적인 동작으로 수행될 수 있다. 어떤 상태에서, 멀티태스킹이나 패러렐 프로세싱이 유리할 수도 있다. 더구나, 상술한 실시예들에서 다양한 시스템 요소들의 분리는 모든 실시예에서 분리를 요구하지는 않는다. 상술한 프로그램 요소나 시스템은 하나의 소프트웨어 제품 등으로 함께 통합될 수 있다.
단지 일부의 구현이나 예제들이 개시되고 있고, 상세한 설명에서 예시되고 기술된 내용에 기초하여 다른 구현, 향상, 변형이 가능할 것이다.
도 1은 쉐이더를 이용한 프로그래머블 파이프라인의 구조를 나타낸다.
도 2는 3D 그래픽스 처리를 구현할 수 있는 컴퓨터 장치의 블록도를 나타낸다.
도 3은 본 발명의 일 실시예에 따른 그래픽 프로세서의 블록도의 일 예를 나타낸다.
도 4는 본 발명의 일 실시예에 따른 고정 파이프라인 코드 생성부의 블록도를 나타낸다.
도 5는 속성에 따른 상태들의 일 예를 나타낸다.
도 6은 일반적 동작을 위한 64비트 마이크로 코드의 포맷의 일 예를 나타낸다.
도 7은 흐름 제어를 위한 64비트 마이크로 코드의 포맷의 일 예를 나타낸다.
도 8은 포그 상태에서 마이크로 코드들의 생성을 나타낸다.
도 9는 해저드가 발생되는 경우를 나타낸다.
도 10은 본 발명의 일 실시예에 따른 해저드 제어기를 나타낸 블록도이다.
도 11은 본 발명의 일 실시예에 따른 그래픽 프로세싱 방법의 순서도를 나타낸다.

Claims (20)

  1. 3D 그래픽 처리를 위한 그래픽 프로세서에 있어서,
    고정된 파이프라인을 지원하는 API(Application Programming Interface)를 제1 마이크로 코드로 변환하는 고정 파이프라인 코드 생성부;
    프로그래머블 파이프라인을 지원하는 API를 제2 마이크로 코드로 변환하는 쉐이더 파이프라인 코드 생성부; 및
    상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 쉐이더 프로그램을 이용하여 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나를 처리하는 쉐이더 파이프라인을 포함하는 그래픽 프로세서.
  2. 제 1 항에 있어서,
    상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 입력 API를 입력받아 고정된 파이프라인 또는 프로그래머블 파이프라인의 지원 여부를 판단하는 API 선택부를 더 포함하는 그래픽 프로세서.
  3. 제 1 항에 있어서,
    상기 쉐이더 파이프라인은 버텍스 쉐이더와 단편 쉐이더를 포함하는 그래픽 프로세서.
  4. 제 2 항에 있어서,
    상기 고정 파이프라인 코드 생성부는
    수신한 입력 API의 객체의 속성을 파싱(parse)하고, 파싱된 속성에 따른 상태 정보를 출력하는 상태부;
    상기 출력된 상태 정보를 기반으로 상기 제1 마이크로 코드를 생성하는 코드 생성기; 및
    상기 제1 마이크로 코드를 저장하는 코드 버퍼를 포함하는 그래픽 프로세서.
  5. 제 1 항에 있어서,
    상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 스톨(stall)을 나타내는 해저드(hazard)의 발생을 구분하기 위해 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나의 처리 순서와 실행 시간을 확인하고, 상기 해저드의 발생에 따른 처리를 수행하는 해저드 제어기를 더 포함하는 그래픽 프로세서.
  6. 제 5 항에 있어서,
    상기 해저드 제어기는
    각 마이크로 코드의 처리 순서와 실행 시간을 확인하여, 상기 해저드의 발생 여부를 확인하는 해저드 확인부; 및
    상기 제어기는 상기 해저드가 발생한 마이크로 코드의 처리 순서를 재정렬하는 재정렬부를 포함하는 그래픽 프로세서.
  7. 제 6 항에 있어서,
    상기 해저드 제어기는
    상기 해저드가 발생한 마이크로 코드의 이전 마이크로 코드의 결과값을 다른 마이크로 코드의 실행을 위해 포워딩하는 포워딩부를 더 포함하는 그래픽 프로세서.
  8. 제 1 항에 있어서,
    상기 고정된 파이프라인을 지원하는 API는 OpenGL ES 1.x이고, 상기 프로그래머블 파이프라인을 지원하는 API는 OpenGL ES 2.x 인 그래픽 프로세서.
  9. 그래픽 프로세서에 의해 수행되는 3D 그래픽 프로세싱 방법에 있어서,
    고정된 파이프라인을 지원하는 API(Application Programming Interface)로부터 프로그래머블 파이프라인을 지원하는 쉐이더가 인식할 수 있는 제1 마이크로 코드로 변환하는 단계; 및
    상기 제1 마이크로 코드를 처리하여 3D 그래픽 처리를 수행하는 단계를 포함하는 방법.
  10. 제 9 항에 있어서,
    프로그래머블 파이프라인을 지원하는 API로부터 상기 쉐이더가 인식할 수 있는 제2 마이크로 코드로 변환하는 단계를 더 포함하는 방법.
  11. 제 10 항에 있어서,
    상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는
    입력 API의 객체의 속성에 따른 상태 정보를 획득하는 단계; 및
    상기 상태 정보를 기반으로 상기 제1 및 제2 마이크로 코드를 생성하는 단계를 포함하는 방법.
  12. 제 10 항에 있어서,
    상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는
    각 마이크로 코드의 처리 순서 및 실행 시간을 확인하여 해저드의 발생 여부를 확인하는 단계를 더 포함하는 방법.
  13. 제 12 항에 있어서,
    상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는
    상기 해저드가 발생하는 경우, 상기 해저드가 발생하는 마이크로 코드 및 상기 해저드가 발생하는 마이크로 코드의 이전 또는 이후의 마이크로 코드의 처리 순서를 재정렬하는 단계를 더 포함하는 방법.
  14. 제 12항에 있어서,
    상기 고정된 파이프라인을 지원하는 API를 상기 제1 마이크로 코드 변환하는 단계와 상기 프로그래머블 파이프라인을 지원하는 API를 상기 제2 마이크로 코드 변환하는 단계는
    상기 해저드가 발생하는 경우, 실행을 위해 상기 해저드가 발생한 마이크로 코드의 이전 마이크로 코드의 결과값을 사용하는 다른 마이크로 코드로 상기 해저드가 발생한 마이크로 코드의 이전 마이크로 코드의 결과값을 포워딩하는 단계를 더 포함하는 방법.
  15. CPU; 및
    상기 CPU와 연결되어, 3D 그래픽을 처리하는 그래픽 프로세서를 포함하되,
    상기 그래픽 프로세서는
    고정된 파이프라인을 지원하는 API를 제1 마이크로 코드로 변환하는 고정 파이프라인 코드 생성부;
    프로그래머블 파이프라인을 지원하는 API를 제2 마이크로 코드로 변환하는 쉐이더 파이프라인 코드 생성부; 및
    상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 쉐이더 프로그램을 이용하여 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나를 처리하는 쉐이더 파이프라인을 포함하는 컴퓨터 장치.
  16. 제 15 항에 있어서,
    상기 그래픽 프로세서는 상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 입력 API를 입력받아 고정된 파이프라인 또는 프로그래머블 파이프라인의 지원 여부를 판단하는 API 선택부를 더 포함하는 컴퓨터 장치.
  17. 제 15 항에 있어서,
    상기 쉐이더 파이프라인은 버텍스 쉐이더와 단편 쉐이더를 포함하는 컴퓨터 장치.
  18. 제 15 항에 있어서,
    상기 고정 파이프라인 코드 생성부는
    수신한 입력 API의 객체의 속성을 파싱(parse)하고, 파싱된 속성에 따른 상태 정보를 출력하는 상태부;
    상기 출력된 상태 정보를 기반으로 상기 제1 마이크로 코드를 생성하는 코드 생성기; 및
    상기 제1 마이크로 코드를 저장하는 코드 버퍼를 포함하는 컴퓨터 장치.
  19. 제 15 항에 있어서,
    상기 그래픽 프로세서는 상기 고정 파이프라인 코드 생성부 및 상기 쉐이더 파이프라인 코드 생성부와 연결되어, 스톨(stall)을 나타내는 해저드(hazard)의 발생을 구분하기 위해 상기 제1 마이크로 코드 및 상기 제2 마이크로 코드 중 적어도 어느 하나의 처리 순서와 실행 시간을 확인하고, 상기 해저드의 발생에 따른 처리를 수행하는 해저드 제어기를 더 포함하는 컴퓨터 장치.
  20. 제 19 항에 있어서,
    상기 해저드 제어기는
    각 마이크로 코드의 처리 순서와 실행 시간을 확인하여, 상기 해저드의 발생 여부를 확인하는 해저드 확인부; 및
    상기 제어기는 상기 해저드가 발생하는 마이크로 코드 및 상기 해저드가 발생하는 마이크로 코드의 이전 또는 이후의 마이크로 코드의 처리 순서를 재정렬하는 재정렬부를 포함하는 컴퓨터 장치.
KR1020090020705A 2008-03-11 2009-03-11 고정된 파이프라인을 지원하는 3d 그래픽스 처리 KR101057977B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20080022611 2008-03-11
KR1020080022611 2008-03-11

Publications (2)

Publication Number Publication Date
KR20090097816A KR20090097816A (ko) 2009-09-16
KR101057977B1 true KR101057977B1 (ko) 2011-08-19

Family

ID=41062533

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090020705A KR101057977B1 (ko) 2008-03-11 2009-03-11 고정된 파이프라인을 지원하는 3d 그래픽스 처리

Country Status (6)

Country Link
US (1) US20090231332A1 (ko)
EP (1) EP2266027A2 (ko)
JP (1) JP2011513874A (ko)
KR (1) KR101057977B1 (ko)
CN (1) CN102016798A (ko)
WO (1) WO2009113811A2 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8561038B1 (en) 2009-12-31 2013-10-15 Google Inc. High performance execution environment
US8516578B1 (en) 2010-12-22 2013-08-20 Google Inc. Vertex array access bounds checking
US8711166B1 (en) 2011-02-25 2014-04-29 Google Inc. Simulating non power of two texture behavior
US8416250B1 (en) * 2011-05-13 2013-04-09 Google Inc. Simulating vertex attribute zero
KR101926570B1 (ko) 2011-09-14 2018-12-10 삼성전자주식회사 포스트 프레그먼트 쉐이더를 사용하는 그래픽 처리 방법 및 장치
US10255651B2 (en) 2015-04-15 2019-04-09 Channel One Holdings Inc. Methods and systems for generating shaders to emulate a fixed-function graphics pipeline
US20210294579A1 (en) * 2020-03-19 2021-09-23 Advanced Micro Devices, Inc. Graphics pipeline optimizations

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4409956B2 (ja) * 2002-03-01 2010-02-03 ティーファイヴ ラブズ リミテッド 集中型対話グラフィカルアプリケーションサーバ
US7015909B1 (en) * 2002-03-19 2006-03-21 Aechelon Technology, Inc. Efficient use of user-defined shaders to implement graphics operations
US6809732B2 (en) * 2002-07-18 2004-10-26 Nvidia Corporation Method and apparatus for generation of programmable shader configuration information from state-based control information and program instructions
US8274517B2 (en) * 2003-11-14 2012-09-25 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
EP1687732A4 (en) * 2003-11-19 2008-11-19 Lucid Information Technology Ltd METHOD AND SYSTEM FOR A MULTIPLEXED 3D GRAPHIC PIPELINE VIA A PC BUS
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
US7385607B2 (en) * 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7324106B1 (en) * 2004-07-27 2008-01-29 Nvidia Corporation Translation of register-combiner state into shader microcode
US20070022277A1 (en) * 2005-07-20 2007-01-25 Kenji Iwamura Method and system for an enhanced microprocessor

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
김종호외 3인, "OpenGL ES 2.0 기반 셰이더 설계", 한국컴퓨터그래픽스학회논문지 vol. 11, No.2, 2005.06.
김태영, "모바일 환경을 위한 정점 프로그램 가상머신 설계", 한국컴퓨터그래픽스학회논문지, vol.11,No.2 2005.06.
조승현외 2인, "3D 그래픽스 가속 하드웨어 기술", 한국전자통신연구원 전자통신동향분석 제22권제5호, 2007.10.

Also Published As

Publication number Publication date
JP2011513874A (ja) 2011-04-28
CN102016798A (zh) 2011-04-13
US20090231332A1 (en) 2009-09-17
WO2009113811A2 (en) 2009-09-17
KR20090097816A (ko) 2009-09-16
WO2009113811A3 (en) 2009-12-03
EP2266027A2 (en) 2010-12-29

Similar Documents

Publication Publication Date Title
JP6309620B2 (ja) 頂点シェーダのフロント・エンドとしてコンピュート・シェーダを使用すること
KR101057977B1 (ko) 고정된 파이프라인을 지원하는 3d 그래픽스 처리
JP5837221B2 (ja) タイルベースのレンダリングにおけるテッセレーション
JP6310151B2 (ja) グラフィックス処理におけるレンダリング対象コマンドの並べ替え
JP6185211B1 (ja) 適応的シェーディングによるテクスチャルックアップを使用した帯域幅低減
US10134102B2 (en) Graphics processing hardware for using compute shaders as front end for vertex shaders
JP6294565B2 (ja) グラフィックス処理において使用するためのシェーダプログラム実行技法
CN107003964B (zh) 处理未对准块传送操作
CN108369748B (zh) 用于光线追踪架构中的负载平衡的方法和装置
CN106575430B (zh) 用于像素哈希的方法和装置
CN107408210B (zh) 基于边缘的覆盖掩码压缩
JP6595101B2 (ja) 後期深度試験と保守的深度試験との間の動的切替え
CN109564694B (zh) 用于基于入库的图形处理的顶点着色器
KR20160130629A (ko) 양안 시차 영상에 대한 렌더링 방법 및 장치
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
US9280956B2 (en) Graphics memory load mask for graphics processing
CN106575440B (zh) 恒定缓冲器大小多采样抗混叠深度压缩
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
EP3427229B1 (en) Visibility information modification
US20150084952A1 (en) System, method, and computer program product for rendering a screen-aligned rectangle primitive
KR100968370B1 (ko) 2d 및 3d 통합 그래픽 가속기, 그 가속기를 포함한어플리케이션 프로세서 및 그 어플리케이션 프로세서에서의그래픽 가속방법
CN108292426B (zh) 基于部分跨度的光栅化
US20240104685A1 (en) Device and method of implementing subpass interleaving of tiled image rendering
KR20190001209A (ko) [3d 프린터를 이용한 유아 학습용 완구장치 및 이를 이용한 학습방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140703

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee