KR20170095815A - 포지션 온리 파이프라인에서의 완화된 소팅 - Google Patents

포지션 온리 파이프라인에서의 완화된 소팅 Download PDF

Info

Publication number
KR20170095815A
KR20170095815A KR1020177012685A KR20177012685A KR20170095815A KR 20170095815 A KR20170095815 A KR 20170095815A KR 1020177012685 A KR1020177012685 A KR 1020177012685A KR 20177012685 A KR20177012685 A KR 20177012685A KR 20170095815 A KR20170095815 A KR 20170095815A
Authority
KR
South Korea
Prior art keywords
coordinates
primitives
sorting
processor
pipeline
Prior art date
Application number
KR1020177012685A
Other languages
English (en)
Other versions
KR102569331B1 (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 KR20170095815A publication Critical patent/KR20170095815A/ko
Application granted granted Critical
Publication of KR102569331B1 publication Critical patent/KR102569331B1/ko

Links

Images

Classifications

    • 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
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

컬 파이프에서, 삼각형의 정점들의 포지션들은 이미 계산되어 있으며, 이들 좌표들은 이들 좌표들에 기반한 삼각형 그룹을 취하고 소팅함으로써 활용될 수 있다. 일 예로서, 타일 내의 모든 삼각형들은 한 그룹을 형성할 수 있다. 삼각형 그룹들은 빈들 내로 소팅된다. 각각의 빈 내에서 삼각형들은 그 깊이에 기반하여 소팅된다.

Description

포지션 온리 파이프라인에서의 완화된 소팅{RELAXED SORTING IN A POSITION-ONLY PIPELINE}
전력 사용을 낮추는 것 및/또는 성능을 증가시키는 것을 수행하기 위해 그래픽 프로세싱에서 메모리 트래픽을 감소시키는 것은 매우 중요하다.
포지션 온리 쉐이딩(position-only shading)은 메모리 트래픽을 감소시킨다. 포지션 온리 쉐이딩 파이프라인은 컬 파이프(cull pipe) 및 리플레이 파이프(replay pipe)로 지칭되는 두 개의 파이프를 포함한다. 삼각형들은 컬 파이프 내로 입력되며 정점들에서 포지션들의 쉐이딩(shading)이 실행된다. 그 후, 상이한 타입의 컬링 테스트, 가령, 백페이스(bachface: BF) 및 뷰 프루스툼(view frustum) 컬링(culling)이 후속되지만, (임의의 샘플을 커버하지 않는 삼각형들을 폐기하는) 제로 커버리지 컬링도 또한 후속된다. 최종적으로, 컬 파이프는 어떠한 삼각형들이 모든 컬링 테스트에 잔존하는지를 가령, 비트-스트림으로(삼각형당 하나의 비트로) 레코딩한다. 그 후, 리플레이 파이프가 실행되며, 여기서 잔존 삼각형들의 정점들에 대해서만 완전한 정점 쉐이딩이 실행되며 이에 후속하여 나머지 그래픽 파이프가 후속된다.
아래의 도면들에 대해 일부 실시예들이 기술된다.
도 1은 일 실시예의 개략적인 도면이다.
도 2는 일 실시예에 대한 플로우챠트이다.
도 3은 일 실시예에 따른 데이터 프로세싱 시스템의 블럭도이다.
도 4는 일 실시예에 따른 도 3의 프로세서의 블럭도이다.
도 5는 일 실시예에 따른 도 3의 그래픽 프로세서의 블럭도이다.
도 6은 일 실시예에 따른 그래픽 프로세싱 엔진의 블럭도이다.
도 7은 또다른 실시예에 따른 그래픽 프로세서의 블럭도이다.
도 8은 일 실시예에 대한 스레드 실행 로직을 도시하고 있다.
도 9은 일 실시예에 따른 그래픽 프로세서 실행 유닛 인스트럭션 포맷의 블럭도이다.
도 10은 그래픽 프로세서의 또다른 실시예의 블럭도이다.
도 11a는 일 실시예에 따른 그래픽 프로세서 커맨드 포맷의 블럭도이다.
도 11b는 일 실시예에 따른 그래픽 프로세서 커맨드 시퀀스의 블럭도이다.
도 12는 일 실시예에 대한 그래픽 소프트웨어 아키텍처이다.
포지션 온리 쉐이딩 파이프라인의 컬 파이프에서, 삼각형의 정점들의 포지션들은 이미 계산되었으며 이러한 좌표들은 이러한 좌표들에 기반한 삼각형 그룹들을 소팅(sorting)함으로써 활용될 수 있다. 일 예로서, 드로우 콜(draw call) 내의 일련의 삼각형들은 하나의 그룹을 구성할 수 있다. 삼각형 그룹들은 일부 입도의 빈들(bins of some granularity)(가령, 16×16 픽셀 타일의 빈들)로 소팅된다. 각각의 빈 내에서, 삼각형들의 깊이에 기반하여 삼각형들을 대략적으로 소팅하는 것이 가능하다.
리플레이 파이프에서 래스터화 프로세스가 개시될 때, 상기 리플레이 파이프는 삼각형들을 한 번에 하나의 빈으로 소모하며, 선택적으로는 소팅된 깊이 순서로도(깊이 테스트가 소정의 예 미만인 경우에 전면으로부터 후면으로) 소모한다. 거의 모든 삼각형들은 한 소형 스크린 공간 영역(가령, 타일)에 방문되고, 그 후 그 다음의 소형 스크린 공간 영역으로 이동하게 된다.
이러한 한 번 프로세싱의 영역(region-at-a-time processing)은 일부 실시예에서 깊이 버퍼 캐시 및 컬러 버퍼 캐시의 효율을 상당히 증가시킨다. 컬러 버퍼 및 깊이 버퍼로의 메모리 트래픽은 일부 실시예에서 감소될 수 있으며 이러한 버퍼들은 종종 현재의 그래픽 프로세서들에서 주요 대역폭 소비자가 되기도 한다.
파이프라인(10)의 일 실시예가 도 1에 도시된다. (블럭(12) 위에 도시된) 삼각형들은 포지션 온리 쉐이더(12)에 의해 프로세싱된다. 이에 후속하여 백페이스(BF), 뷰 프루스툼(VF) 및 제로 커버리지 컬링이 후속된다(블럭 14). 컬링이 행해진 후, 대표적인 좌표 세트, 가령 (x, y) 및 깊이 z가 계산되며, 삼각형(또는 삼각형들의 그룹)이 빈 버퍼(20) 내의 적절한 리스트 내로 비닝(binned)(또는 소팅(sorted)될 수 있다. 비트스트림 내의 잔존 삼각형들은 블럭 18에서 레코딩된다. 커맨드 버퍼들을 통한 하나의 전달은 포지션 온리 쉐이딩 프런트 엔드(컬 파이프)이며, (비 컬링된 삼각형들에 대해) 삼각형 식별자를 빈 내에 저장하는데, 그 인덱스는 삼각형의 양자화된 중심으로부터 계산되어 모턴 코드(Morton code)(또는 힐버트 코드(Hilbert code))로 변환된다.
리플레이 파이프에서, (블럭 22 위에 도시된) 잔존 삼각형들은 비닝(binning)에 기반한 소팅된 순서(블럭 22)로 프로세싱된다. 가령, 모든 삼각형들이 16×16 타일로 비닝된다면, 그 타일 내부의 삼각형들의 리스트는 먼저 이러한 삼각형들을 깊이 순서로 소팅하고, 그 후 그것을 (가령) 전면에서 후면으로 래스터화함으로써 프로세싱될 수 있다. 깊이 순서의 소팅은 선택사양적인 것이다. 디스에이블인 경우, 완전한 정점 쉐이딩(VS)(24)은 잔존 삼각형들의 정점들에 대해서만 실행되며, 이 후 잔존 파이프(26)가 후속된다.
동일한 선택된 빈으로부터의 삼각형들은 그 다음 선택된 빈으로의 삼각형들의 제공의 개시 전에 래스터화기(rasterizer)로의 제공을 위해 우선순위화된다. 이는 모든 빈들이 프로세싱될 때까지 지속되며, 따라서 모든 삼각형들은 그래픽 파이프라인으로 전달된다.
대표적인 좌표들은 다양한 방식으로 계산될 수 있다. 가령, 한 그룹 내의 삼각형의 평균 정점 포지션들이 사용될 수 있다. 다른 옵션은 정점들 위에 경계 박스(bounding box)를 구축하고 그 경계 박스의 중심의 좌표를 대표적인 좌표로서 사용하는 것이다.
일단 하나의 삼각형 또는 삼각형들의 그룹에 대한 대표적인 좌표가 계산되면, 적절한 빈이 발견되고 각각의 대표적인 좌표는 특정의 빈으로 매핑된다. 이러한 매핑은, 대표적인 좌표들을 먼저 양자화하고, 그 후 그것을 모턴, 힐버터 또는 스캔라인 순서와 같은 공간 충전 곡선을 따르는 정수 위치로 변환함으로써 행해질 수 있다. 그 정수 위치는 빈(bin)에 대응한다. 양자화된 솔루션은 사전결정된 개수의 빈이 사용될 수 있도록 선택된다. 비닝(binning)은, x 및 y에 추가하여, 각각의 스크린 공간 위치가 하나 초과의 빈가 중첩할 수 있다는 것을 의미하는 깊이 z를 고려할 수 있거나 고려하지 않을 수 있다.
리플레이 파이프에서, 하나의 빈은 선형 순서로 한번에 방문되며(즉, 빈들은 모턴 곡선을 따르며) 삼각형들은 커맨드 버퍼들을 재실행하지 않고도 삼각형 id를 사용하여 판독된다. 쉐이더(shader)는 하나의 빈 내의 삼각형들이 렌더링될 때 검색될 수 있다. 각각의 빈에 대해, 빈의 삼각형들은 정확한 쉐이더를 통해 판독 및 렌더링된다. 일 실시예에서, 드로우 콜 식별자(ID) 또는 삼각형 마다의 쉐이더 식별자는 삼각형 ID와 함께 저장될 수 있다. 상이한 쉐이더들 등에 대해 소정의 범위의 삼각형 ids "포인트"를 위한 룩업 테이블을 사용할 수 있다.
커맨드 스트림을 리플레이하는 간단한 버전의 경우, 삼각형 마다의 비트들의 개수는 삼각형 마다 두 개의 비트로 배가된다. 중심 또는 평균 포지션에 기반하여, 함께 타일로 소팅되는 16 개 또는 32 개의 삼각형들의 그룹에서 제2 비트가 협력적으로 사용된다. 이러한 16개 또는 32 개의 비트들은 타일 식별자(ID)이다. 또한, 가령, 2 내지 3 천 개의 삼각형들의 그룹에 이르는 각각의 드로우 콜 및/또는 계층을 위한 보다 높은 입도에 대해 비트마스크(bitmask)가 또한 레코딩되고, 이 비트마스크는 그 삼각형 그룹이 접촉하는 모든 타일(또는 보다 큰 입도)에 대응한다. 이러한 비트마스크는 현재 리플레이중에 있는 타일과 비교될 수 있으며, 커맨드 스트림의 많은 섹션들이 스킵될 수 있다. 이러한 비트마스크는 스크린 공간 및 커맨드 스트림에서 입도를 조정함으로써 삼각형 마다의 1 비트 아래로 유지될 수 있다. 그 후, 삼각형 마다의 비트의 전체 개수는 최대 3개의 비트로 상승된다.
일 실시예에서 파이프라인은 소트/최종 파이프라인이어서, 정확한 결과의 획득은 스크린 공간에서의 소팅에 의존하지 않을 것이다. 이와 같이, 다음 타일의 렌더링 전에 단일 타일에 대한 모든 지오메트리를 렌더링하는 것으로 제한되지 않는다. 그 지오메트리의 일부를 소팅하고 그 지오메트리의 소팅된 삼각형들을 렌더링하고, 그후 추가의 지오메트리의 소팅 및 렌더링을 행하는 것이 가능하다.
이 소팅은 두 개의 장소에서 근사화되므로 완화될 수 있다. 먼저, 이 소팅은 N 개의 삼각형들의 그룹 내의 대표적인 포인트에 기반하여 근사화되며, 상기 그룹은 단일의 타일로 배치된다. 따라서, 이 그룹 내의 삼각형들은 다른 타일들에 속하는 픽셀들을 커버할 수 있다. 이러한 것은 소트-미들 아키텍처(sort-middle architectures)와 비교되는 핵심적인 차이가 된다. 둘째로, 이 삼각형들은 먼저 특정 사이즈의 빈들(bins) 내로 소팅된다. 그러나, 이 삼각형들은 깊이 또는 다른 기준에 따라, 가령, 각각의 삼각형이 사용하는 텍스처 또는 쉐이더(즉, 상태) 또는 텍스처 공간 내에서의 그 포지션에 따라 각각의 타일 내에서 추가적으로 소팅될 수 있다.
도 2를 참조하면, 시퀀스(30)가 소프트웨어, 펌웨어 및/또는 하드웨어로 구현될 수 있다. 소프트웨어 및 펌웨어에서, 그 시퀀스는 자기, 광 또는 반도체 스토리지와 같은 하나 이상의 비일시적인 컴퓨터 판독가능한 매체 내에 저장된 컴퓨터 실행 인스트럭션에 의해 구현될 수 있다. 전형적으로, 이러한 인스트럭션은 그래픽 특징들에 대한 책임이 있는 하드웨어 유닛이 되는 그래픽 프로세싱 유닛의 일부일 수 있다.
시퀀스(30)는 블럭 32에서 도시되는 바와 같이 포지션 온리 쉐이딩을 수행함으로써 개시된다. 이에 후속하여 블럭 34에서 컬링이 수행된다.
블럭 36에서, 프리미티브들이 그룹들 내로 형성, 가령 드로우 콜 내에 복수의 삼각형이 형성될 수 있다. 그 후, 이 프리미티브들은 그 대표적인 좌표에 기반하여 소팅된다(블럭 38). 이 좌표들은 일 실시예에서 x, y 및 깊이 좌표일 수 있다.
그 후, 이 대표적인 좌표들은 블럭 40에 도시된 바와 같이 특정의 빈에 매핑된다. 각각의 빈 내의 프리미티브 깊이에 기반하여 다음의 소팅이 행해진다(블럭 42). 최종적으로, 래스터화가 블럭 44에 도시된 바와 같이, 한 번에 하나의 빈에 대해 그리고 (선택사양적으로) 깊이 순서로 수행된다.
대형 스크린 공간 영역으로 투영되는 삼각형들("대형" 삼각형들로 지칭됨)은 여러 빈들과 중첩할 것이며 이는 성능에 유해할 수도 있다. 대형 삼각형들은 아래와 같이 처리될 수 있다.
●가장 용이한 솔루션은 대형 삼각형들에 대한 소팅 및 비닝을 단순히 디스에이블시키는 것이다.
●대형 삼각형들은 비 보더(bin border)들에 대해 분할될 수 있으며 여러 빈들에 대해 복제될 수 있다. 이는 대형 삼각형들의 상이한 부분들이 상이한 시간에 프로세싱될 것이라는 것을 의미한다.
●대표적인 포인트가 일부 면적 측정치를 포함할 수 있다. 매핑 기능은 그 후 보다 소형의 삼각형들과는 상이한 빈들 내에 대형 삼각형들을 매핑한다. 그 후, 대형 삼각형들이 먼저 처리된 후 보다 소형의 삼각형으로 이동하게 된다. 이러한 비닝은 멀티 솔루션 방식으로 수행되어, 면적 측정치가 증가함에 따라 스크린 공간 빈 해상도가 감소하게 된다.
따라서, 비닝은 삼각형 사이즈 뿐만 아니라, 다른 정보, 가령, 상태를 고려할 수 있다. 이와 같이, 비닝에 사용되는 좌표들은 공간 내의 위치만을 포함하는 것으로 해석되어서는 아니되며 가령 삼각형 사이즈 및 상태를 포함할 수도 있다.
현재의 Direct3D 및 OpenGL 사양들은 제공된 삼각형의 렌더링 순서를 드라이버 또는 하드웨어가 변경하는 것을 허용하지 않는다. 그러나, Direct3D는 순서 배리어(order barrier)의 도입을 고려중이며, 여기서 그래픽 프로세싱 유닛은 이러한 배리어들 간의 삼각형 순서를 자유롭게 변경할 수 있다. 이러한 기술은 또한 모바일 디바이스들 상에서의 렌더링에 유익한, 확장자들을 통한 OpenGL 및 OpenGL ES 에도 사용가능하다.
도 3은 일 실시예에 따른 데이터 프로세싱 시스템(100)의 블럭도이다. 데이터 프로세싱 시스템(100)은 하나 이상의 프로세서(102)와 하나 이상의 그래픽 프로세서(108)을 포함하며, 단일 프로세서 데스크탑 시스템, 멀티프로세서 워크스테이션 시스템, 또는 대량의 프로세서(102) 또는 프로세서 코어(107)를 갖는 서버 시스템일 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(100)은 모바일, 핸드헬드, 또는 임베디드 디바이스들에서 사용되는 시스템 온 칩 집적 회로(SOC)이다.
데이터 프로세싱 시스템(100)의 일 실시예는, 서버 기반 게임 프랫폼, 게임 및 매체 콘솔을 구비한 게임 콘솔, 모바일 게임 콘솔, 핸드헬드 게임 콘솔, 또는 온라인 게임 콘솔을 포함할 수 있거나 이들 내에 포함될 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(100)은 모바일 폰, 스마트 폰, 태블릿 컴퓨팅 디바이스 또는 모바일 인터넷 디바이스이다. 데이터 프로세싱 시스템(100)은, 스마트 와치 웨어러블 디바이스와 같은 웨어러블 디바이스, 스마트 아이웨어 디바이스, 증강 현실 디바이스, 또는 가상 현실 디바이스를 또한 포함하거나, 이들과 연결할 수 있거나, 또는 이들 내에 포함될 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)에 의해 생성되는 그래픽 인터페이스를 갖는 텔레비전 또는 셋탑박스 디바이스이다.
하나 이상의 프로세서(102)의 각각은 실행시 시스템 및 사용자 소프트웨어를 위한 동작을 수행하는 인스트럭션을 프로세싱하는 하나 이상의 프로세서 코어를 포함한다. 일 실시예에서, 하나 이상의 프로세서 코어(107)의 각각은 특정 인스트럭션 세트(109)를 프로세싱하도록 구성된다. 인스트럭션 세트(109)는 복합 인스트럭션 세트 컴퓨팅(CISC), 감소된 인스트럭션 세트 컴퓨팅(RISC), 또는 초장 인스트럭션 워드(very long instruction word: VLIP)를 통한 컴퓨팅을 가능하게 할 수 있다. 복수의 프로세서 코어(107)는 각각 다른 인스트럭션 세트들의 에뮬레이션을 가능하게 하는 인스트럭션을 포함할 수 있는 상이한 인스트럭션 세트(109)를 프로세싱할 수 있다. 프로세서 코어(107)는 또한 다른 프로세싱 디바이스들, 가령, 디지털 신호 프로세서(DSP)를 포함할 수 있다.
일 실시예에서, 프로세서(102)는 캐시 메모리(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일 내부 캐시 또는 복수의 레벨의 내부 캐시를 가질 수 있다. 일 실시예에서, 캐시 메모리는 프로세서(102)의 다양한 컴포넌트들 사이에서 공유된다. 일 실시예에서, 프로세서(102)는 또한 알려진 캐시 코히어런시 기술을 사용하여 프로세서 코어들(107) 사이에서 공유될 수 있는 외부 캐시(가령, 레벨 3(L3) 캐시 또는 최종 레벨 캐시(LLC)(도시안됨))를 사용한다. 레지스터 파일(106)은 상이한 타입의 데이터를 저장하기 위한 상이한 타입의 레지스터(가령, 정수 레지스터, 플로팅 포인트 레지스터, 상태 레지스터, 및 인스트럭션 포인터 레지스터)를 포함할 수 있는 프로세서(102) 내에 추가로 포함된다. 일부 레지스터는 범용 레지스터일 수 있지만, 다른 레지스터들은 프로세서(102)의 디자인에 특정적일 수 있다.
프로세서(102)는 프로세서(102)와 시스템(100) 내의 다른 컴포넌트들 간의 데이터 신호를 전송하는 프로세서 버스(110)에 연결된다. 시스템(100)은, 메모리 제어기 허브(116) 및 입력 출력(I/O) 제어기 허브(130)를 구비한 일 예의 '허브' 시스템 아키텍처를 사용한다. 메모리 제어기 허브(116)는 메모리 디바이스와 시스템(100)의 다른 컴포넌트들 간의 통신을 가능하게 하지만, I/O 제어기 허브(ICH)(130)는 로컬 I/O 버스를 통해 I/O 디바이스들에 대한 커넥션을 제공한다.
메모리 디바이스(120)는, 동적 랜덤 액세스 메모리(DRAM) 디바이스, 정적 랜덤 액세스 메모리(SRAM), 플래시 메모리 디바이스, 또는 프로세스 메모리로서 기능하는 적당한 성능을 갖는 일부의 다른 메모리 디바이스일 수 있다. 메모리(120)는 프로세서(102)가 프로세스를 실행할 때 사용하기 위한 데이터(122) 및 인스트럭션(121)을 저장할 수 있다. 메모리 제어기 허브(116)는 또한 선택적인 외부 그래픽 프로세서(112)와 연결되며, 그래픽 및 매체 동작을 수행하기 위해 프로세서(102) 내의 하나 이상의 그래픽 프로세서(108)와 통신할 수 있다.
ICH(130)는 주변장치들이 고속 I/O 버스를 통해 메모리(120) 및 프로세서(102)와 접속할 수 있게 한다. I/O 주변장치들은 오디오 제어기(146), 펌웨어 인터페이스(128), 무선 트랜시버(126)(가령, Wi-Fi, 블루투스), 데이터 스토리지 디바이스(124)(가령, 하드 디스크 드라이브, 플래시 메모리 등), 및 레거시(가령, 퍼스널 시스템(2)(PS/2)) 디바이스들을 시스템에 접속하기 위한 레거시/I/O 제어기를 포함한다. 하나 이상의 통합 시리얼 버스(USB) 제어기(142)는 입력 장치들, 가령 키보드 및 마우스(144) 조합을 연결한다. 네트워크 제어기(134)는 또한 ICH(130)에 접속할 수 있다. 일 실시예에서, 고성능 네트워크 제어기(도시안됨)는 프로세서 버스(110)에 접속된다.
도 4는 하나 이상의 프로세서 코어(202A-N), 집적 메모리 제어기(214), 및 집적 그래픽 프로세서(208)를 갖는 프로세서(200)의 일 실시예의 블럭도이다. 프로세서(200)는 파선의 박스로 표시되는 추가의 코어(202N)에 이르며 이들을 구비한 추가의 코어를 포함할 수 있다. 코어(202A-N)의 각각은 하나 이상의 내부 캐시 유닛(204A-N)을 포함한다. 일 실시예에서, 각각의 코어는 하나 이상의 고유 캐시 유닛(206)에 대한 액세스를 갖는다.
내부 캐시 유닛(204A-N) 및 공유 캐시 유닛(206)은 프로세서(200) 내의 캐시 메모리 계층을 나타낸다. 캐시 메모리 계층은 각각의 코어 내의 적어도 하나의 레벨의 인스트럭션 및 데이터 캐시와, 하나 이상의 레벨의 공유된 중간-레벨 캐시, 가령, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨의 캐시를 포함할 수 있으며, 여기서 외부 메모리 앞의 최고 레벨의 캐시는 최종 레벨 캐시(LLC)로서 분류된다. 일 실시예에서, 캐시 코히어런시 로직은 다양한 캐시 유닛들(206 및 204A-N) 간의 코히어런시를 유지한다.
프로세서(200)는 또한 하나 이상의 버스 제어기 유닛(216)의 세트 및 시스템 에이전트(210)를 포함할 수 있다. 하나 이상의 버스 제어기 유닛은 주변장치 버스들의 세트, 가령 하나 이상의 주변장치 컴포넌트 상호접속 버스들(가령, PCI, PCI Express)을 관리한다. 시스템 에이전트(210)는 다양한 프로세서 컴포넌트들을 위한 관리 기능을 제공한다. 일 실시예에서, 시스템 에이전트(210)는 다양한 외부 메모리 디바이스들(도시안됨)에 대한 액세스를 관리하는 하나 이상의 집적 메모리 제어기(214)를 포함한다.
일 실시예에서, 하나 이상의 코어(202A-N)는 동시적인 멀티 스레딩을 위한 지원부를 포함한다. 이 실시예에서, 시스템 에이전트(210)는 멀티 스레딩 프로세싱 동안 코어(202A-N)를 조정 및 동작시키기 위한 컴포넌트들을 포함한다. 시스템 에이전트(210)는, 코어(202A-N) 및 그래픽 프로세서(208)의 전력 상태를 조절하기 위한 로직 및 컴포넌트들을 구비한 전력 제어 유닛(PCU)을 더 포함할 수 있다.
프로세서(200)는 그래픽 프로세싱 동작을 실행하는 그래픽 프로세서(208)를 더 포함한다. 일 실시예에서, 그래픽 프로세서(208)는 공유 캐시 유닛(206)의 세트와, 하나 이상의 집적 메모리 제어기(214)를 구비한 시스템 에이전트 유닛(210)에 연결된다. 일 실시예에서, 디스플레이 제어기(211)는 그래픽 프로세서(208)에 연결되어 그래픽 프로세서 출력을 하나 이상의 연결된 디스플레이들에게로 드라이빙한다. 디스플레이 제어기(211)는 적어도 하나의 상호접속부를 통해 그래픽 프로세서와 연결된 별도의 모듈일 수 있거나, 또는 그래픽 프로세서(208) 또는 시스템 에이전트(210) 내에 집적될 수 있다.
일 실시예에서, 링 기반 상호접속 유닛(212)은 프로세서(200)의 내부 컴포넌트들을 연결하는데 사용되지만, 대안의 상호접속 유닛, 가령, 포인트 투 포인트 상호접속, 스위칭형 상호접속부, 또는 당해 기술분야에서 널리 알려진 기술을 구비한 다른 기술들이 사용될 수 있다. 일 실시예에서, 그래픽 프로세서(208)는 I/O 링크(213)를 통해 링 상호접속 유닛(212)과 접속된다.
예의 I/O 링크(213)는 다양한 프로세서 컴포넌트들과 eDRAM 모듈과 같은 고성능 임베디드 메모리 모듈(218) 간의 통신을 가능하게 하는 온 패키지(on package) I/O 상호접속물을 구비한 다양한 복수의 I/O 상호접속물 중의 적어도 하나를 나타낸다. 일 실시예에서, 코어(202A-N)의 각각과 그래픽 프로세서(208)는 공유된 최종 레벨 캐시로서 임베디드 메모리 모듈(218)을 사용한다.
일 실시예에서, 코어(202A-N)는 동일한 인스트럭션 세트 아키텍처를 실행하는 동종의 코어이다. 다른 실시예에서, 코어(202A-N)는 인스트럭션 세트 아키텍처(ISA)의 측면에서 이종이며, 여기서, 코어(202A-N) 중의 하나 이상은 제 1 인스트럭션 세트를 실행하지만, 다른 코어의 적어도 하나는 제 1 인스트럭션 세트 또는 다른 인스트럭션 세트의 서브세트를 실행한다.
프로세서(200)는, 복수의 프로세스 기술, 가령, 상보형 금속 산화물 반도체(CMOS), 바이폴라 접합/상호형 금속 산화물 반도체(BiCMOS) 또는 N 타입 금속 산화물 반도체 로직(NMOS) 중 임의의 것을 사용하여 하나 이상의 기판 상에 구현된 것이거나 이의 일부일 수 있다. 추가적으로, 프로세서(200)는 하나 이상의 칩 상에서 구현되거나 또는 다른 컴포넌트들에 부가하여, 도시된 컴포넌트들을 갖는 시스템 온 칩(SOC) 집적 회로로서 구현될 수 있다.
도 5는, 이산 그래픽 프로세싱 유닛일 수 있거나 또는 복수의 프로세싱 코어와 함께 집적된 그래픽 프로세서일 수 있는 그래픽 프로세서(300)의 일 실시예의 블럭도이다. 일 실시예에서, 그래픽 프로세서는 그래픽 프로세서 상의 레지스터들에 대한 메모리 매핑된 I/O 인터페이스와 프로세서 메모리 내에 배치된 커맨드들을 통해 통신된다. 그래픽 프로세서(300)는 메모리에 액세스하기 위한 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유된 외부 캐시, 및/또는 시스템 메모리에 대한 인터페이스일 수 있다.
그래픽 프로세서(300)는 또한 디스플레이 출력 데이터를 디스플레이 디바이스(320)로 드라이빙하기 위한 디스플레이 제어기(302)를 포함한다. 디스플레이 제어기(302)는 디스플레이를 위한 하나 이상의 오버레이 평면용 하드웨어와, 복수의 계층의 비디오 또는 사용자 인터페이스 엘리먼트들의 구성을 포함한다. 일 실시예에서, 그래픽 프로세서(300)는, MPEG-2와 같은 동화상 전문가 그룹(MPEG), H.264/MPEG-4 AVC 뿐만 아니라 SMPTE 421M/VC-1와 같은 증강된 비디오 코딩(AVC) 포맷, JPEG와 같은 JPEG 포맷, 및 MJPEG 포맷을 포함하지만 이에 국한되는 것은 아닌 하나 이상의 매체 인코딩 포맷들로, 이들 포맷으로부터, 또는 이들 포맷들 간에 매체를 인코딩, 디코딩, 또는 드랜스코딩하는 비디오 코덱 엔진(306)을 포함한다.
일 실시예에서, 그래픽 프로세서(300)는 가령, 비트-바운더리 블럭 전송을 구비한 2 차원(2D) 래스터화기 동작을 수행하는 블럭 이미지 전송(BLIT) 엔진(304)을 포함한다. 그러나, 일 실시예에서, 2D 그래픽 동작은 그래픽 프로세싱 엔진(GPE)(310)의 하나 이상의 컴포넌트를 사용하여 수행된다. 그래픽 프로세싱 엔진(310)은 3D 그래픽 동작 및 매체 동작을 구비한 그래픽 동작을 수행하기 위한 컴퓨팅 엔진이다.
GPE(310)는 3D 프리미티브 형상(가령, 사각형, 삼각형 등)에 대해 작용하는 프로세싱 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하기 위한 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은 프로그램가능 및 고정된 기능 엘리먼트들 내에서 다양한 태스크를 수행하거나 3D/매체 서브 시스템(315)에 대한 실행 스레드를 생성하는 프로그램가능 및 고정딘 기능 엘리먼트들을 포함한다. 3D 파이프라인(312)이 매체 동작을 수행하는 데 사용될 수 있지만, GPE(310)의 일 실시예는 비디오 포스트 프로세싱 및 이미지 증강과 같은 매체 동작을 수행하는 데 특정적으로 사용되는 매체 파이프라인(316)을 또한 포함한다.
일 실시예에서, 매체 파이프라인(316)은 비디오 디코딩 가속, 비디오 디 인터페이싱, 및 비디오 인코딩 가속과 같은 하나 이상의 특수 매체 동작을 비디오 코덱 엔진(306) 대신에 수행하는 고정된 기능 또는 프로그램가능한 로직 유닛을 포함한다. 일 실시예에서, 매체 파이프라인(316)은 3D/매체 서브 시스템(315) 상에서 실행을 위한 스레드를 생성하는 스레드 생성 유닛을 더 포함한다. 생성된 스레드는 3D/매체 서브 시스템 내에 포함되는 하나 아싱의 그래픽 실행 유닛 상에서의 매체 동작을 위한 계산을 수행한다.
3D/매체 서브 시스템(315)은 3D 파이프라인(312) 및 매체 파이프라인(316)에 의해 생성된 스레드를 실행하기 위한 로직을 포함한다. 일 실시예에서, 이 파이프라인들은 3D/매체 서브 시스템(315)에 스레드 실행 요청을 전송하며, 이 서브 시스템은 이용가능 스레드 실행 리소스에 대한 다양한 요청을 조정 및 디스패칭하기 위한 스레드 디스패치 로직을 포함한다. 실행 리소스들은 3D 및 매체 스레드를 프로세싱하기 위한 그래픽 실행 유닛의 어레이를 포함한다. 일 실시예에서, 3D/매체 서브 시스템(315)은 스레드 인스트러견 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 일 실시예에서, 상기 서브 시스템은 또한 스레드들 간의 데이터를 공유하고 출력 데이터를 저장하기 위해, 레지스터 및 어드레싱가능한 메모리를 포함한 공유 메모리를 포함한다.
도 6은 그래픽 프로세서를 위한 그래픽 프로세싱 엔진(410)의 일 실시예의 블럭도이다. 일 실시예에서, 그래픽 프로세싱 엔진(GPE)(410)은 도 5에 도시된 GPE(310)의 한 버전이다. GPE(410)는 3D 파이프라인(412) 및 매체 파이프라인(416)을 포함하며, 이들 각각은 도 5의 3D 파이프라인(312) 및 매체 파이프라인(316)의 구현예와 상이하거나 유사할 수 있다.
일 실시예에서, GPE(410)는 GPE 3D 및 매체 파이프라인(412, 416)에 커맨드 스트림을 제공하는 커맨드 스트리머(403)와 접속한다. 커맨드 스트리머(403)는 시스템 메모리 또는 하나 이상의 내부 캐시 메모리 및 공유된 캐시 메모리일 수 있는 메모리에 접속된다. 커맨드 스트리머(403)는 메모리로부터 커맨드들을 수신하며 이 커맨드들을 3D 파이프라인(412) 및 매체 파이프라인(416)으로 전송한다. 3D 파이프라인 및 매체 파이프라인은 제각기의 파이프라인 내의 로직을 통해 동작들을 수행하거나 실행 유닛 어레이(414)에 대해 하나 이상의 실행 스레들을 디스패칭함으로써 이들 커맨드들을 프로세싱한다. 일 실시예에서, 실행 유닛 어레이(414)는 크기 조정가능하며, 그 결과, 그 어레이는 GPE(410)의 목표 전력 및 성능 레벨에 기반한 가변 개수의 실행 유닛들을 포함한다.
샘플링 엔진(430)은 메모리(가령, 캐시 메모리 또는 시스템 메모리)와 실행 유닛 어레이(414)에 접속된다. 일 실시예에서, 샘플링 엔진(430)은 실행 유닛 어레이(414)로 하여금 메모리로부터 그래픽 및 매체 데이터를 판독할 수 있게 하는 크기조정가능 실행 유닛 어레이(414)에 대한 메모리 액세스 메커니즘을 제공한다. 일 실시예에서, 샘플링 엔진(430)은 매체용 특수 이미지 샘플링 동작을 수행하는 로직을 포함한다.
샘플링 엔진(430) 내의 특수 매체 샘플링 로직은 디노이즈/디인터페이스 모듈(432), 모션 추정 모듈(434), 및 이미지 스케일링 및 필터링 모듈(436)을 포함한다. 디노이즈/디인터페이스 모듈(432)은 디코딩된 비디오 데이터에 대해 디노이즈 또는 디인터레이스 알고리즘 중 하나 이상을 수행하는 로직을 포함한다. 디인터레이스 로직은 인터페이싱된 비디오 컨텐츠의 교번 필드들을 단일 비디오 프레임 내로 결합시킨다. 디노이즈 로직은 비디오 및 이미지 데이터로부터 데이터 노이즈를 감소시키거나 제거한다. 일 실시예에서, 디노이즈 로직 및 디인터페이스 로직은 모션 적응적이며 비디오 데이터에서 검출된 모션의 양에 기반한 공간 필터링 또는 시간 필터링을 사용한다. 일 실시예에서, 디노이즈/디인터페이스 모듈(432)은 (가령, 모션 추정 엔진(434) 내에서) 전용 모션 검출 로직을 포함한다.
모션 추정 엔진(434)은 비디오 데이터에 대해 모션 벡터 추정 및 예측과 같은 비디오 가속 기능을 수행함으로써 비디오 동작을 위한 하드웨어 가속을 제공한다. 모션 추정 엔진은 연속하는 비디오 프레임들 간의 이미지 데이터의 변환을 기술하는 모션 벡터들을 결정한다. 일 실시예에서, 그래픽 프로세서 매체 코덱은 매크로 블럭 레벨에서 비디오에 대한 동작을 수행하기 위한 비디오 모션 추정 엔진(434)을 사용하지만, 매크로 블럭 레벨에서의 비디오에 대한 동작은 비디오 모션 추정 엔진을 사용함이 없이 범용 프로세서를 사용하여 수행하는 데 있어서는 계산 집약적일 수도 있다. 일 실시예에서, 모션 추정 엔진(434)은 일반적으로 그래픽 프로세서 컴포넌트들에 이용되어, 비디오 데이터 내의 모션의 방향 또는 크기에 민감하거나 적응적인 비디오 디코딩 및 프로세싱 기능에 대한 지원을 제공한다.
이미지 스케일링 및 필터링 모듈(436)은 생성된 이미지 및 비디오의 시각적 품질을 증강시키기 위한 이미지 프로세싱 동작을 수행한다. 일 실시예에서, 스케일링 및 필터링 모듈(436)은 이미지 및 비디오 데이터를 실행 유닛 어레이(414)로 제공하기 전에 샘플링 동작 중에 이미지 및 비디오 데이터를 프로세싱한다.
일 실시예에서, 그래픽 프로세싱 엔진(410)은 메모리에 액세스하기 위해 그래픽 서브 시스템에 대한 추가의 메커니즘을 제공하는 데이터 포트(444)를 포함한다. 이 데이터 포트(444)는 목표 기입물의 렌더링, 일정한 버퍼 판독, 메모리 공간 판독/기입의 스크래치, 및 매체 표면 액세싱을 포함하는 동작들을 위한 메모리 액세스를 가능하게 한다. 일 실시예에서, 데이터 포트(444)는 메모리에 대한 액세스를 캐싱하기 위한 캐시 메모리 공간을 포함한다. 캐시 메모리는 단일 데이터 캐시일 수 있거나, 또는 데이터 포트를 통해 메모리에 액세스하는 복수의 서브 시스템들을 위한 복수의 캐시(가령, 버퍼링 버퍼 캐시, 일정한 버퍼 캐시 등) 내로 분리될 수 있다. 일 실시예에서, 실행 유닛 어레이(414) 내의 실행 유닛 상에서 실행되는 스레드들은 그래픽 프로세싱 엔진(410)의 서브 시스템들의 각각을 연결하는 데이터 분산 상호접속부를 통해 메시지들을 교환함으로써 데이터 포트와 통신된다.
도 7은 그래픽 프로세서의 또다른 실시예의 블럭도이다. 일 실시예에서, 그래픽 프로세서는 링 상호접속부(502), 파이프라인 프런트 엔드(504), 매체 엔진(537), 및 그래픽 코어(580A-N)를 포함한다. 링크 상호접속부(502)는 다른 그래픽 프로세서 또는 하나 이상의 범용 프로세서 코어를 구비한 다른 프로세싱 유닛들에 대해 상기 그래픽 프로세서를 연결한다. 일 실시예에서, 그래픽 프로세서는 멀티 코어 프로세싱 시스템 내에 집적된 여러 프로세서들 중의 하나이다.
그래픽 프로세서는 링 상호접속부(502)를 통해 커맨드들의 뱃치(batches of commands)를 수신한다. 입력 커맨드들은 파이프라인 프런트 엔드(504)에서 커맨드 스트리머(503)에 의해 해석된다. 그래픽 프로세서는 그래픽 코어(580A-N)를 통한 3D 지오메트리 프로세싱 및 매체 프로세싱을 수행하기 위한 스케일러블 실행 로직을 포함한다. 3D 지오메트리 프로세싱 커맨드들의 경우, 커맨드 스트리머(503)는 이들 커맨드들을 지오메트리 파이프라인(536)에 제공한다. 적어도 일부의 매체 프로세싱 커맨드들의 경우, 커맨드 스트리머(503)는 이들 커맨드들을 매체 엔진(537)에 연결된 비디오 프런트 엔드(534)에 제공한다. 매체 엔진(537)은 비디오 및 이미지 포스트 프로세싱을 위한 비디오 품질 엔진(VQE)(530) 및 하드웨어 가속된 매체 데이터의 인코딩 및 디코딩을 제공하는 멀티 포맷 인코딩/디코딩(MFX) 엔진(533)을 포함한다. 지오메트리 파이프라인(536) 및 매체 엔진(537)은 각각 적어도 하나의 그래픽 코어(580A)에 의해 제공된 스레드 실행 리소스를 위한 실행 스레드를 생성한다.
그래픽 프로세서는 스케일러블 스레드 실행 리소스 피처링 모듈러 코어(580A-N)(때때로는 코어 슬라이스로 지칭되기도 함)를 포함하며, 그 각각은 복수의 서브 코어(550A-N, 560A-N)(때때로는 코어 서브 슬라이스로 지칭되기도 함)를 갖는다. 그래픽 프로세서는 임의의 개수의 그래픽 코어(580A 내지 580N)를 가질 수 있다. 일 실시예에서, 그래픽 프로세서는 적어도 하나의 제1 서브 코어(550A) 및 제2 서브 코어(560A)를 갖는 그래픽 코어(580A)를 포함한다. 다른 실시예에서, 그래픽 프로세서는 단일 서브 코어(가령, 550A)를 갖는 저전력 프로세서이다. 일 실시예에서, 그래픽 프로세서는 복수의 그래픽 코어(580A-N)를 포함하며, 각각은 제1 서브 코어의 세트(550A-N) 및 제2 서브 코어의 세트(560A-N)를 포함한다. 제1 서브 코어 세트(550A-N) 내의 각각의 서브 코어는 적어도 제1 실행 유닛의 세트(552A-N) 및 매체/텍스처 샘플러(554A-N)를 포함한다. 제2 서브 코어 세트(560A-N) 내의 각각의 서브 코어는 적어도 제2 실행 유닛의 세트(562A-N) 및 매체/텍스처 샘플러(564A-N)를 포함한다. 일 실시예에서, 각각의 서브 코어(550A-N, 560A-N)는 공유 리소스의 세트(570A-N)를 공유한다. 일 실시예에서, 공유 리소스는 공유 캐시 메모리 및 픽셀 동작 로직을 포함한다. 다른 공유 리소스들은 또한 그래픽 프로세서의 다양한 실시예에 포함될 수도 있다.
도 8은 그래픽 프로세싱 엔진의 일 실시예에 이용되는 프로세싱 엘리먼트들의 어레이를 구비한 스레드 실행 로직(600)을 도시한다. 일 실시예에서, 스레드 실행 로직(600)은 픽셀 쉐이더(602), 스레드 디스패처(604), 인스트럭션 캐시(606), 복수의 실행 유닛을 구비한 스케일러블 실행 유닛 어레이(608A-N), 샘플러(610), 데이터 캐시(612), 및 데이터 포트(614)를 포함한다. 일 실시예에서, 상기 포함된 컴포넌트들은 상기 컴포넌트들의 각각에 링크되는 상호접속 패브릭을 통해 상호접속된다. 스레드 실행 로직(600)은, 상기 인스트럭션 캐시(606), 상기 데이터 포트(614), 상기 샘플러(610) 및 상기 실행 유닛 어레이(608A-N) 중 하나 이상을 통한 시스템 메모리 또는 캐시 메모리와 같은 메모리에 대한 하나 이상의 커넥션을 포함한다. 일 실시예에서, 각각의 실행 유닛(가령, 608A)은 복수의 동시적인 스레드들을 실행할 수 있고 각각의 스레드에 대한 복수의 데이터 엘리먼트들을 동시에 프로세싱할 수 있는 개개의 벡터 프로세서이다. 실행 유닛 어레이(608A-N)는 임의의 개수의 개개의 실행 유닛을 포함한다.
일 실시예에서, 실행 유닛 어레이(608A-N)는 주로 "쉐이더" 프로그램들을 실행하는 데 사용된다. 일 실시예에서, 실행 유닛 어레이(608A-N) 내의 실행 유닛들은 여러 표준 3D 그래픽 쉐이더 인스트럭션에 대한 네이티브 지원을 포함하는 인스트럭션 세트를 실행하며, 그 결과, 그래픽 라이브러리들 내의 쉐이더 프로그램들(가령, Direct3D 및 OpenGL)은 최소의 변환으로 실행된다. 이러한 실행 유닛들은 정점 및 지오메트리 프로세싱(가령, 정점 프로그램, 지오메트리 프로그램, 정점 쉐이더), 픽셀 프로세싱(가령, 픽셀 쉐이더, 프래그먼트 쉐이더) 및 범용 프로세싱(가령, 계산 및 매체 쉐이더)을 지원한다.
실행 유닛 어레이(608A-N) 내의 각각의 실행 유닛은 데이터 엘리먼트의 어레이 상에서 동작한다. 데이터 엘리먼트들의 개수는 "실행 사이즈"이거나 또는 인스트럭션에 대한 채널들의 개수이다. 실행 채널은, 데이터 엘리먼트 액세스, 마스킹 및 인스트럭션들 내의 플로우 제어를 위한 논리적 실행 유닛이다. 채널들의 개수는 특정의 그래픽 프로세서에 대한 물리적 ALU들 또는 FPU들의 개수에 독립적일 수 있다. 실행 유닛(608A-N)은 정수 및 플로팅 포인트 데이터 타입들을 지원한다.
실행 유닛의 인스트럭션 세트는 단일 인스트럭션 복수 데이터(SIMD) 인스트럭션을 포함한다. 다양한 데이터 엘리먼트들은 레지스터 내에 패킷 데이터 타입으로서 저장될 수 있으며, 실행 유닛은 다양한 엘리먼트들의 데이터 사이즈에 기반하여 다양한 엘리먼트을 프로세싱할 것이다. 가령, 256-비트 폭의 벡터 상에서 동작할 때, 그 벡터의 256 비트들은 레지스터 내에 저장되며 실행 유닛은 그 벡터 상에서 4개의 개별의 64-비트 패킷 데이터 엘리먼트(쿼드-워드(QW) 사이즈 데이터 엘리먼트), 8개의 개별의 32-비트 패킷 데이터 엘리먼트(이중 워드(DW) 사이즈 데이터 엘리먼트), 16개의 개별의 16-비트 패킷 데이터 엘리먼트(워드(W) 사이즈 데이터 엘리먼트), 또는 32개의 개별의 8-비트 데이터 엘리먼트(바이트(B) 사이즈 데이터 엘리먼트)로서 동작한다. 그러나, 상이한 벡터 폭 및 레지스터 사이즈가 사용가능하다.
하나 이상의 내부 인스트럭션 캐시(가령, 606)가 실행 유닛들에 대한 스레드 인스트럭션들을 캐싱하기 위해 스레드 실행 로직(600) 내에 포함된다. 일 실시예에서, 하나 이상의 데이터 캐시(가령, 612)가 스레드 실행동안 스레드 데이터를 캐싱하기 위해 포함된다. 샘플러(610)는 3D 동작을 위한 텍스처 샘플링과 매체 동작을 위한 매체 샘플링을 제공하기 위해 포함된다. 일 실시예에서, 샘플러(610)는 샘플링된 데이터를 실행 유닛으로 제공하기 전에 샘플링 프로세스 동안 텍스처 또는 매체 데이터를 프로세싱하는 특수 텍스처 또는 매체 샘플링 기능을 포함한다.
실행 동안, 그래픽 파이프라인 및 매체 파이프라인은 스레드 생성 및 디스패치 로직을 통해 스레드 실행 로직(600)에 스레드 개시 요청을 전송한다. 스레드 실행 로직(600)은 그래픽 파이프라인 및 매체 파이프라인으로부터의 스레드 개시 요청들을 중재하고 요청된 스레드들을 하나 이상의 실행 유닛(608A-N) 상에서 인스탄스화하는 로컬 스레드 디스패처(604)를 포함한다. 가령, 지오메트리 파이프라인(가령, 도 3의 536)은 정점 프로세싱 스레드, 테셀레이션 스레드 또는 지오메트리 프로세싱 스레드를 스레드 실행 로직(600)으로 디스패칭한다. 스레드 디스패처(604)는 또한 실행 쉐이더 프로그램들로부터의 요청들로부터 생성되는 런타임 스레드를 또한 프로세싱할 수 있다.
지오메트리 객체들의 그룹이 프로세싱되어 픽셀 데이터 내로 래스터화되었다면, 픽셀 쉐이더(602)는 출력 정보를 추가로 계산하고 그 결과가 출력면(가령, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 등)에 기입될 수 있도록 호출된다. 일 실시예에서, 쉐이더(602)는 래스터화된 객체에 걸쳐 보간될 다양한 정점 속성들의 값들을 계산한다. 픽셀 쉐이더(602)는 그 후 API-제공된 픽셀 쉐이더 프로그램을 실행한다. 이 픽셀 쉐이더 프로그램을 실행하기 위해, 픽셀 쉐이더(602)는 스레드 디스패처(604)를 통해 스레드들을 실행 유닛(가령, 608A)에 디스패칭한다. 픽셀 쉐이더(602)는 메모리 내에 저장된 텍스처 맵 내의 텍스처 데이터에 액세스하기 위해 샘플러(610) 내의 텍스처 샘플링 로직을 사용한다. 텍스처 데이터 및 입력 지오메트리 데이터에 대한 산술 동작은 각각의 지오메트리 프래그먼트에 대한 픽셀 컬러 데이터를 계산하거나 추가의 프로세싱으로부터 하나 이상의 픽셀을 폐기한다.
일 실시예에서, 데이터 포트(614)는 스레드 실행 로직(600) 출력 프로세싱된 데이터를 위한 메모리 액세스 메커니즘을 그래픽 프로세서 출력 파이프라인 상의 프로세싱을 위한 메모리에 제공한다. 일 실시예에서, 데이터 포트(614)는 데이터 포트를 통해 메모리 액세스를 위한 데이터를 캐싱하기 위해 하나 이상의 캐시 메모리(가령, 데이터 캐시(612))를 포함하거나 캐시 메모리에 연결된다.
도 9는 일 실시예에 따른 그래픽 프로세서 실행 유닛 인스트럭션을 도시한 블럭도이다. 일 실시예에서, 그래픽 프로세서 실행 유닛은 복수의 포맷의 인스트럭션들을 갖는 인스트럭션 세트를 지원한다. 실선 박스는 실행 유닛 인스트럭션에 일반적으로 포함되는 컴포넌트들을 도시하는 반면, 파선 박스는, 선택적이거나 인스트럭션들의 서브 세트에만 포함되는 컴포넌트들을 포함한다. 인스트럭션이 프로세싱된 경우 인스트럭션 디코딩으로부터 발생하는 마이크로-동작과는 대조적으로, 매크로-동작들은 실행 유닛으로 제공된 인스트럭션들이라는 점에서 인스트럭션 포맷은 도시된 것이 매크로-동작들이라는 것을 기술하고 있다
일 실시예에서. 그래픽 프로세서 실행 유닛은 128-비트 포맷(710)의 인스트럭션을 고유하게(natively) 지원한다. 64-비트 컴팩트형 인스트럭션 포맷(730)은 선택된 인스트럭션, 인스트럭션 옵션, 및 오퍼랜드들의 개수에 기반한 일부 인스트럭션을 위해 이용가능하다. 고유의 128-비트 포맷(710)은 모든 인스트럭션 옵션들에 대한 액세스를 제공하지만, 일부 옵션 및 동작들은 64-비트 포맷(730)으로 제한된다. 64-비트 포맷(730)에서 이용가능한 고유의 인스트럭션들은 실시예에 따라 변화한다. 일 실시예에서, 이 인스트럭션은 부분적으로 인덱스 필드(713) 내의 인덱스 값들의 세트를 사용하여 컴팩트된다. 실행 유닛 하드웨어는 상기 인덱스 값들에 기반하여 컴팩션 테이블들의 세트(a set of compaction tables)를 참조하며 컴팩션 테이블 출력을 사용하여 고유의 인스트럭션을 128-비트 포맷(710)으로 재구성한다.
각각의 포맷의 경우, 인스트럭션 연산코드(instruction opcode)(712)는 실행 유닛이 수행하는 동작을 정의한다. 실행 유닛은 각각의 오퍼랜드의 복수의 데이터 엘리먼트들에 걸쳐 각각의 인스트럭션을 동시에 실행한다. 가령, 가산 인스트럭션에 응답하여 실행 유닛은 텍스처 엘리먼트 또는 픽처 엘리먼트를 나타내는 각각의 컬러 채널에 걸쳐 동시적인 가산 동작을 수행한다. 디폴트로서, 실행 유닛은 오퍼랜드들의 모든 데이터 채널에 걸쳐 각각의 인스트럭션을 수행한다. 인스트럭션 제어 필드(712)는 채널 선택(가령, 예측) 및 데이터 채널 순서(가령, 혼합(swizzle))와 같은 소정의 실행 옵션들을 통한 제어를 가능하게 한다. 128-비트 인스트럭션(710)의 경우, 실행 사이즈 필드(716)는 동시에 실행될 데이터 채널들의 개수를 제한한다. 실행 사이즈 필드(716)는 64-비트 컴팩트 인스트럭션 포맷(730)에서의 사용에는 이용될 수 없다.
일부 실행 유닛 인스트럭션은 두 개의 소스 오퍼랜드인 SRC0 (720) 및 SRC1 (722)와 하나의 목적지 오퍼랜드(718)를 구비한 세 개의 오퍼랜드까지 갖는다. 일 실시예에서, 실행 유닛은 이중 목적지 인스트럭션을 지원하는데, 그 중 하나는 암시된다. 데이터 조작 인스트럭션은 제3 소스 오퍼랜드(가령, SRC2 (724))를 가질 수 있는데, 여기서 인스트럭션 연산코드(JJ12)는 소스 오퍼랜드들의 개수를 결정한다. 인스트럭션의 최종 소스 오퍼랜드는 그 인스트럭션과 함께 전달되는 중간(가령, 하드 코딩된) 값일 수 있다.
일 실시예에서, 인스트럭션들은 연산코드 비트-필드들에 기반하여 그룹화되어 연산코드 디코드(740)를 단순화한다. 8-비트 연산코드의 경우, 비트 4, 5, 및 6은 실행 유닛이 연산코드의 타입을 결정할 수 있게 한다. 도시된 정확한 연산코드 그룹화는 예시적인 것이다. 일 실시예에서, 이동 및 로직 연산코드 그룹(742)은 데이터 이동 인스트럭션 및 로직 인스트럭션(가령, mov, cmp)을 포함한다. 이동 및 로직 그룹(742)은 5개의 최상위 비트(MSB)를 공유하며, 여기서 이동 인스트럭션은 0000xxxxb(가령, 0x0x)의 형태로 이루어지며, 로직 인스트럭션은 0001xxxxb(가령, 0x01)의 형태로 이루어진다. 흐름 제어 인스트럭션 그룹(744)(가령, call, jmp)은 0010xxxxb(가령, 0x20)의 형태의 인스트럭션을 포함한다. 여러 종류의 인스트럭션 그룹(746)은 0011xxxxb(가령, 0x30)의 형태의 동기화 인스트럭션들(가령, wait, send)을 구비한 인스트럭션들의 혼합을 포함한다. 동시적 수학 인스트럭션 그룹(748)은 0100xxxxb(가령, 0x40)의 형태의 컴포넌트 방식의 산술 인스트럭션(가령, add, mul)을 포함한다. 동시적 수학 인스트럭션 그룹(748)은 데이터 채널에 걸쳐 산술 동작들을 동시에 수행한다. 벡터 수학 그룹(750)은 0101xxxxb(가령, 0x50)의 형태의 산술 인스트럭션들(가령, dp4)을 포함한다. 벡터 수학 그룹은 벡터 오퍼랜드들 상에서 내적 계산(dot product calculation)과 같은 산술 계산을 수행한다.
도 10은 그래픽 파이프라인(820), 매체 파이프라인(830), 디스플레이 엔진(840), 스레드 실행 유닛(850) 및 렌더 출력 파이프라인(870)을 포함하는 그래픽 프로세서의 또다른 실시예의 블럭도이다. 일 실시예에서, 상기 그래픽 프로세서는 하나 이상의 범용 프로세싱 코어들을 포함하는 멀티-코어 프로세싱 시스템 내의 그래픽 프로세서이다. 이 그래픽 프로세서는 하나 이상의 제어 레지스터들(도시안됨)로의 레지스터 기입물(register writes)에 의해 또는 링 상호접속부(802)를 통해 그래픽 프로세서에 발행된 커맨드를 통해 제어된다. 링 상호접속부(802)는 그래픽 프로세서를 다른 그래픽 프로세서 또는 범용 프로세서와 같은 다른 프로세싱 컴포넌트에 연결한다. 링 상호접속부로부터의 커맨드들은 인스트럭션들을 상기 그래픽 파이프라인(820) 또는 매체 파이프라인(830)의 개개의 컴포넌트들에게 제공하는 커맨드 스트리머(803)에 의해 해석된다.
커맨드 스트리머(803)는 메모리로부터의 정점 데이터를 판독하여 커맨드 스트리머(803)에 의해 제공되는 정점 프로세싱 커맨드들을 실행하는 정점 페처(vertex fetcher)(805) 컴포먼트의 동작을 관리한다. 정점 페처(805)는 정점 데이터를 정점 쉐이더(807)에 제공하며, 정점 쉐이더는 각각의 정점에 대한 좌표 공간 변환 동작 및 조명 동작을 수행한다. 정점 페처(805) 및 정점 쉐이더(807)는 실행 스레드들을 스레드 디스패처(831)를 통해 실행 유닛(852A, 852B)으로 디스패칭함으로써 정점 프로세싱 인스트럭션들을 실행한다.
일 실시예에서, 실행 유닛(852A, 852B)은 그래픽 동작 및 매체 동작을 수행하는 인스트럭션 세트를 갖는 벡터 프로세서들의 어레이이다. 실행 유닛(852A, 852B)은 각각의 어레이에 대해 특정되거나 또는 어레이들 간에 공유된 부착형 L1 캐시(851)를 갖는다. 이 캐시는 데이터 캐시로서, 인스트럭션 캐시로서, 또는 데이터 및 인스트럭션을 상이한 파티션에 포함하도록 구획된 단일 캐시로서 구성될 수 있다.
일 실시예에서, 그래픽 파이프라인(820)은 3D 객체의 하드웨어 가속화된 테셀레이션을 수행하는 테셀레이션 컴포넌트를 포함한다. 프로그램가능 헐 쉐이더(programmable hull shader)(811)는 테셀레이션 동작을 구성한다. 프로그램가능 도메인 쉐이더(817)는 테셀레이션 출력의 백엔드 평가를 제공한다. 테셀레이터(813)는 상기 헐 쉐이더(811)의 관리로 동작하며, 상기 그래픽 파이프라인(820)에 입력으로서 제공되는 코어스 지오메트릭 모델(coarse geometric model)에 기반하여 상세한 지오메트릭 객체들의 세트를 생성하는 특수 목적 로직을 포함한다. 테셀레이션이 사용되지 않으면, 테셀레이션 컴포넌트들(811, 813, 817)은 바이패싱될 수 있다.
완전한 지오메트릭 객체들은 실행 유닛(852A, 852B)으로 디스패칭된 하나 이상의 스레드들을 통해 지오메트리 쉐이더(819)에 의해 프로세싱될 수 있거나, 클리퍼(829)로 바로 진행할 수 있다. 지오메트리 쉐이더는 그래픽 파이프라인의 이전 스테이지들에서와 마찬가지로 정점들 또는 정점들의 패치들보다는 완전한 지오메트릭 객체들 상에서 동작한다. 테셀레이션이 디스에이블된다면, 지오메트리 쉐이더(819)는 정점 쉐이더(807)로부터 입력을 수신한다. 지오메트리 쉐이더(819)는 테셀레이션 유닛들이 디스에이블되는 경우 지오메트리 테셀레이션을 수행하는 지오메트리 쉐이더 프로그램에 의해 프로그램가능하다.
래스터화되기 전에, 정점 데이터는 클리퍼(829)에 의해 프로세싱되며, 이 클리퍼는 고정된 기능의 클리퍼이거나, 클리핑 기능 및 지오메트리 쉐이더 기능을 갖는 프로그램가능한 클리퍼이다. 일 실시예에서, 렌더 출력 파이프라인(870) 내의 래스터화기(873)는 지오메트릭 객체를 그 픽셀마다의 표현으로 변환하기 위해 픽셀 쉐이더를 디스패칭한다. 일 실시예에서, 픽셀 쉐이더 로직은 스레드 실행 로직(850) 내에 포함된다.
그래픽 엔진은 상호접속 버스, 상호접속 패브릭, 또는 그래픽 엔진의 주요 컴포넌트들 중에서 데이터 및 메시지의 통과를 가능하게 하는 일부 다른 상호접속 메커니즘을 갖는다. 일 실시예에서, 실행 유닛(852A, 852B) 및 관련 캐시(851), 텍스처 및 매체 샘플러(854), 및 텍스처/샘플러 캐시(858)는 데이터 포트(856)를 통해 상호접속하여 그래픽 엔진의 렌더 출력 파이프라인 컴포넌트들에 대해 메모리 액세스를 수행하며 그 렌더 출력 파이프라인 컴포넌트들과의 통신을 수행한다. 일 실시예에서, 샘플러(854), 캐시(851, 858) 및 실행 유닛(852A, 852B)은 각각 별도의 메모리 액세스 경로들을 갖는다.
일 실시예에서, 상기 렌더 출력 파이프라인(870)은 레스터화기 및 정점 기반 객체들을 그 관련된 픽셀 기반 표현으로 변환하는 깊이 테스트 컴포넌트(873)를 포함한다. 일 실시예에서, 레스터화기 로직은 고정된 기능 삼각형 및 라인 레스터화를 수행하는 윈도우어/마스커(windower/masker) 유닛을 포함한다. 관련 렌더 및 깊이 버퍼 캐시(878, 879)는 또한 일 실시예에서 이용가능하다. 픽셀 동작 컴포넌트(877)는 데이터에 대해 픽셀 기반 동작을 수행하지만, 일부 사례의 경우, 2D 동작과 관련된 픽셀 동작들(가령, 혼합을 통한 비트 블럭 이미지 전송들)은 2D 엔진(841)에 의해 수행되거나 디스플레이시에 디스플레이 제어기(843)에 의해 오버레이 디스플레이 평면들을 사용하는 것으로 대체된다. 일 실시예에서, 공유된 L3 캐시(875)는 모든 그래픽 컴포넌트에 대해 이용가능하여 메인 시스템 메모리의 사용 없이도 데이터의 공유를 가능하게 한다.
그래픽 프로세서 매체 파이프라인(830)은 매체 엔진(837)과 비디오 프런트 엔드(834)를 포함한다. 일 실시예에서, 비디오 프런트 엔드(834)는 커맨드 스트리머(803)로부터 커맨드들을 수신한다. 그러나, 일 실시예에서, 매체 파이프라인(830)은 별도의 커맨드 스트리머를 포함한다. 비디오 프런트 엔드(834)는 매체 커맨드들을 매체 엔진(837)에 전송하기 전에 매체 커맨드들을 프로세싱한다. 일 실시예에서, 매체 엔진은 스레드 디스패처(831)를 통해 스레드 실행 로직(850)으로 디스패칭을 위한 스레드를 생성하는 스레드 생성 기능을 포함한다.
일 실시예에서, 그래픽 엔진은 디스플레이 엔진(840)을 포함한다. 일 실시예에서, 디스플레이 엔진(840)은 그래픽 프로세서의 외부에 위치하며 링 상호접속부(802) 또는 일부 다른 상호접속 버스 또는 패브릭을 통해 그래픽 프로세서에 연결된다. 디스플레이 엔진(840)은 2D 엔진(841)과 디스플레이 제어기(843)를 포함한다. 디스플레이 엔진(840)은 3D 파이프라인과는 독립적으로 동작할 수 있는 특수 목적 로직을 포함한다. 디스플레이 제어기(843)는 디스플레이 디바이스(도시안됨)와 연결되며, 이 디스플레이 디바이스는 랩탑 컴퓨터에서와 같은 시스템 통합 디스플레이 디바이일 수 있거나 디스플레이 디바이스 커넥터를 통해 부착되는 외부 디스플레이 디바이스일 수 있다.
그래픽 파이프라인(820) 및 매체 파이프라인(830)은, 복수의 그래픽 및 매체 프로그래밍 인터페이스에 기반하고 임의의 하나의 애플리케이션 프로그래밍 인터페이스(API)에 대해서는 특정되지 않은 동작을 수행하도록 구성가능하다. 일 실시예에서, 그래픽 프로세서를 위한 드라이버 소프트웨어는 특정의 그래픽 또는 매체 라이브러리에 특정된 API 호출을 그래픽 프로세서에 의해 프로세싱될 수 있는 커맨드로 변환한다. 다양한 실시예에서, Khronos Group에 의해 지원되는 오픈 그래픽 라이브러리(OpenGL) 및 오픈 컴퓨팅 랭귀지(OpenCL)와 마이크로소프트사로부터의 Direct3D 라이브러리에 대한 지원이 제공되거나 일 실시예에서 OpenGL 및 D3D 모두에 대한 지원이 제공된다. 오픈 소스 컴퓨터 비전 라이브러리(OpenCV)에 대한 지원도 또한 제공될 수 있다. 장래의 API의 파이프라인으로부터 그래픽 프로세서의 파이프라인으로의 매핑이 행해질 수 있는 경우 호환가능한 3D 파이프라인을 갖는 장래의 API가 또한 지원될 수도 있다.
도 11a는 일 실시예에 따른 그래픽 프로세서 커맨드 포맷을 도시한 블럭도이며, 도 11b는 일 실시예에 따른 그래픽 프로세서 커맨드 시퀀스를 포시한 블럭도이다. 도 11a의 실선 박스는 그래픽 커맨드에 일반적으로 포함되는 컴포넌트들을 도시하며, 파선 박스는 선택적이거나 그래픽 커맨드의 서브 세트에만 포함되는 컴포넌트들을 도시하고 있다. 도 11a의 예시의 그래픽 프로세서 커맨드 포맷(900)은 그 커맨드의 타겟 클라이언트(902)를 식별하는 데이터 필드와, 커맨드 동작 코드(연산코드)(904)와, 그 커맨드에 대한 관련 데이터(906)를 포함한다. 서브 연산코드(905) 및 커맨드 사이즈(908)가 또한 일부 커맨드에 포함될 수 있다.
클라이언트(902)는 커맨드 데이터를 프로세싱하는 그래픽 디바이스의 클라이언트 유닛을 특정한다. 일 실시예에서, 그래픽 프로세서 커맨드 파서는 커맨드의 추가적인 프로세싱을 컨디셔닝하고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅하도록 각각의 커맨드의 클라이언트 필드를 검사한다. 일 실시예에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛, 및 매체 유닛을 포함한다. 각각의 클라이언트 유닛은 커맨드를 프로세싱하는 대응 프로세싱 파이프라인을 갖는다. 일단 커맨드가 클라이언트 유닛에 의해 수신된다면, 클라이언트 유닛은 연산코드(904)와, 존재할 경우 서브 연산코드(905)를 판독하여 수행할 동작을 결정한다. 클라이언트 유닛은 커맨드의 데이터 필드(906) 내의 정보를 사용하여 상기 커맨드를 수행한다. 일부 커맨드의 경우, 커맨드의 사이즈를 특정하는 명시적인 커맨드 사이즈(908)가 예상된다. 일 실시예에서, 상기 커맨드 파서는 커맨드 연산코드에 기반하여 커맨드들 중의 적어도 일부의 사이즈를 자동으로 결정한다. 일 실시예에서, 커맨드들은 복수의 이중 워드를 통해 정렬된다.
도 11b의 플로우챠트는 샘플 커맨드 시퀀스(910)를 나타낸다. 일 실시예에서, 그래픽 프로세서의 일 실시예를 특징화하는 데이터 프로세싱 시스템의 소프트웨어 또는 펌웨어는 그래픽 동작들의 세트를 셋업, 실행 및 종료하도록 도시된 커맨드 시퀀스의 버전을 사용한다. 샘플 커맨드 시퀀스는 예시적인 목적으로 도시되고 기술되지만, 실시예들은 이들 커맨드 또는 이 커맨드 시퀀스에 국한되는 것은 아니다. 또한, 이들 커맨드들은 커맨드 시퀀스에서 커맨드들의 뱃치로서 발행되고, 그 결과 그래픽 프로세서는 적어도 부분적으로는 동시적인 방식으로 커맨드들의 시퀀스를 프로세싱할 것이다.
샘플 커맨드 시퀀스(910)는 파이프라인 플러시 커맨드(912)와 함께 시작하여 임의의 활성 그래픽 파이프라인이 그 파이프라인에 대한 현재 계류중인 커맨드들을 종료하게 할 수 있다. 일 실시예에서, 3D 파이프라인(922) 및 매체 파이프라인(924)은 동시에 동작하지 않는다. 파이프라인 플러시는 활성 그래픽 파이프라인이 임의의 계류중인 커맨드들을 종료하도록 수행된다. 파이프라인 플러시에 응답하여, 그래픽 프로세서에 대한 커맨드 파서는, 활성 드로잉 엔진(active drawing engines)이 계류중인 동작들을 종료하고 관련 판독 캐시들이 무효화될 때까지 커맨드 프로세싱을 정지할 것이다. 선택적으로, "더티(dirty)"로 마킹된 렌더 캐시 내의 임의의 데이터는 메모리에게로 플러싱될 수 있다. 파이프라인 플러시 커맨드(912)는 파이프라인 동기화용으로 사용될 수 있거나 또는 그래픽 프로세서를 저전력 상태로 배치하기 전에 사용될 수 있다.
파이프라인 선택 커맨드(913)는, 커맨드 시퀀스가 파이프라인들 간에 명시적으로 스위칭하는 그래픽 프로세서를 필요로 할 경우에 사용된다. 파이프라인 선택 커맨드(913)는, 실행 문맥이 모든 파이프라인에 대한 커맨드들을 발행하는 것이 아닌 이상, 파이프라인 커맨드들을 발행하기 전에 실행 문맥 내에서 오직 한번만 요구된다. 일 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 선택 커맨드(913)를 통한 파이프라인 스위칭 바로 직전에 요구된다.
파이프라인 제어 커맨드(914)는 동작을 위한 그래픽 파이프라인을 구성하며, 3D 파이프라인(922) 및 매체 파이프라인(924)을 프로그래밍하는 데 사용된다. 파이프라인 제어 커맨드(914)는 활성 파이프라인에 대한 파이프라인 상태를 구성한다. 일 실시예에서, 파이프라인 제어 커맨드(914)는 파이프라인 동기화용으로 사용되며, 커맨드들의 뱃치를 프로세싱하기 전에 활성 파이프라인 내에 하나 이상의 캐시 메모리로부터의 데이터를 클리어하는 데 사용된다.
리턴 버퍼 상태 커맨드(916)는 데이터를 기입하기 위한 제각기의 파이프라인들에 대한 리턴 버퍼들의 세트를 구성하는 데 사용된다. 일부의 파이프라인 동작들은 이 동작들이 프로세싱 동안 중간 데이터를 기입하는 하나 이상의 리턴 버퍼들의 할당, 선택, 또는 구성을 필요로 한다. 그래픽 프로세서는 또한, 출력 데이터를 저장하고 스레드 통신에 걸쳐 수행할 하나 이상의 리턴 버퍼를 사용한다. 리턴 버퍼 상태(916)는 파이프라인 동작들의 세트용으로 사용할 리턴 버퍼들의 사이즈 및 개수를 선택하는 것을 포함한다.
커맨드 시퀀스 내의 잔존 커맨드들은 동작을 위한 활성 파이프라인에 기반하여 상이하다. 파이프라인 결정(920)에 기반하여, 커맨드 시퀀스는 3D 파이프라인 상태(930)와 함께 시작하는 3D 파이프라인(922) 또는 매체 파이프라인 상태(940)에서 시작하는 매체 파이프라인(924)에 대해 맞춤화된다.
3D 파이프라인 상태(930)에 대한 커맨드는, 정점 버퍼 상태, 정점 엘리먼트 상태, 일정 컬러 상태, 깊이 버퍼 상태, 및 3D 프리미티브 커맨드들이 프로세싱되기 전에 구성될 다른 상태 변수를 위한 3D 상태 설정 커맨드들을 포함한다. 이러한 커맨드들의 값들은 적어도 부분적으로는 사용중인 특정의 3D API에 기반하여 결정된다. 3D 파이프라인 상태(930)는 또한, 소정의 파이프라인 엘리먼트들이 사용되지 않는다면, 이들 파이프라인 엘리먼트들을 선택적으로 디스에이블하거나 바이패싱할 수 있다.
3D 프리미티브 커맨드(932)는 3D 파이프라인에 의해 프로세싱될 3D 프리미티브를 제공하는 데 사용된다. 3D 프리미티브 커맨드(932)를 통해 그래픽 프로세서에 전달되는 커맨드 및 관련 파라미터들은 그래픽 파이프라인 내의 정점 페칭 기능부로 포워딩된다. 정점 페칭 기능부는 정점 데이터 구조를 생성하기 위해 3D 프리미티브 커맨드(932) 데이터를 사용한다. 정점 데이터 구조는 하나 이상의 리턴 버퍼에 저장된다. 3D 프리미티브 커맨드(932)는 정점 쉐이더를 통해 3D 프리미티브에 대한 정점 동작을 수행하는 데 사용된다. 정점 쉐이더를 프로세싱하기 위해, 3D 파이프라인(922)은 쉐이더 실행 스레드들을 그래픽 프로세서 실행 유닛들에게로 디스패칭한다.
3D 파이프라인(922)은 실행 커맨드(934) 또는 이벤트를 통해 트리거링된다. 일 실시예에서, 레지스터 기입은 커맨드 실행을 트리거링한다. 일 실시예에서, 실행은 커맨드 시퀀스에서 "go" 또는 "kick" 커맨드를 통해 트리거링된다. 일 실시예에서, 커맨드 실행은 파이프라인 동기화 커맨드를 사용하여 트리거링되어 그래픽 파이프라인을 통해 커맨드 시퀀스를 플러싱한다. 3D 파이프라인은 3D 프리미티브에 대한 지오메트리 프로세싱을 수행할 것이다. 일단 동작들이 완료되면, 최종적인 지오메트릭 객체들이 래스터화되고 픽셀 엔진은 최종 픽셀들을 컬러링한다. 픽셀 쉐이딩 동작 및 픽셀 백엔드 동작을 제어하는 추가적인 커맨드들은 이러한 동작을 위해 포함될 수도 있다.
샘플 커맨드 시퀀스(910)는 매체 동작을 수행할 때 매체 파이프라인(924) 경로를 추종한다. 일반적으로, 매체 파이프라인(924)에 대한 프로그래밍의 특정 사용 및 방식은 수행될 매체 동작 및 계산 동작에 의존한다. 특정의 매체 디코드 동작은 매체 디코드 동안 매체 파이프라인에게로 오프로딩될 수 있다. 매체 파이프라인은 또한 바이패싱될 수 있고 매체 디코드는 전체적으로 또는 부분적으로 하나 이상의 범용 프로세싱 코어들에 의해 제공되는 리소스들을 사용하여 수행될 수 있다. 일 실시예에서, 매체 파이프라인은 또한 범용 그래픽 프로세서 유닛 동작들을 위한 엘리먼트들을 포함하며, 여기서, 그래픽 프로세서는 그래픽 프리미티브의 렌더링과는 명시적으로 관련되지 않는 계산적인 쉐이더 프로그램을 사용하여 SIMD 벡터 동작들을 수행하는 데 사용된다.
매체 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 매체 파이프라인 상태 커맨드들(940)의 세트는 매체 객체 커맨드(942) 이전에 디스패칭되거나 커맨드 큐 내로 배치된다. 매체 파이프라인 상태 커맨드(940)는 매체 캑체를 프로세싱하는 데 사용될 매체 파이프라인 엘리먼트들을 구성하는 데이터를 포함한다. 이는 인코드 또는 디코드 포맷과 같이, 매체 파이프라인 내에 비디오 디코드 및 비디오 인코드 로직을 구성하는 데이터를 포함한다. 매체 파이프라인 상태 커맨드(940)는 또한 상태 설정들의 뱃치를 포함하는 상태 엘리먼트들을 "인다이렉팅"하는 하나 이상의 포인터들을 사용하는 것을 지원한다.
매체 객체 커맨드(942)는 매체 파이프라인에 의한 프로세싱을 위한 포인터들을 매체 객체들에 제공한다. 매체 객체들은 프로세싱될 비디오 데이터를 포함하는 메모리 버퍼들을 포함한다. 일 실시예에서, 모든 매체 파이프라인 상태는 매체 객체 커맨드(942)를 발행하기 전에 유효해야 한다. 일단 파이프라인 상태가 구성되고 매체 객체 커맨드(942)가 큐잉된다면, 매체 파이프라인(924)은 실행 커맨드(934) 또는 동등한 실행 이벤트(가령, 레지스터 기입)를 통해 트리거링된다. 매체 파이프라인(924)으로부터의 출력은 다음에 3D 파이프라인(922) 또는 매체 파이프라인(924)에 의해 제공되는 동작들에 의해 사후 프로세싱될 수 있다. 일 실시예에서, GPGPU 동작들은 매체 동작들과 유사한 방식으로 구성 및 실행된다.
도 12는 일 실시예에 따른 데이터 프로세싱 시스템에 대한 예시적인 그래픽 소프트웨어 아키텍처를 도시하고 있다. 이 소프트웨어 아키텍처는, 3D 그래픽 애플리케이션(1010), 운영 체제(1020), 및 적어도 하나의 프로세서(1030)를 포함한다. 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(1034)를 포함한다. 3D 그래픽 애플리케이션(1010) 및 운영 체제(1020)는 각각 데이터 프로세싱 시스템의 시스템 메모리(1050)에서 실행된다.
일 실시예에서, 3D 그래픽 애플리케이션(1010)은 쉐이더 인스트럭션(1012)을 구비한 하나 이상의 쉐이더 프로그램을 포함한다. 쉐이더 랭귀지 인스트럭션은, 하이 레벨 쉐이더 랭귀지(HLSL) 또는 OpenGL 쉐이더 랭귀지(GLSL)와 같은 하이 레벨 쉐이더 랭귀지일 수 있다. 3D 그래픽 애플리케이션은 또한 범용 프로세서 코어(1034)에 의한 실행에 적당한 머신 랭귀지의 실행가능 인스트럭션(1014)을 포함한다. 3D 그래픽 애플리케이션은 또한 정점 데이터에 의해 정의되는 그래픽 객체(1016)를 포함한다.
운영 체제(1020)는 마이크로소프트상의 Microsoft®Windows® 운영 체제, 특허된 UNIX 형 운영 체제, 또는 리눅스 커널의 변형을 사용하는 오픈 리소스 UNIX 형 운영 체제일 수 있다. Direct3D API가 사용중일 때, 상기 운영 체제(1020)는 HLSL의 임의의 쉐이더 인스트럭션(1012)을 로우 레벨 쉐이더 랭귀지로 컴파일링하기 위해 프런트 엔드 쉐이더 컴파일러(1024)를 사용한다. 이러한 컴파일링은 저스트 인 타임 컴파일링(just-in-time compilation)일 수 있거나, 상기 3D 그래픽 애플리케이션은 공유 사전 컴파일링(share pre-compilation)을 수행할 수 있다. 일 실시예에서, 하이 레벨 쉐이더는 3D 그래픽 애플리케이션(1010)의 컴파일링 동안 로우 레벨 쉐이더로 컴파일링된다.
사용자 모드 그래픽 드라이버(1026)는 쉐이더 인스트럭션(1012)을 하드웨어 특정 표현으로 변환하기 위해 백엔드 쉐이더 컴파일러(1027)를 포함할 수 있다. OpenGL API가 사용중일 경우, GLSL 하이 레벨 랭귀지 내의 쉐이더 인스트럭션(1012)은 컴파일링을 위해 사용자 모드 그래픽 드라이버(1026)로 전달된다. 사용자 모드 그래픽 드라이버는 커널 모드 그래픽 드라이버(1029)와 통신하기 위해 운영 체제 커널 모드 기능부(1028)를 사용한다. 커널 모드 그래픽 드라이버(1029)는 그래픽 프로세서(1032)와 통신하여 커맨드 및 인스트럭션을 디스패칭한다.
다양한 동작들 또는 기능들이 본 명세서에 기술될 경우, 그 동작들 또는 기능들은 하드웨어 회로, 소프트웨어 코드, 인스트럭션, 구성, 및/또는 데이터로서 기술되거나 정의될 수 있다. 컨텐츠는 하드웨어 로직으로 구현될 수 있거나, 직접 실행가능한 소프트웨어("객체" 또는 "실행가능" 형태), 소스 코드, 그래픽 엔진 상에서의 실행을 위해 디자인된 하이 레벨 쉐이더 코드, 특정 프로세서 또는 그래픽 코어용 인스트럭션 세트 내의 로우 레벨 어셈블리 랭귀지 코드로서 구현될 수 있다. 본 명세서에 기술되는 실시예들의 소프트웨어 컨텐츠는 컨텐츠를 저장한 제조물품을 통해 제공될 수 있거나 또는 통신 인터페이스를 통해 데이터를 전송하는 통신 인터페이스 동작 방법을 통해 제공될 수 있다.
비일시적인 머신 판독가능 저장 매체는 머신으로 하여금 기술된 기능들 또는 동작들을 수행하게 할 수 있으며, 기록가능/기록불가능 매체(가령, ROM, RAM, 자기 디스크 저장 매체, 광 저장 매체, 플래시 메모리 디바이스 등)과 같이 머신(가령, 컴퓨팅 디바이스, 전자 시스템 등)에 의해 액세스가능한 형태로 정보를 저장하는 임의의 메커니즘을 포함한다. 통신 인터페이스는, 가령 메모리 버스 인터페이스, 프로세서 버스 인터페이스, 인터넷 커넥션, 디스크 제어기 등과 같은 디바이스에 통신하도록 하드와이어드, 무선, 광 등의 임의의 매체에 인터페이스하는 임의의 메커니즘을 포함한다. 통신 인터페이스는 구성 파라미터를 제공하거나 소프트웨어 컨텐츠를 기술하는 데이터 신호를 제공하도록 통신 인터페이스를 준비하는 신호를 전송함으로써 구성된다. 통신 인터페이스는 통신 인터페이스로 전송된 하나 이상의 컨맨드 또는 신호를 통해 액세스될 수 있다.
기술된 다양한 컴포넌트들은 기술된 동작들이나 기능들을 수행하기 위한 수단일 수 있다. 본 명세서에 기술된 각각의 컴포먼트는 소프트웨어, 하드웨어 또는 이들의 조합을 포함한다. 컴포넌트들은 소프트웨어 모듈, 하드웨어 모듈, 특수 목적 하드웨어(가령, 애플리케이션 특정 하드웨어, 애플리케이션 특정 집적 회로(ASIC), 디지털 신호 프로세서(DSP) 등), 임베디드 제어기, 하드와이어드 회로 등으로서 구현될 수 있다. 본 명세서에 기술된 것 이외에도, 본 발명의 범주 내에서 본 발명의 개시된 실시예 및 구현예에 대해 다양한 변형이 가해질 수 있다. 따라서, 본 명세서 내의 도시된 것 및 예시된 것은 제한적인 의미가 아닌 예시적인 것으로 해석되어야 한다. 본 발명의 범주는 오직 아래에서 기술될 청구범위를 참조하여 평가되어야 한다.
아래의 문구 및/또는 예는 추가의 실시예를 포함한다. 일 실시예는 포지션 온리 쉐이딩을 수행하는 것과, 쉐이딩된 프리미티브들을 대표적인 좌표들에 기반하여 빈들 내로 소팅하는 것과, 프리미티브들을 그 깊이에 기반한 빈 내에 소팅하는 것을 포함한 방법일 수 있다. 이 방법은 또한 쉐이딩된 프리미티브들의 그룹을 소팅하는 것을 포함하여 쉐이딩된 프리미티브들을 소팅하는 것을 포함할 수 있다. 이 방법은 또한 타일 내의 모든 삼각형들로 구성되는 그룹을 형성하는 것을 포함할 수 있다. 이 방법은 또한 프리미티브들을 빈들 내로 비닝(binning)하는 것을 포함하여 쉐이딩된 프리미티브들을 소팅하는 것을 포함할 수 있다. 이 방법은 또한 소팅된 프리미티브들을 한 번에 하나의 빈으로 래스터화하는 것을 포함할 수 있다. 이 방법은 또한 깊이 순서로 소팅된 프리미티브들을 래스터화하는 것을 포함할 수 있다. 이 방법은 또한 좌표, 깊이 프리미티브 사이즈 및 상태에 기반하여 소팅하는 것을 포함하여 좌표들에 기반하여 소팅하는 것을 포함할 수 있다. 이 방법은 또한 상기 좌표들이 한 그룹 내의 한 삼각형의 평균 정점 포지션으로서 계산되는 것을 포함할 수 있다. 이 방법은 또한 삼각형 정점들 위에 경계 박스를 구축하고 경계 박스의 중심의 좌표를 사용하는 것을 포함하여 상기 좌표를 계산하는 것을 포함할 수 있다. 이 방법은 또한 좌표들을 양자화하고 그것을 공간 충전 곡선을 따른 정수 위치로 변환함으로써 좌표들을 빈에 매핑하는 것을 포함할 수 있다.
다른 실시예는, 실행시 시퀀스를 수행하는 인스트럭션을 저장한 적어도 하나 이상의 비일시적인 컴퓨터 판독가능 매체일 수 있으며, 상기 시퀀스는 포지션 온리 쉐이딩을 수행하는 것과, 쉐이딩된 프리미티브들을 대표적인 좌표들에 기반하여 빈들 내로 소팅하는 것과, 프리미티브들을 그 깊이에 기반한 빈 내에 소팅하는 것을 포함한다. 이 매체는 쉐이딩된 프리미티브들의 그룹을 소팅하는 것을 포함하여 쉐이딩된 프리미티브들을 소팅하는 것을 포함할 수 있다. 이 매체는 타일 내의 모든 삼각형들로 구성된 그룹을 형성하는 것을 포함한 시퀀스를 포함할 수 있다. 이 매체는 또한 프리미티브들을 빈들 내로 비닝(binning)하는 것을 포함하여 쉐이딩된 프리미티브들을 소팅하는 것을 포함할 수 있다. 이 매체는 또한 소팅된 프리미티브들을 한 번에 하나의 빈으로 래스터화하는 것을 포함한 상기 시퀀스를 포함할 수 있다. 이 매체는 또한 깊이 순서로 소팅된 프리미티브들을 래스터화하는 것을 포함한 상기 시퀀스를 포함할 수 있다. 이 매체는 또한 좌표, 깊이 프리미티브 사이즈 및 상태에 기반하여 소팅하는 것을 포함하여 좌표들에 기반하여 소팅하는 것을 포함할 수 있다. 이 매체는 또한 상기 좌표들이 한 그룹 내의 한 삼각형의 평균 정점 포지션으로서 계산되는 것을 포함할 수 있다. 이 매체는 또한 삼각형 정점들 위에 경계 박스를 구축하고 경계 박스의 중심의 좌표를 사용하는 것을 포함하여 상기 좌표를 계산하는 것을 포함할 수 있다. 이 매체는 또한 좌표들을 양자화하고 그것을 공간 충전 곡선을 따른 정수 위치로 변환함으로써 좌표들을 빈에 매핑하는 것을 포함한 상기 시퀀스를 포함할 수 있다.
또다른 실시예는 포지션 온리 쉐이딩을 수행하는 것과, 쉐이딩된 프리미티브들을 대표적인 좌표들에 기반하여 빈들 내로 소팅하는 것과, 프리미티브들을 그 깊이에 기반한 빈 내에 소팅하는 것을 수행하는 프로세서와, 상기 프로세서에 연결된 스토리지를 포함한 장치일 수 있다. 이 장치는 쉐이딩된 프리미티브들의 그룹을 소팅하는 상기 프로세서를 포함할 수 있다. 이 장치는 타일 내의 모든 삼각형들로 구성된 그룹을 형성하는 상기 프로세서를 포함할 수 있다. 이 장치는 프리미티브들을 빈들 내로 비닝(binning)하는 상기 프로세서를 포함할 수 있다. 이 장치는 소팅된 프리미티브들을 한 번에 하나의 빈으로 래스터화하는 상기 프로세서를 포함할 수 있다. 이 장치는 깊이 순서로 소팅된 프리미티브들을 래스터화하는 상기 프로세서를 포함할 수 있다. 이 장치는 좌표, 깊이 프리미티브 사이즈 및 상태에 기반하여 소팅하는 상기 프로세서를 포함할 수 있다. 이 장치는 상기 좌표들을 한 그룹 내의 한 삼각형의 평균 정점 포지션으로서 계산하는 상기 프로세서를 포함할 수 있다. 이 장치는 삼각형 정점들 위에 경계 박스를 구축하고 경계 박스의 중심의 좌표를 사용하는 상기 프로세서를 포함할 수 있다. 이 장치는 좌표들을 양자화하고 그것을 공간 충전 곡선을 따른 정수 위치로 변환함으로써 좌표들을 빈에 매핑하는 상기 프로세서를 포함할 수 있다.
본 명세서에 기술된 그래픽 프로세싱 기법은 다양한 하드웨어 아키텍처로 구현될 수 있다. 가령, 그래픽 기능부는 칩셋 내에 집적될 수 있다. 대안으로, 이산 그래픽 프로세서가 사용될 수 있다. 또다른 실시예로서, 그래픽 기능부는 멀티코어 프로세서를 포함한 범용 프로세서에 의해 구현될 수 있다.
본 명세서에서 일 실시예에 대한 기준은 그 실시예와 관련하여 기술되는 특정의 특징, 구조 또는 특성이 본 개시물 내에 포함되는 적어도 하나의 구현예에 포함된다는 것을 의미한다. 따라서, 일 실시예의 문구의 존재는 전적으로 동일한 실시예를 지칭하는 것은 아니다. 또한, 특정의 특징, 구조 또는 특성은 예시된 특정의 실시예 이외의 다른 적당한 형태로 대체될 수 있으며, 그러한 모든 형태는 본 출원의 청구범위 내에 포함될 수 있다.
제한된 개수의 실시예들이 기술되지만, 당업자는 그 실시예들로부터의 다양한 변형예 및 수정예를 이해할 것이다. 첨부된 청구범위는 본 개시물의 진정한 사상 및 범주 내에 속하는 모든 변형예 및 수정예를 포함하는 것으로 의도된다.

Claims (25)

  1. 방법으로서,
    포지션 온리 쉐이딩(position-only shading)을 수행하는 단계와,
    쉐이딩된 프리미티브들(shaded primitives)을 대표적인 좌표들에 기반하여 빈들(bins) 내로 소팅하는 단계와,
    프리미티브들을 빈(bin) 내에서 소팅하는 단계를 포함하는
    방법.
  2. 제1항에 있어서,
    상기 쉐이딩된 프리미티브들을 소팅하는 것은 쉐이딩된 프리미티브들의 그룹을 소팅하는 것을 포함하는
    방법.
  3. 제2항에 있어서,
    상기 방법은 타일 내의 모든 삼각형들로 구성된 그룹을 형성하는 단계를 포함하는
    방법.
  4. 제1항에 있어서,
    상기 쉐이딩된 프리미티브들을 소팅하는 것은 상기 프리미티브들을 빈들 내로 비닝(binning)하는 것을 포함하는
    방법.
  5. 제4항에 있어서,
    상기 방법은 상기 소팅된 프리미티브들을 한 번에 하나의 빈으로 래스터화하는 단계를 포함하는
    방법.
  6. 제5항에 있어서,
    상기 방법은 깊이 순서로 소팅된 프리미티브들을 래스터화하는 단계를 포함하는
    방법.
  7. 제1항에 있어서,
    상기 좌표들에 기반하여 소팅하는 것은 좌표, 깊이, 프리미티브 사이즈 및 상태에 기반하여 소팅하는 것을 포함하는
    방법.
  8. 제1항에 있어서,
    상기 좌표들은 한 그룹 내의 한 삼각형의 평균 정점 포지션들로서 계산되는
    방법.
  9. 제1항에 있어서,
    상기 좌표들을 계산하는 것은 삼각형 정점들 위에 경계 박스를 구축하고 그 경계 박스의 중심의 좌표를 사용하는 것을 포함하는
    방법.
  10. 제4항에 있어서,
    상기 방법은 상기 좌표들을 양자화하고 이들을 공간 충전 곡선을 따르는 정수 위치로 변환함으로써 상기 좌표들을 빈에 매핑하는 단계를 포함하는
    방법.
  11. 실행시에 시퀀스를 수행하는 인스트럭션을 저장한 하나 이상의 비일시적인 컴퓨터 판독가능 저장 매체로서,
    상기 시퀀스는,
    포지션 온리 쉐이딩을 수행하는 것과,
    쉐이딩된 프리미티브들을 대표적인 좌표들에 기반하여 빈들 내로 소팅하는 것과,
    프리미티브들을 그 깊이에 기반하여 빈 내에서 소팅하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  12. 제11항에 있어서,
    상기 쉐이딩된 프리미티브들을 소팅하는 것은 쉐이딩된 프리미티브들의 그룹을 소팅하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  13. 제12항에 있어서,
    상기 시퀀스는 타일 내의 모든 삼각형들로 구성된 그룹을 형성하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  14. 제11항에 있어서,
    상기 쉐이딩된 프리미티브들을 소팅하는 것은 상기 프리미티브들을 빈들 내로 비닝(binning)하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  15. 제14항에 있어서,
    상기 시퀀스는 상기 소팅된 프리미티브들을 한 번에 하나의 빈으로 래스터화하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  16. 제15항에 있어서,
    상기 시퀀스는 깊이 순서로 소팅된 프리미티브들을 래스터화하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  17. 제11항에 있어서,
    상기 좌표들에 기반하여 소팅하는 것은 좌표, 깊이, 프리미티브 사이즈 및 상태에 기반하여 소팅하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  18. 제11항에 있어서,
    상기 좌표들은 한 그룹 내의 한 삼각형의 평균 정점 포지션들로서 계산되는
    컴퓨터 판독가능 저장 매체.
  19. 제11항에 있어서,
    상기 좌표들을 계산하는 것은 삼각형 정점들 위에 경계 박스를 구축하고 그 경계 박스의 중심의 좌표를 사용하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  20. 제14항에 있어서,
    상기 시퀀스는 상기 좌표들을 양자화하고 이들을 공간 충전 곡선을 따르는 정수 위치로 변환함으로써 상기 좌표들을 빈에 매핑하는 것을 포함하는
    컴퓨터 판독가능 저장 매체.
  21. 장치로서,
    포지션 온리 쉐이딩을 수행하는 것과, 쉐이딩된 프리미티브들을 대표적인 좌표들에 기반하여 빈들 내로 소팅하는 것과, 프리미티브들을 그 깊이에 기반한 빈 내에 소팅하는 것을 수행하는 프로세서와,
    상기 프로세서에 연결된 스토리지를 포함하는
    장치.
  22. 제21항에 있어서,
    상기 프로세서는 쉐이딩된 프리미티브들의 그룹을 소팅하는
    장치.
  23. 제22항에 있어서,
    상기 프로세서는 타일 내의 모든 삼각형들로 구성된 그룹을 형성하는
    장치.
  24. 제21항에 있어서,
    상기 프로세서는 상기 프리미티브들을 빈들 내로 비닝하는
    장치.
  25. 제24항에 있어서,
    상기 프로세서는 소팅된 프리미티브들을 한 번에 하나의 빈으로 래스터화하는
    장치.
KR1020177012685A 2014-12-11 2015-11-09 포지션 온리 파이프라인에서의 완화된 소팅 KR102569331B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/566,852 2014-12-11
US14/566,852 US10249079B2 (en) 2014-12-11 2014-12-11 Relaxed sorting in a position-only pipeline
PCT/US2015/059653 WO2016093998A1 (en) 2014-12-11 2015-11-09 Relaxed sorting in a position-only pipeline

Publications (2)

Publication Number Publication Date
KR20170095815A true KR20170095815A (ko) 2017-08-23
KR102569331B1 KR102569331B1 (ko) 2023-08-21

Family

ID=56107909

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012685A KR102569331B1 (ko) 2014-12-11 2015-11-09 포지션 온리 파이프라인에서의 완화된 소팅

Country Status (6)

Country Link
US (1) US10249079B2 (ko)
EP (1) EP3238180A4 (ko)
JP (1) JP2018502381A (ko)
KR (1) KR102569331B1 (ko)
CN (1) CN107004293B (ko)
WO (1) WO2016093998A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US20180082465A1 (en) 2016-09-16 2018-03-22 Prasoonkumar Surti Apparatus and method for optimized tile-based rendering
US20180082464A1 (en) * 2016-09-16 2018-03-22 Tomas G. Akenine-Moller Apparatus and method for an efficient 3d graphics pipeline
US10706612B2 (en) * 2017-04-01 2020-07-07 Intel Corporation Tile-based immediate mode rendering with early hierarchical-z
GB2565301A (en) * 2017-08-08 2019-02-13 Nokia Technologies Oy Three-dimensional video processing
US10672185B2 (en) * 2018-07-13 2020-06-02 Nvidia Corporation Multi-rate shading using replayed screen space tiles
US11195326B2 (en) * 2018-09-21 2021-12-07 Advanced Micro Devices, Inc. Method and system for depth pre-processing and geometry sorting using binning hardware

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010085424A (ko) * 1998-08-20 2001-09-07 알버트 피. 세팔로 지연 쉐이딩을 갖는 그래픽 프로세서
US7505036B1 (en) * 2004-07-30 2009-03-17 3Dlabs Inc. Ltd. Order-independent 3D graphics binning architecture

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU1776001A (en) 1999-11-18 2001-05-30 Info Assets, Inc. Rendering image data
US6747653B2 (en) 2001-12-31 2004-06-08 Intel Corporation Efficient object storage for zone rendering
US20080273031A1 (en) 2005-12-08 2008-11-06 Xgi Technology Inc. (Cayman) Page based rendering in 3D graphics system
US20090046098A1 (en) 2007-08-14 2009-02-19 Stmicroelectronics S.R.L. Primitive binning method for tile-based rendering
GB0900700D0 (en) 2009-01-15 2009-03-04 Advanced Risc Mach Ltd Methods of and apparatus for processing graphics
US9183608B2 (en) 2009-12-23 2015-11-10 Intel Corporation Image processing techniques for tile-based rasterization
CN103999443B (zh) * 2011-12-07 2017-08-15 英特尔公司 基于线性化5d边缘方程的样本剔除
WO2013101150A1 (en) 2011-12-30 2013-07-04 Intel Corporation A sort-based tiled deferred shading architecture for decoupled sampling
WO2013130030A1 (en) 2012-02-27 2013-09-06 Intel Corporation Using cost estimation to improve performance of tile rendering for image processing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010085424A (ko) * 1998-08-20 2001-09-07 알버트 피. 세팔로 지연 쉐이딩을 갖는 그래픽 프로세서
US7505036B1 (en) * 2004-07-30 2009-03-17 3Dlabs Inc. Ltd. Order-independent 3D graphics binning architecture

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Anonymous, "What are the basics of 3D triangle/quad sorting", Game Development(2012.02.29.) *

Also Published As

Publication number Publication date
JP2018502381A (ja) 2018-01-25
EP3238180A4 (en) 2018-07-04
KR102569331B1 (ko) 2023-08-21
CN107004293B (zh) 2021-02-26
US10249079B2 (en) 2019-04-02
WO2016093998A1 (en) 2016-06-16
US20160171756A1 (en) 2016-06-16
CN107004293A (zh) 2017-08-01
EP3238180A1 (en) 2017-11-01

Similar Documents

Publication Publication Date Title
US9990758B2 (en) Bounding volume hierarchy generation using a heterogeneous architecture
KR102569331B1 (ko) 포지션 온리 파이프라인에서의 완화된 소팅
KR102241398B1 (ko) 지연형 코어스 픽셀 셰이딩
US10776994B2 (en) Zero-coverage rasterization culling
US9799091B2 (en) Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures
US20160284120A1 (en) Edge-Based Coverage Mask Compression
US20160188491A1 (en) Apparatus and method for asynchronous tile-based rendering control
US10909753B2 (en) Method and apparatus for sampling pattern generation for a ray tracing architecture
US9576384B2 (en) Hierarchical index bits for multi-sampling anti-aliasing
US10089779B2 (en) Apparatus and method for conservative rasterization of polygons
US20170178278A1 (en) Method and apparatus for updating a shader program based on current state
US9600926B2 (en) Apparatus and method decoupling visibility bins and render tile dimensions for tiled rendering
US9633452B2 (en) Resolving multi-sampled anti-aliasing buffers into single sampled buffers
US20170345206A1 (en) Occlusion query apparatus and method for accelerated rendering
US20160093102A1 (en) Efficient tessellation cache

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