KR20170033868A - 지연형 코어스 픽셀 셰이딩 - Google Patents
지연형 코어스 픽셀 셰이딩 Download PDFInfo
- Publication number
- KR20170033868A KR20170033868A KR1020177003923A KR20177003923A KR20170033868A KR 20170033868 A KR20170033868 A KR 20170033868A KR 1020177003923 A KR1020177003923 A KR 1020177003923A KR 20177003923 A KR20177003923 A KR 20177003923A KR 20170033868 A KR20170033868 A KR 20170033868A
- Authority
- KR
- South Korea
- Prior art keywords
- pixel
- shading
- sample
- processor
- command
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G06K9/46—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/40—Extraction of image or video features
- G06V10/46—Descriptors for shape, contour or point-related descriptors, e.g. scale invariant feature transform [SIFT] or bags of words [BoW]; Salient regional features
- G06V10/467—Encoded features or binary features, e.g. local binary patterns [LBP]
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/18—Timing circuits for raster scan displays
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
-
- G06K2009/4666—
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2350/00—Solving problems of bandwidth in display systems
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/08—Power processing, i.e. workload management for processors involved in display operations, such as CPUs or GPUs
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2360/00—Aspects of the architecture of display systems
- G09G2360/12—Frame memory handling
- G09G2360/121—Frame memory handling using a cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- Multimedia (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
셰이딩 레이트는 픽셀 내의 샘플을 분석함으로써 설정될 수 있다. 다음에 그 분석에 기초하여, 시스템은 픽셀 영역에 대해 코어스 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지를 결정한다. 결정된 셰이딩 유형에 기초하여, 셰이딩 레이트가 설정될 수 있다.
Description
본 발명은 그래픽 처리에 관한 것이다.
셰이딩(shading)은 묘사될 객체에 조명 효과를 적용하는 프로세스이다. 지연형 셰이딩(deferred shading)은, 가시성(커버리지)이 해결된 후에 렌더링이 수행되는, 장면을 렌더링하는 보편적인 방식이다. 구체적으로, 셰이딩은 모든 폐색(occlusions)이 해결된 이후까지 지연된다. 보통, 이것은 두 개의 단계로 행해진다. 제 1 단계는 셰이딩에 필요한 입력(표면 법선, 깊이, 뷰 벡터, 등등)을 지오메트리(geometry) 또는 G 버퍼로 불리는 버퍼에 기록하는 것이다. 제 2 단계는 셰이딩 계산이 행해지는 풀 스크린 단계(또는 계산 셰이더 단계)이다.
각각의 G 버퍼 샘플에 대해, 셰이딩은 현재 샘플에 대해 G 버퍼를 판독하고, 모든 광의 기여분을 누적하고, 최종 표면 컬러를 출력함으로써 수행된다.
지연형 셰이딩의 한 가지 장점은 가시적 표면 조각들 만이 셰이딩되는 것이다. 셰이딩은 모든 지오메트리 처리가 완료될 때까지 지연된다.
(예컨대, MSAA(multi-sampled anti-aliasing) 또는 CPS(Coarse Pixel Shading)에서 처럼) 가시성 레이트가 셰이딩 레이트와 상이할 경우, G 버퍼는 완전 가시성 레이트(full visibility rate)에서 이용가능하므로, 셰이딩이 어떤 레이트에서(픽셀 단위 또는 샘플 단위) 수행되어야 하는지 결정하기가 어렵다. 완전 가시성 레이트에서 G 버퍼를 셰이딩하는 것은 안전하지만 상당히 비효율적이다(그리고 종종 필요없는 경우도 있다).
몇몇 실시형태는 다음 도면을 참조하여 설명된다.
도 1은 가능할 때마다 스크린 영역을 분석하고 스크린 영역을 샘플, 픽셀 또는 코어스(coarse) 픽셀로 분류하여 셰이딩 레이트를 감소시키는 흐름도이다.
도 2는 일 실시형태에 따른 데이터 처리 시스템의 블럭도이다.
도 3은 일 실시형태에 따른 도 2에 도시된 프로세서의 블럭도이다.
도 4는 일 실시형태에 따른 도 2에 도시된 그래픽 프로세서의 블럭도이다.
도 5는 일 실시형태에 따른 그래픽 처리 엔진의 블럭도이다.
도 6은 다른 실시형태에 따른 그래픽 프로세서의 블럭도이다.
도 7은 일 실시형태에 대한 스레드 실행 로직(thread execution logic)을 도시한다.
도 8은 일 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷의 블럭도이다.
도 9는 그래픽 프로세서의 또 다른 실시형태의 블럭도이다.
도 10a는 일 실시형태에 따른 그래픽 프로세서 커맨드 포맷의 블럭도이다.
도 10b는 일 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스의 블럭도이다.
도 11은 일 실시형태에 대한 그래픽 소프트웨어 아키텍처이다.
도 1은 가능할 때마다 스크린 영역을 분석하고 스크린 영역을 샘플, 픽셀 또는 코어스(coarse) 픽셀로 분류하여 셰이딩 레이트를 감소시키는 흐름도이다.
도 2는 일 실시형태에 따른 데이터 처리 시스템의 블럭도이다.
도 3은 일 실시형태에 따른 도 2에 도시된 프로세서의 블럭도이다.
도 4는 일 실시형태에 따른 도 2에 도시된 그래픽 프로세서의 블럭도이다.
도 5는 일 실시형태에 따른 그래픽 처리 엔진의 블럭도이다.
도 6은 다른 실시형태에 따른 그래픽 프로세서의 블럭도이다.
도 7은 일 실시형태에 대한 스레드 실행 로직(thread execution logic)을 도시한다.
도 8은 일 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷의 블럭도이다.
도 9는 그래픽 프로세서의 또 다른 실시형태의 블럭도이다.
도 10a는 일 실시형태에 따른 그래픽 프로세서 커맨드 포맷의 블럭도이다.
도 10b는 일 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스의 블럭도이다.
도 11은 일 실시형태에 대한 그래픽 소프트웨어 아키텍처이다.
스크린의 영역 내의 샘플들을 분석함으로써 셰이딩 레이트는 스크린의 영역에 걸쳐 픽셀당 한번 또는 픽셀당 한번 미만(예컨대, 2x2 픽셀당 한번)으로 감소될 수 있다. 렌더링 방정식의 특정 구성요소를 다른 구성요소보다 더 낮은 레이트에서 셰이딩하는 것을 선택할 수 있다. 본원에 설명된 개념은 그런 멀티 레이트 지연형 셰이딩에 동등하게 적용될 수 있다.
MSAA가 생성하는 셰이딩 결과를 복제하기 위해, 픽셀이 단일 프리미티브(primitive)에 의해 완전히 커버될 경우 픽셀당 한번 셰이딩하고 복수의 프리미티브가 픽셀을 커버할 경우 프리미티브의 수만큼 여러 번 셰이딩하기를 원할 수 있다. 그러나, 얼마나 많은 프리미티브가 주어진 픽셀을 커버하는지 및 그들의 커버리지에 대한 정보는 보통 G 버퍼에서 이용가능하지 않다.
한가지 기술은, 픽셀 내에서 뷰 스페이스 깊이가 얼마나 변하는지, 뷰 스페이스 깊이 도함수가 얼마나 변하는지, 법선이 얼마나 변하는지를 분석함으로써, 픽셀 내의 샘플들이 단일 프리미티브에 의해 커버되는지 여부를 발견한다. 2010년 7월 29일자 Lauritzen 등에 의한 “Deferred Rendering for Current and Future Rendering Pipelines” SIGGRAPH 2010, Course: “Beyond Programmable Shading”를 참조하라. 표면이 국소적으로 평탄한(smooth) 것으로 판정될 경우, 셰이딩 레이트를 픽셀당 한번으로 감소시키고 그 셰이딩 결과를 그 픽셀 내의 모든 샘플에 대해 재사용할 수 있다.
1 픽셀보다 큰 영역(예컨대, 2x2)은 마찬가지 방식으로 분석될 수 있다. G 버퍼 표면이 2x2 영역 또는 타일에 걸쳐 국소적으로 평탄한 것으로 판정될 경우, 셰이딩 레이트를 2x2 영역당 한번(또는 코어스(coarse) 픽셀당 한번)으로 감소시킬 수 있다. 셰이딩 방정식이 낮은 빈도의 구성요소를 갖는다면, 그런 구성요소의 셰이딩 레이트를 2x2 영역당 한번으로 감소시키고 관여하는 픽셀들에 걸쳐 그 셰이딩을 재사용할 수 있다.
코어스 픽셀을 식별하는 이런 개념은 다수의 코어스 레벨(multiple levels of coarseness)로 확장되어 계층형 셰이딩 구조가 형성될 수 있다. 여기서, 특정 레벨의 자식 픽셀은 그 부모의 셰이딩 결과를 재사용할 수 있다. 도 1은 하나의 알고리즘에 따른 흐름도를 도시한다.
도 1에 도시된 시퀀스는 소프트웨어, 펌웨어 및/또는 하드웨어로 구현될 수 있다. 소프트웨어 및 펌웨어 실시형태에서, 도 1의 시퀀스는 자기, 광학 또는 반도체 스토리지(storage)와 같은 하나 이상의 비일시적 컴퓨터 판독가능 매체에 저장된 컴퓨터 판독가능 명령어에 의해 실행될 수 있다.
도 1의 시퀀스는, 최악의 경우에 기준 샘플의 값으로부터 얼마나 많이 벗어나는지를 알기 위해, 1 픽셀 위치, 즉 스크린 위치 u, v 내의 샘플들을 분석하는 것으로 시작된다. 즉, 그 영역이 국소적으로 얼마나 평탄한지에 대한 판정이 이루어진다. 일 실시형태에서, 기준 픽셀에 대해 픽셀당 뷰 스페이스 깊이, 뷰 스페이스 깊이 도함수 및 법선 중 하나 이상이 얼마나 변하는지에 대한 판정이 이루어질 수 있다. 기준 픽셀은 영역 내의 임의의 픽셀, 예컨대, 상부, 좌측 픽셀이 기준 픽셀이 될 수 있다. 여기서, 중요한 것은 어떠한 픽셀도 기준 픽셀과 크게 다르지 않을 것이라는 점이다. 모든 픽셀이 검사되기 때문에, 어떤 픽셀이 기준 픽셀로 선택되는지는 중요하지 않을 것이다. 이 정보는 G 버퍼로부터, 예컨대 깊이 버퍼로부터 획득함으로써, 이용가능하게 된다.
다이아몬드(12)에서의 점검은, 평탄도 판정에 기초하여 (MSAA와 같은) 샘플 단위 셰이딩(per-sample shading)이 사용되어야 하는지 여부를 판정한다. 샘플 단위 셰이딩이 사용되지 않는다면, 블럭(14)에서 표시된 것처럼, 2x2 픽셀 블럭 내의 각 픽셀로부터의 대표 샘플이 분석된다. 다른 블럭 크기가 또한 사용될 수 있다.
다이아몬드(16)에서의 점검은, 평탄도 판정에 기초하여 픽셀 단위 셰이딩이 사용되어야 하는지 여부를 판정한다. 픽셀 단위 셰이딩이 사용되지 않는다면, 블럭(20)에서, 블럭은 코어스 픽셀 셰이딩 구성요소에 대해 분석된다. 기능적으로, 이 블럭은 2x2 블럭 내의 픽셀의 각각으로부터 대표 샘플(예컨대, 샘플0)을 판독할 수 있다. 다음에, 픽셀 단위 셰이딩이 요구되는지 여부를 결정하기 위해 (블럭(12)에서 샘플들이 동일 픽셀 내에서 기준 샘플과 비교되었던 것과 마찬가지로) 블럭은 픽셀 1, 2 및 3으로부터의 샘플을 픽셀 0으로부터의 샘플과 비교한다. 코어스 픽셀 셰이딩은 프레임 또는 픽처에 걸친 상이한 레이트에서의 셰이딩이다. 픽셀 단위 셰이딩이 사용되어야 한다면, 블럭(18)에 표시된 것처럼, 블럭은 픽셀 단위 셰이딩 구성요소에 대해 평가된다. 다음에, 블럭(22)에서 최종 셰이딩 컬러가 구현된다.
샘플 단위 셰이딩이 사용되어야 한다고 샘플 단위 셰이딩에 대한 제 1 점검이 판정하면, 블럭(24)에서 샘플 단위 구성요소가 평가되고 다음에 블럭(22)에서 최종 셰이딩 컬러가 구현된다. 이와 같이, 블럭은 샘플 셰이딩, 픽셀 셰이딩 또는 코어스 픽셀 셰이딩 중 하나로서 식별된다. 다음에, 이 구별은 셰이딩 레이트를 획득하기 위해 사용될 수 있다. 유리하게는, 셰이딩 레이트는 가능할 때마다 감소된다.
하드웨어 가속을 사용하여 스크린 스페이스 내의 영역에 걸친 값의 분포(the spread of vlaues)를 계산하는 알고리즘의 부분을 구현하기 위해 몇몇 구현이 선택될 수 있다. 그런 하나의 구현은 MCS(Machine Creation Services) 압축 비트 및 새로운 샘플러 커맨드 sample_ LoadDelta를 사용한다. 이와 함께, 다음과 같은 확장이 사용될 수 있다.
<T> LoadDelta(uint2 uv, uint refSample)
사용자는, 스크린 스페이스 위치(uv)에서 픽셀 위치 내의 표면 값들을 분석하고 (최악의 경우에) 이들이 기준 샘플(refSample)에서의 값으로부터 얼마나 많이 벗어나는지를 알기 위해 상기 커맨드를 호출한다. 시스템은 MCS 비트를 레버리지하고, 모든 값이 동일하여 모든 비트가 동일 샘플을 가리킨다면 0을 반환한다.
그런 경우가 아니라면, 실행 유닛은 커맨드 sample_ LoadDelta를 샘플러에 발행한다. 다음에 샘플러는 모든 샘플을 로딩하고, refSample에 의해 특정되는 기준 샘플값으로부터 채널 방향 차이(channel-wise difference)를 계산한다.
계산을 샘플러에 떠넘기고 MCS를 사용함으로써, 알고리즘은 소프트웨어로 작동시키키는 것보다 더 전력 효율적이 될 수 있다. 따라서, MCS == 0일 때 대역폭이 절약되지만 텍스처 판독을 생략한다. MCS !=0일 때, 샘플러-투-EU 대역폭이 절약된다.
마찬가지로, (MCS와 유사한) 하나 이상의 컬러 압축 스킴을 사용하여 특정된 위치에서 특정된 NxN 영역에 걸쳐 (또는 코어스 픽셀에 걸쳐) 작용하는 셰이더 명령어의 변동을 상상할 수 있다. 그런 명령어는 픽셀 레이트보다 더 낮은 레이트로 셰이딩 레이트를 감소시키기 위해 사용될 수 있다.
이런 기술들은 지연형 셰이딩에 적용가능할 뿐만 아니라, 예컨대, 색조 회전(hue rotation), 포화도, 대비 조절, 등등의 컬러 수정과 같은 사후 처리 알고리즘에도 적용될 수 있다. 보통, 사후 처리 알고리즘은 리졸브 동작(resolve operation)이 아티팩트를 나타낸 후에 적용된다. 이 기술을 사용하면, 가능한 한 픽셀 레이트로만 사후 처리 단계를 실행하고, 다음에 리졸브를 행할 수 있다. 깊이 또는 법선이 사용자 정의된 임계보다 더 크게 변할 때마다, MSAA 레이트에서의 사후 처리으로 복귀할 수 있다.
Lauritzen은 픽셀 단위와 샘플 단위 사이에서 셰이딩 레이트를 제어하는 것을 제안했다. G 버퍼는 뷰 스페이스 위치, 뷰 스페이스 Z의 도함수 및 표면 법선을 포함하도록 생성된다. 어떤 것이 셰이딩될 필요가 있으면, IsPersample(..) 함수가 리턴된다.
이 분석의 결과는 perSample[] 어레이 내에 수집될 수 있다. 픽셀의 각각이 픽셀 레이트에서 셰이딩되어야 한다고 판정될 경우에만 스크린 스페이스의 2x2 영역에 걸쳐 유사한 분석이 행해질 수 있다. 일 실시형태에서 분석은, 기여하는 픽셀들을 분석하는 동안 허용되는 것의 두 배인 최대 허용가능 뷰 스페이스 깊이 델타를 갖는 대표 샘플(예컨대, 샘플 0)을 사용하여, 2x2 영역에 걸쳐 행해질 수 있다.
영역의 셰이딩 레이트가 일단 식별되면, 유사한 셰이딩 레이트를 사용하여 모든 영역을 동시에 셰이딩하고 중간 결과를 메모리(SLM(shared local memory) 또는 글로벌 메모리)에 저장함으로써 SIMD(single instruction multiple date) 효율은 증가되거나 최대화될 수 있다. 다음 상위 레이트의 영역이 셰이딩될 때, 부모의 출력 데이터를 판독함으로써, 부모로부터의 기여분이 추가된다.
텍스처링(texturing)은 코어스 레이트에서의 셰이딩 동안 신중하게 행해질 필요가 있다. 보통 지연형 셰이딩에 있어서, 텍스처링은 G 버퍼 생성 단계에서 행해진다. (2x2 크기의 픽셀 또는 1 픽셀이 될 수 있는) 셰이딩 빈도가 샘플링 빈도와 일치되도록 하기 위해, (바이어싱된 샘플러를 사용함으로써) 밉 레벨(mip-level)이 조절될 필요가 있거나, 상위 밉 레벨로부터의 샘플들이 필터링될 수 있다. 텍스처링이 신중하게 처리되지 않으면, 낮은 빈도의 셰이딩 구성요소에 대해 에일리어싱(aliasing)이 나타날 수 있다.
도 2는 실시형태에 따른 데이터 처리 시스템(100)의 블록도이다. 데이터 처리 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)를 포함하고, 다수의 프로세서(102) 또는 프로세서 코어(107)를 갖는, 단일 프로세서 데스크탑 시스템, 멀티 프로세서 워크스테이션 시스템, 또는 서버 시스템이 될 수도 있다. 실시형태에서, 데이터 처리 시스템(100)은, 모바일, 핸드헬드, 또는 내장형 디바이스에 사용되는 시스템 온 칩 집적 회로(SOC)이다.
데이터 처리 시스템(100)의 실시형태는, 게임 및 미디어 콘솔, 모바일 게이밍 콘솔, 핸드헬드 게임 콘솔 또는 온라인 게임 콘솔을 포함하는 게임 콘솔을 포함하거나, 서버 기반 게이밍 플랫폼 내에 통합될 수 있다. 일 실시형태에서, 데이터 처리 시스템(100)은 모바일폰, 스마트폰, 태블릿 컴퓨팅 디바이스 또는 모바일 인터넷 디바이스이다. 데이터 처리 시스템(100)은 또한, 스마트 워치 웨어러블 디바이스, 스마트 아이웨어 디바이스, 증강 현실 디바이스, 또는 가상 현실 디바이스와 같은 웨어러블 디바이스를 포함하거나, 웨어러블 디바이스와 결합되거나 그 내부에 통합될 수 있다. 일 실시형태에서, 데이터 처리 시스템(100)은, 하나 이상의 그래픽 프로세서(108)에 의해 생성된 그래픽 인터페이스 및 하나 이상의 프로세서(102)를 갖는 텔레비전 또는 셋탑 박스 디바이스이다.
하나 이상의 프로세서(102)는 각각, 실행될 때 시스템 및 사용자 소프트웨어를 위한 동작을 수행하는 명령어를 처리하기 위해 하나 이상의 프로세서 코어(107)를 포함한다. 일 실시형태에서, 하나 이상의 프로세서 코어(107)의 각각은 특정 명령어 세트(109)를 처리하도록 구성된다. 명령어 세트(109)는 CISC(complex instruction set computing), RISC(reduced instruction set computing), 또는 VLIW(a very long instruction word)를 통한 컴퓨팅을 가능하게 할 수 있다. 다중 프로세서 코어(107)는 다른 명령어 세트의 에뮬레이션을 가능하게 하는 명령어를 포함할 수 있는 상이한 명령어 세트(109)를 각각 처리할 수 있다. 프로세서 코어(107)는 또한 디지털 신호 프로세서(DSP)와 같은 다른 처리 디바이스를 포함할 수 있다.
일 실시형태에서, 프로세서(102)는 캐시 메모리(104)를 포함한다. 아키텍처에 의존하여, 프로세서(102)는 단일 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. 일 실시형태에서, 캐시 메모리는 프로세서(102)의 다양한 구성요소들 사이에서 공유된다. 일 실시형태에서, 프로세서(102)는 또한, 공지된 캐시 코히어런스 기술을 사용하여 프로세서 코어(107) 사이에서 공유될 수 있는 외부 캐시(예컨대, L3(Level 3) 캐시 또는 LLC(last level cache))(도시 안됨)를 사용한다. 상이한 유형의 데이터를 저장하는 상이한 유형의 레지스터(예컨대, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터)를 포함할 수 있는 프로세서(102)에는 레지스터 파일(106)이 추가적으로 포함된다. 몇몇 레지스터는 범용 레지스터일 수 있는 반면, 다른 레지스터는 프로세서(102)의 설계에 특정될 수 있다.
프로세서(102)는, 프로세서(102)와 시스템(100)의 다른 구성요소들 사이에서 데이터 신호를 전송하는 프로세서 버스(110)에 결합된다. 시스템(100)은, 메모리 허브(116) 및 입출력(I/O) 제어기 허브(130)를 포함하는 전형적 '허브' 시스템 아키텍처를 사용한다. 메모리 제어기 허브(116)는 메모리 디바이스와 시스템(100)의 다른 구성요소들 사이의 통신을 가능하게 하고, I/O 제어기 허브(ICH)(130)는 국소 I/O 버스를 통해 I/O 디바이스로의 접속을 제공한다.
메모리 디바이스(120)는, DRAM(dynamic random access memory) 디바이스, SRAM(static random access memory) 디바이스, 플래시 메모리 디바이스, 또는 프로세스 메모리로 기능하기에 적합한 성능을 갖는 몇몇 다른 메모리 디바이스가 될 수 있다. 메모리(120)는, 프로세서(102)가 프로세스를 실행할 때 사용하기 위한 데이터(122) 및 명령어(121)를 저장할 수 있다. 메모리 제어기 허브(116)는 또한 선택적 외부 그래픽 프로세서(112)와 결합될 수 있는데, 외부 그래픽 프로세서(112)는 그래픽 및 미디어 동작을 수행하기 위해 프로세서(102) 내의 하나 이상의 그래픽 프로세서(108)와 통신할 수 있다.
ICH(130)는, 주변장치가 고속 I/O 버스를 통해 메모리(120) 및 프로세서(102)에 접속될 수 있게 한다. I/O 주변장치는, 오디오 제어기(146), 펌웨어 인터페이스(128), 무선 송수신기(126)(예컨대, 와이파이, 블루투스), 데이터 저장 디바이스(124)(예컨대, 하드 디스크 드라이브, 플래시 메모리, 등등), 및 레거시(예컨대, PS/2(Personal System 2)) 디바이스를 시스템에 결합시키는 레거시 I/O 제어기를 포함한다. 하나 이상의 USB(Universal Serial Bus) 제어기(142)는, 키보드 및 마우스(144) 조합체와 같은 입력 디바이스들을 결합시킨다. 네트워크 제어기(134)는 또한 ICH(130)에 결합될 수 있다. 일 실시형태에서는, 고성능 네트워크 제어기(도시 안됨)가 프로세서 버스(110)에 결합된다.
도 3은, 하나 이상의 프로세서 코어(202A-N), 통합형 메모리 제어기(214), 통합형 그래픽 프로세서(208)를 갖는 프로세서(200)의 실시형태의 블럭도이다. 프로세서(200)는, 점선으로 표시된 박스에 의해 표현된 추가 코어(202N)까지 그리고 추가 코어(202N)를 포함하는 추가 코어들을 포함할 수 있다. 코어(202A-N)의 각각은 하나 이상의 내부 캐시 유닛(204A-N)을 포함한다. 일 실시형태에서, 각각의 코어는 또한 하나 이상의 공유형 캐시 유닛(206)에 대한 액세스를 갖는다.
내부 캐시 유닛(204A-N) 및 공유형 캐시 유닛(206)은 프로세서(200) 내의 캐시 메모리 계층을 나타낸다. 캐시 메모리 계층은, 각 코어 내의 명령어 및 데이터 캐시의 적어도 하나의 레벨, 및 L2(level 2), L3(level 3), L4(level 4)와 같은 공유형 중간 레벨 캐시의 하나 이상의 레벨, 또는 캐시의 다른 레벨을 포함할 수 있는데, 여기서 외부 메모리 이전의 가장 높은 캐시 레벨은 LLC(last level cache)로 분류된다. 일 실시형태에서, 캐시 코히어런시 로직은 다양한 캐시 유닛들(206 및 204A-N) 사이의 코히어런시를 유지한다.
프로세서(200)는 또한 하나 이상의 버스 제어기 유닛(216)과 시스템 에이전트(210)의 세트를 포함할 수 있다. 하나 이상의 버스 제어기 유닛은, 하나 이상의 주변 구성요소 상호접속 버스(예컨대, PCI, PCI 익스프레스)와 같은 주변 버스들의 세트를 관리한다. 시스템 에이전트(210)는 다양한 프로세서 구성요소에 대한 관리 기능을 제공한다. 일 실시형태에서, 시스템 에이전트(210)는 다양한 외부 메모리 디바이스(도시 안됨)에 대한 액세스를 관리하는 하나 이상의 통합형 메모리 제어기(214)를 포함한다.
일 실시형태에서, 코어들(202A-N) 중 하나 이상은 동시 다중 스레딩에 대한 지원을 포함한다. 그런 실시형태에서, 시스템 에이전트(210)는 다중 스레딩 처리 동안 코어들(202A-N)을 코디네이팅하고 동작시키기 위한 구성요소들을 포함한다. 시스템 에이전트(210)는 전력 제어 유닛(PCU)을 추가로 포함할 수 있는데, 이것은 코어(202A-N) 및 그래픽 프로세서(208)의 전력 상태를 조절하는 로직 및 구성요소를 포함한다.
프로세서(200)는 그래픽 처리 동작을 실행하는 그래픽 프로세서(208)를 추가로 포함한다. 일 실시형태에서, 그래픽 프로세서(208)는, 하나 이상의 통합형 메모리 제어기(214)를 포함하는 시스템 에이전트 유닛(210) 및 공유형 캐시 유닛(206)의 세트와 결합된다. 일 실시형태에서, 디스플레이 제어기(211)는 그래픽 프로세서(208)와 결합되어 그래픽 프로세서 출력을 하나 이상의 결합된 디스플레이에 공급한다. 디스플레이 제어기(211)는 하나 이상의 상호접속을 통해 그래픽 프로세서와 결합된 분리된 모듈일 수도 있고, 또는 그래픽 프로세서(208) 또는 시스템 에이전트(210) 내에 통합될 수도 있다.
일 실시형태에서, 프로세서(200)이 내부 구성요소들을 결합하기 위해 링 바이어스형 상호접속 유닛(212)이 사용되지만, 점 대 점 상호접속, 스위치형 상호접속, 또는 이 분야에서 공지된 기술을 포함하는 다른 기술과 같은, 대안적인 상호접속 유닛이 사용될 수도 있다. 일 실시형태에서, 그래픽 프로세서(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(Complementary metal-oxide-semiconductor), BiCMOS(Bipolar Junction/Complementary metal-oxide-semiconductor) 또는 NMOS(N-type metal-oxide-semiconductor logic)와 같은 다수의 프로세스 기술 중 임의의 것을 사용하여 하나 이상의 기판의 일부가 되거나 하나 이상의 기판 상에서 구현될 수 있다. 또한, 프로세서(200)는 하나 이상의 칩 상에서 구현되거나, 도시된 구성요소 및 다른 구성요소들을 갖는 SOC(system on a chip) 집적 회로로서 구현될 수 있다.
도 4는, 개별 그래픽 처리 유닛이거나 복수의 처리 코어가 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(300)의 일 실시형태의 블록도이다. 일 실시형태에서, 그래픽 프로세서는, 그래픽 프로세서 상의 레지스터에 대한 메모리 매핑형 I/O 인터페이스를 통해 그리고 프로세서 메모리에 위치된 커맨드를 통해 통신한다. 그래픽 프로세서(300)는 메모리에 액세스하는 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 국소 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유형 외부 캐시, 및/또는 시스템 메모리에 대한 인터페이스일 수 있다.
그래픽 프로세서(300)는 또한 디스플레이 출력 데이터를 디스플레이 디바이스(320)에 제공하는 디스플레이 제어기(302)를 포함한다. 디스플레이 제어기(302)는 비디오 또는 사용자 인터페이스 요소의 다중 계층의 구성 및 디스플레이에 대한 하나 이상의 오버레이 평면용 하드웨어를 포함한다. 일 실시형태에서, 그래픽 프로세서(300)는, MPEG(Moving Picture Experts Group)-2와 같은 MPEG 포맷, H.264/MPEG-4 AVC, SMPTE(Society of Motion Picture & Television Engineers) 421M/VC-1과 같은 AVC(Advanced Video Coding) 포맷, JPEG(Joint Photographic Experts Group)와 같은 JPEG 포맷, 및 MJPEG(Motion JPEG) 포맷을 포함하지만 이에 제한되지 않는 하나 이상의 미디어 인코딩 포맷으로, 그로부터, 그들 사이에서, 미디어를 인코딩, 디코딩, 또는 트랜스코딩하는 비디오 코덱 엔진(306)을 포함한다.
일 실시형태에서, 그래픽 프로세서(300)는, 예컨대, 비트 경계 블럭 이전(bit-boundary block transfers)을 포함하는 2D(two-dimensional) 래스터라이저 동작을 수행하는 BLIT(block image transfer) 엔진(304)을 포함한다. 그러나, 일 실시형태에서, 2D 그래픽 동작은 그래픽 처리 엔진(GPE)(310)의 하나 이상의 구성요소를 사용하여 수행된다. 그래픽 처리 엔진(310)은 3D(three-dimensional) 그래픽 동작 및 미디어 동작을 포함하는 그래픽 동작을 수행하기 위한 계산 엔진이다.
GPE(310)는, 3D 프리미티브 형태(예컨대, 직사각형, 삼각형, 등등)에 작용하는 처리 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하는 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은, 요소 내의 다양한 작업을 수행하고/하거나 3D/미디어 서브시스템(315)으로의 실행 스레드를 생성하는 프로그램가능한 일정 기능 요소들을 포함한다. 3D 파이프라인(312)은 미디어 동작을 수행하기 위해 사용될 수 있지만, GPE(310)의 실시형태 또한, 비디오 사후 처리 및 이미지 강화와 같은 미디어 동작을 수행하기 위해 특별하게 사용되는 미디어 파이프라인(316)을 포함한다.
일 실시형태에서, 미디어 파이프라인(316)은, 비디오 코덱 엔진(306)에 대신하여, 비디오 디코드 가속, 비디오 디인터레이싱(de-interlacing), 및 비디오 인코드 가속과 같은 하나 이상의 특수 미디어 동작을 수행하는, 일정 기능 또는 프로그램가능 로직 유닛들을 포함한다. 일 실시형태에서, 미디어 파이프라인(316)은 3D/미디어 서브시스템(315) 상에서의 실행을 위한 스레드를 생성하는 스레드 생성 유닛을 추가로 포함한다. 생성된 스레드는 3D/미디어 서브시스템 내에 포함된 하나 이상의 그래픽 실행 유닛 상에서의 미디어 동작을 위한 계산을 수행한다.
3D/미디어 서브시스템(315)은 3D 파이프라인(312) 및 미디어 파이프라인(316)에 의해 생성된 스레드를 실행하기 위한 로직을 포함한다. 일 실시형태에서, 파이프라인은 3D/미디어 서브시스템(315)에 스레드 실행 요청을 송신하는데, 3D/미디어 서브시스템(315)은 이용가능한 스레드 실행 자원으로 다양한 요청을 중재하고 배정하는 스레드 디스패치 로직을 포함한다. 실행 자원은 3D 및 미디어 스레드를 처리하는 그래픽 실행 유닛의 어레이를 포함한다. 일 실시형태에서, 3D/미디어 서브시스템(315)은 스레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 일 실시형태에서, 서브시스템은 또한, 스레드들 사이에서 데이터를 공유하고 출력 데이터를 저장하기 위해, 레지스터 및 어드레스가능 메모리를 포함하는 공유형 메모리를 포함한다.
도 5는 그래픽 프로세서에 대한 그래픽 처리 엔진(410)의 실시형태의 블록도이다. 일 실시형태에서, 그래픽 처리 엔진(GPE)(410)은 도 4에 도시된 GPE(310)의 한 형태이다. GPE(410)는 3D 파이프라인(412) 및 미디어 파이프라인(416)을 포함하는데, 이들 각각은 도 4의 3D 파이프라인(312) 및 미디어 파이프라인(316)의 구현과 상이하거나 유사할 수 있다.
일 실시형태에서, GPE(410)는 커맨드 스트리머(403)에 결합되는데, 커맨드 스트리머(403)는 GPE 3D 및 미디어 파이프라인(412, 416)에 커맨드 스트림을 제공한다. 커맨드 스트리머(403)는 시스템 메모리가 될 수 있는 메모리, 또는 내부 캐시 메모리와 공유형 캐시 메모리 중 하나 이상에 결합된다. 커맨드 스트리머(403)는 메모리로부터 커맨드를 수신하고 그 커맨드를 3D 파이프라인(412) 및/또는 미디어 파이프라인(416)으로 송신한다. 3D 및 미디어 파이프라인은 각각의 파이프라인 내의 로직을 통해 동작을 수행하거나 실행 유닛 어레이(414)로 하나 이상의 실행 스레드를 배정함으로써 커맨드를 처리한다. 일 실시형태에서, 실행 유닛 어레이(414)는 확장가능하므로, 어레이는 GPE(410)의 목표 전력 및 성능 레벨에 기초한 가변 개수의 실행 유닛을 포함한다.
샘플링 엔진(430)은 메모리(예컨대, 캐시 메모리 또는 시스템 메모리) 및 실행 유닛 어레이(414)와 결합된다. 일 실시형태에서, 샘플링 엔진(430)은 실행 어레이(414)로 하여금 메모리로부터 그래픽 및 미디어 데이터를 판독할 수 있게 하는 확장가능 실행 유닛 어레이(414)를 위한 메모리 액세스 메커니즘을 제공한다. 일 실시형태에서, 샘플링 엔진(430)은 미디어에 대한 특수 이미지 샘플링 동작을 수행하는 로직을 포함한다.
샘플링 엔진(430) 내의 특수 미디어 샘플링 로직은 잡음제거/디인터레이스 모듈(432), 움직임 추정 모듈(434), 및 이미지 스케일링 및 필터링 모듈(436)을 포함한다. 잡음제거/디인터레이스 모듈(432)은 디코딩된 비디오 데이터에 대한 잡음제거 또는 디인터레이스 알고리즘 중 하나 이상을 수행하는 로직을 포함한다. 디인터레이스 로직은 인터레이싱된 비디오 컨텐츠의 교호 필드들(alternating fields)을 단일 비디오 프레임으로 결합시킨다. 잡음제거 로직은 비디오 및 이미지 데이터로부터 데이터 잡음을 감소시키거나 제거한다. 일 실시형태에서, 잡음제거 및 디인터레이스 로직은 움직임 적응성이며, 비디오 데이터에서 검출된 움직임량에 기초한 공간적 또는 시간적 필터링을 사용한다. 일 실시형태에서, 잡음제거/디인터레이스 모듈(432)은 (예컨대, 움직임 추정 엔진(434) 내의) 전용 움직임 검출 로직을 포함한다.
움직임 추정 엔진(434)은 비디오 데이터에 대한 움직임 벡터 추정 및 예측과 같은 비디오 가속 기능을 수행함으로써 비디오 동작에 대한 하드웨어 가속을 제공한다. 움직임 추정 엔진은 연속 비디오 프레임들 사이의 이미지 데이터의 변환을 설명하는 움직임 벡터를 결정한다. 일 실시형태에서, 그래픽 프로세서 미디어 코덱은, 그렇지 않으면 범용 프로세서를 사용하여 수행하기 위해 다량의 계산이 필요할 수 있는 비디오에 관한 동작들을 비디오 움직임 추정 엔진(434)을 사용하여 매크로 레벨에서 수행한다. 일 실시형태에서, 움직임 추정 엔진(434)은 일반적으로, 방향 또는 크기에 대해 민감성이거나 적응성인 비디오 디코드 및 처리 기능을 보조하기 위해 그래픽 프로세서 구성요소에 이용될 수 있다.
이미지 스케일링 및 필터링 모듈(436)은 생성된 이미지 및 비디오의 시각적 품질을 강화하기 위해 이미지 처리 동작을 수행한다. 일 실시형태에서, 스케일링 및 필터링 모듈(436)은 실행 유닛 어레이(414)에 데이터를 제공하기 전에 샘플링 동작 동안 이미지 및 비디오 데이터를 처리한다.
일 실시형태에서, 그래픽 처리 엔진(410)은, 메모리에 액세스하기 위해 그래픽 서브시스템을 위한 추가 메커니즘을 제공하는 데이터 포트(444)를 포함한다. 데이터 포트(444)는, 렌더 타겟 기록(render target writes), 상수 버퍼 판독, 스크래치 메모리 공간 판독/기록, 및 비디오 표면 액세스를 포함하는 동작을 위한 메모리 액세스를 가능하게 한다. 일 실시형태에서, 데이터 포트(444)는 메모리에 대한 액세스를 캐싱하기 위한 캐시 메모리 공간을 포함한다. 캐시 메모리는 단일 데이터 캐시가 될 수도 있고, 데이터 포트를 통해 메모리에 액세스하는 다중 서브시스템을 위한 다중 캐시(예컨대, 렌더 버퍼 캐시, 상수 버퍼 캐시, 등등)로 분리될 수도 있다. 일 실시형태에서, 실행 유닛 어레이(414) 내의 실행 유닛 상에서 실행되는 스레드는, 그래픽 처리 엔진(410)의 서브시스템들의 각각과 결합되는 데이터 분배 상호접속을 통해 메시지를 교환함으로써 데이터 포트와 통신한다.
도 6은 그래픽 프로세서의 다른 실시형태의 블록도이다. 일 실시형태에서, 그래픽 프로세서는 링 상호접속(502), 파이프라인 프론트엔드(504), 미디어 엔진(537), 및 그래픽 코어(580A-N)를 포함한다. 링 상호접속(502)은 그래픽 프로세서를, 다른 그래픽 프로세서 또는 하나 이상의 범용 프로세서 코어를 포함하는 다른 처리 유닛에 결합시킨다. 일 실시형태에서, 그래픽 프로세서는 멀티코어 처리 시스템 내에 통합된 다수의 프로세서 중 하나이다.
그래픽 프로세서는 링 상호접속(502)을 통해 커맨드의 배치(batches)를 수신한다. 입력 커맨드는 파이프라인 프론트엔드(504) 내의 커맨드 스트리머(503)에 의해 해석된다. 그래픽 프로세서는 그래픽 코어(들)(580A-N)를 통해 3D 지오메트리 처리 및 미디어 처리를 수행하는 확장가능 실행 로직을 포함한다. 3D 지오메트리 처리 커맨드에 대해, 커맨드 스트리머(503)는 지오메트리 파이프라인(536)에 커맨드를 공급한다. 적어도 몇몇 미디어 처리 커맨드에 대해, 커맨드 스트리머(503)는 비디오 프론트엔드(534)에 커맨드를 공급하는데, 비디오 프론트엔드(534)는 미디어 엔진(537)과 결합된다. 미디어 엔진(537)은, 비디오 및 이미지 사후 처리를 위한 비디오 품질 엔진(VQE)(530) 및 하드웨어 가속형 미디어 데이터 인코드 및 디코드를 제공하는 다중 포맷 인코드/디코드(MFX)(533) 엔진을 포함한다. 지오메트리 파이프라인(536) 및 미디어 엔진(537)은, 적어도 하나의 그래픽 코어(580A)에 의해 제공된 스레드 실행 자원을 위한 실행 스레드를 각각 생성한다.
그래픽 프로세서는, 복수의 서브코어(550A-N, 560A-N)(때로는 코어 서브슬라이스로 언급됨)를 각각 갖는 확장가능 스레드 실행 자원 피처링 모듈 코어(580A-N)(때로는 코어 슬라이스로 언급됨)를 포함한다. 그래픽 프로세서는 그래픽 코어들(580A 내지 580N) 중 임의 수의 그래픽 코어를 가질 수 있다. 일 실시형태에서, 그래픽 프로세서는, 적어도 제 1 서브코어(550A) 및 제 2 서브코어(560A)를 갖는 그래픽 코어(580A)를 포함한다. 다른 실시형태에서, 그래픽 프로세서는 단일 서브코어(예컨대, 550A)를 갖는 저전력 프로세서이다. 일 실시형태에서, 그래픽 프로세서는, 제 1 서브코어(550A-N)의 세트 및 제 2 서브코어(560A-N)의 세트를 각각 포함하는 복수의 그래픽 코어(580A-N)를 포함한다. 제 1 서브코어(550A-N)의 세트 내의 각 서브코어는 적어도 실행 유닛(552A-N) 및 미디어/텍스처 샘플러(554A-N)의 제 1 세트를 포함한다. 제 2 서브코어(560A-N)의 세트 내의 각 서브코어는 적어도 실행 유닛(562A-N) 및 미디어/텍스처 샘플러(564A-N)의 제 2 세트를 포함한다. 일 실시형태에서, 각 서브코어(550A-N, 560A-N)는 공유형 자원(570A-N)의 세트를 공유한다. 일 실시형태에서, 공유형 자원은 공유형 캐시 메모리 및 픽셀 동작 로직을 포함한다. 그래픽 프로세서의 다양한 실시형태에는 다른 공유형 자원이 또한 포함될 수 있다.
도 7은 그래픽 처리 엔진의 일 실시형태에 사용된 처리 요소의 어레이를 포함하는 스레드 실행 로직(600)을 도시한다. 일 실시형태에서, 스레드 실행 로직(600)은, 픽셀 셰이더(602), 스레드 디스패처(604), 명령어 캐시(606), 복수의 실행 유닛(608A-N)을 포함하는 확장가능 실행 유닛 어레이, 샘플러(610), 데이터 캐시(612) 및 데이터 포트(614)를 포함한다. 일 실시형태에서, 포함된 구성요소들은, 구성요소들의 각각에 링크되는 상호접속 패브릭을 통해 상호접속된다. 스레드 실행 로직(600)은, 명령어 캐시(606), 데이터 포트(614), 샘플러(610), 및 실행 유닛 어레이(608A-N) 중 하나 이상을 통한, 시스템 메모리 또는 캐시 메모리와 같은 메모리에 대한 하나 이상의 접속을 포함한다. 일 실시형태에서, 각 실행 유닛(예컨대, 608A)은 다수의 동시적인 스레드를 실행하고 각 스레드에 대해 다수의 데이터 요소를 병렬로 처리할 수 있는 개별 벡터 프로세서이다. 실행 유닛 어레이(608A-N)는 임의 개수의 개별 실행 유닛을 포함한다.
일 실시형태에서, 실행 유닛 어레이(608A-N)는 주로 "셰이더" 프로그램을 실행하기 위해 사용된다. 일 실시형태에서, 어레이(608A-N) 내의 실행 유닛은 다수의 표준 3D 그래픽 셰이더 명령어에 대한 네이티브 지원(native support)을 포함하므로, 그래픽 라이브러리(예컨대, Direct 3D 및 OpenGL)로부터의 셰이더 프로그램은 최소 번역을 사용하여 실행된다. 실행 유닛은 정점(vertex) 및 지오메트리 처리(예컨대, 정점 프로그램, 지오메트리 프로그램, 정점 셰이더), 픽셀 처리(예컨대, 픽셀 셰이더, 프레그먼트 셰이더) 및 범용 처리(예컨대, 계산 및 미디어 셰이더)를 지원한다.
실행 유닛 어레이(608A-N) 내의 각 실행 유닛은 데이터 요소들의 어레이에 대해 동작한다. 데이터 요소의 수는 "실행 크기"또는 명령어에 대한 채널 수이다. 실행 채널은 데이터 요소 액세스, 마스킹 및 명령어 내의 흐름 제어를 실행하는 로직 단위이다. 채널 수는 특정 그래픽 프로세서의 물리적 ALU 또는 FPU 수와는 독립적 일 수 있다. 실행 유닛(608A-N)은 정수 및 부동 소수점 데이터 타입을 지원한다.
실행 유닛 명령어 세트는 단일 명령어 다중 데이터(single instruction multiple data: SIMD) 명령어를 포함한다. 다양한 데이터 요소는 팩형(packed) 데이터 유형으로서 레지스터에 저장될 수 있고, 실행 유닛은 요소의 데이터 크기에 기초하여 다양한 요소를 처리할 것이다. 예를 들어, 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)를 포함한다. 예컨대, 지오메트리 파이프라인(예컨대,도 6의 536)은 정점 처리, 테셀레이션(tessellation) 또는 지오메트리 처리 스레드를 스레드 실행 로직(600)에 디스패치한다. 스레드 디스패처(604)는 또한 실행 셰이더 프로그램으로부터의 런타임 스레드 생성 요청을 처리할 수 있다.
일단 기하학적 객체 그룹이 처리되어 픽셀 데이터로 래스터화되면, 픽셀 셰이더(602)가 호출되어 출력 정보를 추가로 계산하고 출력 표면(예컨대, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼, 등등)에 결과를 기록하게 한다. 일 실시형태에서, 픽셀 셰이더(602)는 래스터화된 객체에 걸쳐 보간되어야 할 다양한 정점 속성의 값을 계산한다. 다음에 픽셀 셰이더(602)는 API 제공 픽셀 셰이더 프로그램을 실행한다. 픽셀 셰이더 프로그램을 실행하기 위해, 픽셀 셰이더(602)는 스레드 디스패처 (604)를 통해 실행 유닛(예컨대, 608A)에 스레드를 디스패치한다. 픽셀 셰이더 (602)는 샘플러(610)의 텍스처 샘플링 로직을 사용하여 메모리에 저장된 텍스처 맵의 텍스처 데이터에 액세스한다. 텍스처 데이터 및 입력 지오메트리 데이터에 대한 산술 연산은 각각의 기하학적 조각에 대한 픽셀 컬러 데이터를 계산하거나 추가 처리에서 하나 이상의 픽셀을 폐기한다.
일 실시형태에서, 데이터 포트(614)는, 스레드 실행 로직(600)이 처리된 데이터를 그래픽 프로세서 출력 파이프라인 상에서의 처리를 위해 메모리에 출력하는 메모리 액세스 메커니즘을 제공한다. 일 실시형태에서, 데이터 포트(614)는 데이터 포트를 통한 메모리 액세스를 위해 데이터를 캐싱하기 위해 하나 이상의 캐시 메모리(예컨대, 데이터 캐시(612))를 포함하거나 그에 결합된다.
도 8은 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷을 나타내는 블록도이다. 일 실시형태에서, 그래픽 프로세서 실행 유닛은 다수의 포맷으로 명령어들을 갖는 명령어 세트를 지원한다. 실선으로 표시된 박스는 일반적으로 실행 단위 명령어에 포함되는 구성요소를 도시하지만, 점선은 선택 사항이거나 명령어의 서브 세트에만 포함되는 구성요소를 포함한다. 설명되고 도시된 명령어 포맷은, 명령어가 처리될 때 명령어 디코드로부터 초래되는 마이크로 연산이 아니라, 실행 유닛에 공급되는 명령인 매크로 명령어이다.
일 실시형태에서, 그래픽 프로세서 실행 유닛은 기본적으로 128 비트 포맷(710)의 명령어를 지원한다. 64 비트 압축 명령어 포맷(730)은 선택된 명령어, 명령어 옵션 및 피연산자의 수에 기초하여 일부 명령어에 대해 이용 가능하다. 네이티브 128 비트 포맷(710)은 모든 명령어 옵션에 대한 액세스를 제공하는 반면, 일부 옵션 및 동작은 64 비트 포맷(730)으로 제한된다. 64 비트 포맷(730)에서 이용 가능한 네이티브 명령어는 실시형태에 따라 변한다. 일 실시형태에서, 명령어는 인덱스 필드(713)의 인덱스 값 세트를 사용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 기초하여 압축 테이블 세트를 참조하고, 압축 테이블 출력을 사용하여 128 비트 포맷(710)의 네이티브 명령어를 재구성한다.
각각의 포맷에 대해, 명령어 연산 코드(712)는 실행 유닛이 수행할 연산을 정의한다. 실행 유닛은 각 피연산자의 여러 데이터 요소에 걸쳐 각 명령어를 병렬로 실행한다. 예컨대, 가산 명령어에 응답하여, 실행 유닛은 텍스처 요소 또는 화상 요소를 나타내는 각각의 컬러 채널에 걸쳐 동시적인 가산 연산을 수행한다. 기본적으로 실행 유닛은 피연산자의 모든 데이터 채널에 걸쳐 각각의 명령어를 수행한다. 명령어 제어 필드(712)는 채널 선택(예컨대, 예측) 및 데이터 채널 순서 (예컨대, 스위즐)와 같은 특정 실행 옵션에 대한 제어를 가능하게 한다. 128 비트 명령어들(710)에 대해, 실행 크기 필드(716)는 병렬로 실행될 데이터 채널들의 수를 제한한다. 실행 크기 필드(716)는 64 비트 압축 명령어 포맷(730)용으로는 이용 가능하지 않다.
일부 실행 유닛 명령어는 2 개의 소스 피연산자(src0(720), src1(722)) 및 하나의 목적지(718)를 포함하는 3 개까지의 피연산자를 갖는다. 일 실시형태에서, 실행 유닛은 목적지 중 하나가 암시되는 이중 목적지 명령어를 지원한다. 데이터 조작 명령어는 제 3 소스 피연산자(예컨대, SRC2(724))를 가질 수 있으며, 여기서 명령어 연산 코드(JJ12)는 소스 피연산자들의 수를 결정한다. 명령어의 최종 소스 피연산자는 명령어와 함께 전달되는 즉각적인(예를 들어, 하드코딩된) 값일 수 있다.
일 실시형태에서, 명령어들은 연산 코드 비트 필드에 기초하여 그룹화되어 연산 코드 디코드(740)를 단순화한다. 8 비트 연산 코드에 대해, 비트 4, 5 및 6은 실행 유닛이 연산 코드의 타입을 결정할 수 있게 한다. 도시된 정확한 연산 코드 그룹화는 예시적이다. 일 실시형태에서, 이동 및 로직 연산 코드 그룹(742)은 데이터 이동 및 로직 명령어(예컨대, mov, cmp)를 포함한다. 이동 및 로직 그룹 (742)은, 이동 명령어가 0000xxxxb(예컨대, 0x0x)의 형태이고 로직 명령어가 0001xxxxb(예컨대, 0x01)의 형태인 5 개의 최상위 비트(MSB)를 공유한다. 흐름 제어 명령어 그룹(744)(예컨대, call, jmp)은 0010xxxxb(예컨대, 0x20)의 형태로 명령어들을 포함한다. 기타 명령어 그룹(746)은 0011xxxxb(예컨대, 0x30)의 형태로 동기화 명령어(예컨대, wait, send)를 포함하는 명령들의 혼합을 포함한다. 병렬 수학 명령어 그룹(748)은 0100xxxxb(예컨대, 0x40)의 형태로 구성요소별(component-wise) 산술 명령어들(예컨대, add, mul)을 포함한다. 병렬 수학 그룹(748)은 데이터 채널에 걸쳐 병렬로 산술 연산을 수행한다. 벡터 수학 그룹(750)은 0101xxxxb(예컨대, 0x50)의 형태의 산술 명령어(예컨대, dp4)를 포함한다. 벡터 수학 그룹은 벡터 피연산자에 대해 내적 계산과 같은 산술 연산을 수행한다.
도 9는 그래픽 파이프라인(820), 미디어 파이프라인(830), 디스플레이 엔진(840), 스레드 실행 로직(850) 및 렌더 출력 파이프라인(870)을 포함하는 그래픽 프로세서의 다른 실시형태의 블록도이다. 일 실시형태에서, 그래픽 프로세서는 하나 이상의 범용 처리 코어를 포함하는 멀티 코어 처리 시스템 내의 그래픽 프로세서이다. 그래픽 프로세서는 하나 이상의 제어 레지스터들(도시되지 않음)에 대한 레지스터 기록들에 의해 또는 링 상호접속(802)을 통해 그래픽 프로세서에 발행된 커맨드들을 통해 제어된다. 링 상호접속(802)은 그래픽 프로세서를, 다른 그래픽 프로세서들 또는 범용 프로세서와 같은 다른 처리 구성요소에 결합시킨다. 링 상호 접속으로부터의 커맨드는 명령어를 그래픽 파이프라인(820) 또는 미디어 파이프라인(830)의 개별 구성요소에 공급하는 커맨드 스트리머(803)에 의해 해석된다.
커맨드 스트리머(803)는 메모리로부터의 정점 데이터를 판독하고 커맨드 스 트리머(803)에 의해 제공된 정점 처리 커맨드를 실행하는 정점 인출기(805) 구성요소의 동작을 지시한다. 정점 인출기(805)는 정점 데이터를 정점 셰이더(807)에 제공하고, 정점 셰이더(807)는 각 정점에 대해 좌표 공간 변환 및 조명 연산을 수행한다. 정점 인출기(805) 및 정점 셰이더(807)는 스레드 디스패처(831)를 통해 실행 스레드를 실행 유닛(852A, 852B)에 디스패치함으로써 정점 처리 명령어를 실행한다.
일 실시형태에서, 실행 유닛(852A, 852B)은 그래픽 및 미디어 동작을 수행하기 위한 명령어 세트를 갖는 벡터 프로세서의 어레이이다. 실행 유닛(852A, 852B)은 각각의 어레이에 특정되거나 어레이들 사이에서 공유되는 부착된 L1 캐시(851)를 갖는다. 캐시는 데이터 캐시, 명령어 캐시 또는 상이한 파티션 내에 데이터 및 명령어를 포함하도록 파티셔닝된 단일 캐시로 구성될 수 있다.
일 실시형태에서, 그래픽 파이프라인(820)은 3D 객체의 하드웨어 가속 테셀레이션(tessellation)을 수행하기 위한 테셀레이션 구성요소를 포함한다. 프로그래밍 가능한 헐(hull) 셰이더(811)는 테셀레이션 동작을 구성한다. 프로그래밍 가능한 도메인 셰이더(817)는 테셀레이션 출력의 백엔드 평가를 제공한다. 테셀레이터(813)는 헐 쉐이더(811)의 방향에서 동작하고, 그래픽 파이프라인(820)에 입력으로서 제공되는 코어스 기하학적 모델에 기초하여 상세한 기하학적 객체 세트를 생성하는 특수 목적 로직을 포함한다. 테셀레이션이 사용되지 않으면, 테셀레이션 구성요소(811, 813, 817)는 바이패스될 수 있다.
완전한 기하학적 객체는 실행 유닛(852A, 852B)으로 디스패치되는 하나 이상의 스레드를 통해 지오메트리 셰이더(819)에 의해 처리되거나, 직접적으로 클리퍼 (829)로 진행할 수 있다. 지오메트리 셰이더는, 그래픽 파이프라인의 이전 단계에서와 같은 정점 또는 정점의 패치가 아니라, 오히려 전체 기하학적 객체 상에서 동작한다. 테셀레이션이 디스에이블되는 경우, 지오메트리 셰이더(819)는 정점 셰이더(807)로부터 입력을 수신한다. 지오메트리 셰이더(819)는 테셀레이션 유닛이 디스에이블되는 경우 지오메트리 테셀레이션을 수행하도록 지오메트리 셰이더 프로그램에 의해 프로그램 가능하다.
래스터화 이전에, 정점 데이터는 고정 함수 클리퍼(clipper) 또는 클리핑 및 지오메트리 셰이더 기능을 갖는 프로그램 가능한 클리퍼인 클리퍼(829)에 의해 처리된다. 일 실시형태에서, 렌더 출력 파이프라인(870)의 래스터라이저(873)는 픽셀 셰이더를 디스패치하여 기하학적 객체를 픽셀 단위 표현으로 변환한다. 일 실시형태에서, 픽셀 셰이더 로직은 스레드 실행 로직(850)에 포함된다.
그래픽 엔진은 상호접속 버스, 상호접속 패브릭, 또는 그래픽 엔진의 주요 구성요소들 사이에서 데이터 및 메시지 전달을 허용하는 다른 상호 접속 메커니즘을 갖는다. 일 실시형태에서, 실행 유닛(852A, 852B) 및 연관된 캐시(들)(851), 텍스처 및 미디어 샘플러(854), 및 텍스처/샘플러 캐시(858)는 데이터 포트(856)를 통해 상호접속되어 메모리 액세스를 수행하고 그래픽 엔진의 렌더링 출력 파이프라인 구성요소와 통신한다. 일 실시형태에서, 샘플러(854), 캐시(851, 858) 및 실행 유닛(852A, 852B)은 각각 개별 메모리 액세스 경로를 갖는다.
일 실시형태에서, 렌더 출력 파이프라인(870)은 정점-기반 객체를 그들의 연관된 픽셀-기반 표현으로 변환하는 래스터라이저 및 깊이 테스트 구성요소(873)를 포함한다. 일 실시형태에서, 래스터라이저 로직은 일정 기능 삼각형 및 라인 래스터화를 수행하기 위한 윈도우/마스커 유닛을 포함한다. 연관된 렌더링 및 깊이 버퍼 캐시들(878, 879)은 또한 일 실시형태에서 이용 가능하다. 몇몇 예에서 2D 동작(예컨대, 블렌딩을 사용한 비트 블록 이미지 전송)과 연관된 픽셀 동작은 2D 엔진(841)에 의해 수행되거나 디스플레이 시에 오버레이 디스플레이 평면을 사용하는 디스플레이 제어기(843)에 의해 대체되는 경우도 있지만, 픽셀 동작 구성요소(877)는 데이터에 대해 픽셀 기반 동작을 수행한다. 일 실시형태에서 공유 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(Open Graphics Library) 및 OpenCL(Open Computing Language), 또는 Microsoft Corporation로부터의 Direct3D 라이브러리에 대한 지원이 제공되고, 또는 일 실시형태에서 OpenGL 및 D3D 모두에 대한 지원이 제공된다. OpenCV(Open Source Computer Vision Library)에 대한 지원도 제공될 수 있다. 미래의 API의 파이프라인에서 그래픽 프로세서의 파이프라인으로 매핑이 가능하다면, 호환 가능한 3D 파이프라인을 가진 미래의 API도 지원될 것이다.
도 10a는 실시형태에 따른 그래픽 프로세서 커맨드 포맷을 도시하는는 블록도이고, 도 10b는 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스를 도시하는 블록도이다. 도 10a에 실선으로 도시된 박스는 그래픽 커맨드에 일반적으로 포함되는 구성요소를 도시하고, 점선은 선택적이거나 그래픽 커맨드의 서브 세트에만 포함되는 구성요소를 포함한다. 도 10a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은 커맨드의 타겟 클라이언트(902), 커맨드 연산 코드(opcode)(904) 및 커맨드에 대한 관련 데이터(906)를 식별하기 위한 데이터 필드를 포함한다. 몇몇 커맨드에는 서브 연산 코드(905) 및 커맨드 크기(908)가 또한 포함된다.
클라이언트(902)는 커맨드 데이터를 처리하는 그래픽 디바이스의 클라이언트 유닛을 특정한다. 일 실시형태에서, 그래픽 프로세서 커맨드 파서(parser)는 각 커맨드의 클라이언트 필드를 검사하여 커맨드의 추가 처리를 조절하고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅한다. 일 실시형태에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛 및 미디어 유닛을 포함한다. 각각의 클라이언트 유닛은 커맨드를 처리하는 대응하는 처리 파이프라인을 갖는다. 커맨드가 클라이언트 유닛에 의해 일단 수신되면, 클라이언트 유닛은 연산코드(904), 및 존재한다면, 수행할 동작을 결정하기 위해 서브 연산 코드(905)를 판독한다. 클라이언트 유닛은 커맨드의 데이터 필드(906) 내의 정보를 사용하여 커맨드를 수행한다. 몇몇 커맨드의 경우, 명시적 커맨드 크기(908)는 커맨드의 크기를 특정하기 위해 예측된다. 일 실시형태에서, 커맨드 파서는 커맨드 연산 코드에 기초하여 커맨드들 중 적어도 일부의 크기를 자동으로 결정한다. 일 실시형태에서, 커맨드는 더블 워드의 배수(multiples of a double word)를 통해 정렬된다.
도 10b의 흐름도는 샘플 커맨드 시퀀스(910)를 도시한다. 일 실시형태에서, 그래픽 프로세서의 실시형태를 특징짓는 데이터 처리 시스템의 소프트웨어 또는 펌웨어는, 그래픽 동작의 세트를 설정하고, 실행하고 종료하기 위해 도시된 커맨드 시퀀스의 버전을 사용한다. 샘플 커맨드 시퀀스는 예시를 위해 도시되고 설명되지만, 실시형태는 이러한 커맨드 또는 이러한 커맨드 시퀀스에 제한되지 않는다. 더욱이, 그래픽 프로세서가 적어도 부분적으로 동시 방식으로 커맨드의 시퀀스를 처리하도록 커맨드는 커맨드 시퀀스 내의 커맨드 배치(batch)로서 발행될 수있다.
샘플 커맨드 시퀀스(910)는 임의의 활성 그래픽 파이프라인으로 하여금 그 파이프라인에 대해 현재 계류중인 커맨드를 완료하게 하는 파이프라인 플러시 커맨드(912)로 시작될 수 있다. 일 실시형태에서, 3D 파이프라인(922) 및 미디어 파이프라인(924)은 동시에 동작하지 않는다. 파이프라인 플러시는 활성 그래픽 파이프라인으로 하여금 계류중인 커맨드를 완료하게 하도록 수행된다. 파이프라인 플러시에 응답하여 그래픽 프로세서용 커맨드 파서는, 활성 드로잉 엔진이 계류중인 동작을 완료하고 관련 판독 캐시가 무효화될 때까지 커맨드 처리를 중단할 것이다. 선택적으로, '더티(dirty)'로 표시된 렌더 캐시의 임의의 데이터는 메모리로 플러시될 수 있다. 파이프라인 플러시 커맨드(912)는 파이프라인 동기화 동안 또는 그래픽 프로세서를 저전력 상태로 두기 전에 사용될 수 있다.
파이프라인 선택 커맨드(913)는 파이프라인들 사이에서 명시적으로 스위칭할 것을 커맨드 시퀀스가 그래픽 프로세서에 요구할 때 사용된다. 컨텍스트가 양 파이프라인에 대한 커맨드를 발행하는 것이 아닌 한, 파이프라인 선택 커맨드(913)는, 파이프라인 커맨드를 발행하기 전에 실행 콘텍스트 내에서 한 번만 요구된다. 일 실시형태에서, 파이프라인 선택 커맨드(913)을 통한 파이프라인 스위치 직전에 파이프라인 플러시 커맨드(912)가 요구된다.
파이프라인 제어 커맨드(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)에 대한 프로그래밍의 특정 사용 및 방식은 수행될 미디어 또는 계산 동작에 의존한다. 특정 미디어 디코드 동작은 미디어 디코드 중에 미디어 파이프라인으로 오프로딩될 수 있다. 미디어 파이프라인은 또한 바이패스될 수 있으며, 미디어 디코드는 하나 이상의 범용 처리 코어가 제공하는 리소스를 사용하여 전체적으로 또는 부분적으로 수행될 수 있다. 일 실시형태에서, 미디어 파이프라인은 GPGPU(general-purpose graphics processor unit) 동작을 위한 요소를 또한 포함하는데, 여기서 그래픽 프로세서는 그래픽 프리미티브의 렌더링에 명시적으로 관련되지 않은 연산 셰이더 프로그램을 사용하여 SIMD 벡터 동작을 수행하는데 사용된다.
미디어 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 미디어 파이프라인 상태 커맨드(940)의 세트는 미디어 객체 커맨드(942) 전에 커맨드 큐에 디스패치되거나 위치된다. 미디어 파이프라인 상태 커맨드(940)는 미디어 객체를 처리하는데 사용될 미디어 파이프라인 요소를 구성하는 데이터를 포함한다. 이것은 인코드 또는 디코드 포맷과 같은, 미디어 파이프라인 내에서 비디오 디코드 및 비디오 인코드 로직을 구성하기 위한 데이터를 포함한다. 미디어 파이프라인 상태 커맨드(940)는 또한, 상태 설정의 배치(batch)를 포함하는 "간접적인" 상태 요소에 대한 하나 이상의 포인터의 사용을 지원한다.
미디어 객체 커맨드(942)는 미디어 파이프라인에 의한 처리를 위해 미디어 객체에 포인터를 공급한다. 미디어 객체는 처리될 비디오 데이터를 포함하는 메모리 버퍼를 포함한다. 일 실시형태에서, 모든 미디어 파이프라인 상태는 미디어 객체 커맨드(942)를 발행하기 전에 유효해야 한다. 일단 파이프라인 상태가 구성되고 미디어 객체 커맨드(942)가 큐잉되면, 미디어 파이프라인(924)은 실행(934) 커맨드 또는 동등한 실행 이벤트(예컨대, 레지스터 기록)를 통해 트리거된다. 미디어 파이프라인(924)으로부터의 출력은 3D 파이프라인(922) 또는 미디어 파이프라인(924)에 의해 제공되는 동작에 의해 사후 처리될 수 있다. 일 실시형태에서, GPGPU 동작은 미디어 동작과 유사한 방식으로 구성되고 실행된다.
도 11은 실시형태에 따른 데이터 처리 시스템을 위한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다. 소프트웨어 아키텍처는 3D 그래픽 애플리케이션(1010), 운영 시스템(1020) 및 적어도 하나의 프로세서(1030)를 포함한다. 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(들)(1034)를 포함한다. 그래픽 애플리케이션(1010) 및 운영 시스템(1020)은 각각 데이터 처리 시스템의 시스템 메모리(1050)에서 실행된다.
일 실시형태에서, 3D 그래픽 애플리케이션(1010)은 셰이더 명령어(1012)를 포함하는 하나 이상의 셰이더 프로그램을 포함한다. 셰이더 언어 명령어는, HLSL(High Level Shader Language) 또는 GLSL(OpenGL Shader Language)과 같은 상위 레벨 셰이더 언어일 수 있다. 애플리케이션은 또한 범용 프로세서 코어(1034)에 의한 실행에 적합한 기계어로 실행 가능한 명령어(1014)를 포함한다. 애플리케이션은 또한 정점 데이터에 의해 정의된 그래픽 객체(1016)를 포함한다.
운영 시스템(1020)는 Microsoft Corporation의 Microsoft? Windows? 운영 시스템, 독점 UNIX형 운영 시스템 또는 Linux 커널의 변형을 사용하는 오픈 소스 UNIX형 운영 시스템일 수 있다. Direct3D API가 사용 중일 때, 운영 시스템(1020)은 프론트엔드 셰이더 컴파일러(1024)를 사용하여 HLSL의 임의의 셰이더 명령어(1012)를 하위 레벨 셰이더 언어로 컴파일링한다. 컴파일링은 JIT(just-in-time) 컴파일링일 수도 있고 응용 프로그램이 공유 사전 컴파일링을 수행할 수도 있다. 일 실시형태에서, 상위 레벨 셰이더는 3D 그래픽 애플리케이션(1010)의 컴파일링 동안 하위 레벨 셰이더로 컴파일링된다.
사용자 모드 그래픽 드라이버(1026)는 셰이더 명령어(1012)를 하드웨어 특정 표현으로 변환하기 위한 백엔드 셰이더 컴파일러(1027)를 포함할 수 있다. OpenGL API가 사용 중일 때, GLSL 상위 레벨 언어의 셰이더 명령어(1012)는 컴파일링을 위해 사용자 모드 그래픽 드라이버(1026)로 전달된다. 사용자 모드 그래픽 드라이버는 운영 시스템 커널 모드 기능(1028)을 사용하여 커널 모드 그래픽 드라이버(1029)와 통신한다. 커널 모드 그래픽 드라이버(1029)는 그래픽 프로세서(1032)와 통신하여 커맨드 및 명령어를 디스패치한다.
다양한 동작들 또는 기능들이 여기서 설명되는 경우에, 이들은 하드웨어 회로, 소프트웨어 코드, 명령어, 구성 및/또는 데이터로서 설명되거나 정의될 수 있다. 컨텐츠는 하드웨어 로직에서, 또는 직접 실행 가능한 소프트웨어("객체" 또는 "실행 가능" 형태), 소스 코드, 그래픽 엔진에서 실행하도록 설계된 상위 레벨 셰이더 코드, 또는 특정 프로세서 또는 그래픽 코어용 명령어 세트 내의 하위 레벨 어셈블리 언어 코드로서 구체화될 수 있다. 여기에 설명된 실시형태의 소프트웨어 컨텐츠는, 콘텐츠가 저장된 제품을 통해, 또는 통신 인터페이스를 통해 데이터를 전송하는 통신 인터페이스를 동작시키는 방법을 통해 제공될 수 있다.
비일시적 머신 판독가능 저장 매체는 머신으로 하여금 설명된 기능 또는 동작을 수행하도록 할 수 있고, 기록 가능한/기록 불가능한 매체(예컨대, ROM(read only memory), RAM (random access memory), 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 디바이스, 등등)와 같이, 머신(예컨대, 컴퓨팅 디바이스, 전자 시스템, 등등)에 의해 액세스 가능한 형태로 정보를 저장하는 임의의 메커니즘을 포함할 수 있다. 통신 인터페이스는, 메모리 버스 인터페이스, 프로세서 버스 인터페이스, 인터넷 접속, 디스크 제어기, 등등과 같이, 다른 장치와 통신하기 위해 유선, 무선, 광학 등의 임의의 매체와 인터페이스하는 임의의 메커니즘을 포함한다. 통신 인터페이스는 소프트웨어 컨텐츠를 설명하는 데이터 신호를 제공하기 위해 통신 인터페이스를 준비하는 신호를 전송하거나 구성 매개 변수를 제공함으로써 구성된다. 통신 인터페이스는 통신 인터페이스로 전송된 하나 이상의 커맨드 또는 신호를 통해 액세스될 수 있다.
설명된 다양한 구성요소는 설명된 동작 또는 기능을 수행하기 위한 수단일 수있다. 여기에 설명된 각 구성요소는 소프트웨어, 하드웨어 또는 이들의 조합을 포함한다. 구성요소는 소프트웨어 모듈, 하드웨어 모듈, 특수 목적 하드웨어(예컨대, 애플리케이션 특정 하드웨어, ASIC(Application Specific Integrated Circuits), 디지털 신호 프로세서(DSP), 등등), 내장 컨트롤러, 하드 와이어 회로 등으로 구현될 수 있다. 여기에 설명된 것 이외에, 본 발명의 범위를 벗어나지 않으면서 본 발명의 개시된 실시형태 및 구현에 대한 다양한 수정이 이루어질 수 있다. 따라서, 본 명세서의 도시 및 예시는 제한적인 의미가 아니라 예시적인 것으로 해석되어야 한다. 본 발명의 범위는 오로지 다음의 청구 범위를 참조하여 측정되어야 한다.
다음의 항목들 및/또는 예들은 다른 실시형태에 관련된다.
일 예시적인 실시형태는, 픽셀 내의 샘플들을 분석하는 단계와, 픽셀의 영역에 대해 코어스 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지 여부를 결정하는 단계와, 결정된 셰이딩의 유형에 기초하여 샘플링 레이트를 설정하는 단계를 포함하는 방법일 수 있다. 상기 방법은 또한 상기 영역에서 샘플 단위 셰이딩을 사용할지 여부를 결정하는 단계를 포함할 수 있다. 상기 방법은 또한 샘플 단위 셰이딩을 사용하지 않을 경우 픽셀 영역 내의 각각의 픽셀에 대한 대표 샘플을 분석하는 단계를 포함할 수 있다. 이 방법은 또한 픽셀 샘플 단위 구성요소를 평가하는 단계를 포함할 수 있다. 상기 방법은 또한 픽셀 단위 셰이딩을 사용할지 여부를 결정하는 단계를 포함할 수 있다. 이 방법은 픽셀 단위 셰이딩을 사용하지 않을 경우 픽셀 단위 쉐이딩 구성요소를 평가하는 단계를 포함한다. 이 방법은 또한 픽셀 단위 셰이딩을 사용할 경우 코어스 픽셀 단위 쉐이딩 구성요소를 평가하는 단계를 포함할 수 있다. 이 방법의 샘플들을 분석하는 단계는 또한 샘플들이 기준 샘플로부터 얼마나 많이 벗어나는지를 결정하는 단계를 포함한다. 상기 방법의 샘플들을 분석하는 단계는 또한 상기 영역이 얼마나 평탄한지를 결정하는 단계를 포함할 수 있다. 이 방법은 또한 모든 영역을 동시에 동일한 셰이딩 레이트로 셰이딩하는 단계를 포함할 수 있다.
다른 예시적인 실시형태는, 프로세서에 의해 실행되어 시퀀스를 수행하는 명령어를 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 매체로서, 상기 시퀀스는 픽셀 내의 샘플들을 분석하는 것과, 픽셀의 영역에 대해 코어스 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지 여부를 결정하는 것과, 결정된 셰이딩의 유형에 기초하여 샘플링 레이트를 설정하는 것을 포함하는, 컴퓨터 판독가능 매체일 수 있다. 상기 매체는 또한 상기 영역에서 샘플 단위 셰이딩을 사용할지 여부를 결정하는 것을 포함하는 시퀀스를 수행하는 명령어를 저장할 수 있다. 상기 매체는 또한 샘플 단위 셰이딩을 사용하지 않을 경우 픽셀 영역 내의 각각의 픽셀에 대한 대표 샘플을 분석하는 것을 포함하는 시퀀스를 수행하는 명령어를 저장할 수 있다. 이 매체는 또한 샘플 단위 셰이딩을 사용할 경우 픽셀 샘플 단위 구성요소를 평가하는 것을 포함하는 시퀀스를 수행하는 명령어를 저장할 수 있다. 상기 매체는 또한 픽셀 단위 셰이딩을 사용할지 여부를 결정하는 것을 포함하는 시퀀스를 수행하는 명령어를 저장할 수 있다. 이 매체는 또한, 픽셀 단위 셰이딩을 사용하지 않을 경우, 픽셀 단위 셰이딩 구성요소를 평가하는 것을 포함하는 상기 시퀀스를 수행하는 명령어를 저장할 수 있다. 이 매체는 또한, 픽셀 단위 셰이딩을 사용할 경우, 코어스 픽셀 단위 쉐이딩 구성요소를 평가하는 것을 포함하는 상기 시퀀스를 수행하는 명령어를 저장할 수 있다. 이 매체는 또한, 상기 샘플들을 분석하는 것이 샘플들이 기준 샘플로부터 얼마나 많이 벗어나는지를 결정하는 것을 포함하는 상기 시퀀스를 수행하는 명령어를 저장할 수 있다. 상기 매체는 또한, 샘플들을 분석하는 것이 상기 영역이 얼마나 평탄한지를 결정하는 것을 포함하는 상기 시퀀스를 수행하는 명령어를 저장할 수 있다. 이 매체는 또한 모든 영역을 동시에 동일한 셰이딩 레이트로 셰이딩하는 것을 포함하는 시퀀스를 수행하는 명령어를 저장할 수 있다.
다른 예에서, 실시형태는, 픽셀 내의 샘플들을 분석하고, 픽셀의 영역에 대해 코어스 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지 여부를 결정하고, 결정된 셰이딩의 유형에 기초하여 샘플링 레이트를 설정하는 프로세서와, 상기 프로세서에 결합된 스토리지를 포함하는 장치일 수 있다. 상기 장치는 또한 상기 프로세서가 상기 영역에서 샘플 단위 셰이딩을 사용할지 여부를 결정하는 것을 포함할 수 있다. 상기 장치는 또한, 샘플 단위 셰이딩을 사용하지 않을 경우, 상기 프로세서가 픽셀 영역 내의 각각의 픽셀에 대한 대표 샘플을 분석하는 것을 포함할 수 있다. 이 장치는 또한, 샘플 단위 셰이딩을 사용할 경우, 상기 프로세서가 픽셀 샘플 단위 구성요소를 평가하는 것을 포함할 수 있다. 상기 장치는 또한 상기 프로세서가 픽셀 단위 셰이딩을 사용할지 여부를 결정하는 것을 포함할 수 있다. 이 장치는, 픽셀 단위 셰이딩을 사용하지 않을 경우, 상기 프로세서가 픽셀 단위 쉐이딩 구성요소를 평가하는 것을 포함한다. 이 장치는 또한, 픽셀 단위 셰이딩을 사용할 경우, 상기 프로세서가 코어스 픽셀 단위 쉐이딩 구성요소를 평가하는 것을 포함할 수 있다. 상기 장치는 운영 시스템, 배터리 및 펌웨어, 상기 펌웨어를 업데이트하는 모듈을 포함할 수 있다.
여기에 설명된 그래픽 처리 기술은 다양한 하드웨어 아키텍처로 구현될 수있다. 예컨대, 그래픽 기능은 칩셋에 통합될 수 있다. 대안적으로, 개별 그래픽 프로세서가 사용될 수 있다. 또 다른 실시형태로서, 그래픽 기능은 멀티 코어 프로세서를 포함하는 범용 프로세서에 의해 구현될 수 있다.
본 명세서에서 "일 실시형태" 또는 "실시형태"에 대한 언급은, 그 실시형태와 관련하여 설명되는 특정 특징, 구조 또는 특성이 본 개시물 내에 포함되는 적어도 하나의 구현에 포함됨을 의미한다. 따라서, "일 실시형태" 또는 "실시형태에서"라는 문구의 출현은 반드시 동일한 실시형태를 지칭하는 것은 아니다. 또한, 특정 특징, 구조 또는 특성은 도시된 특정 실시형태 이외의 다른 적절한 형태로 구성될 수 있으며, 그러한 모든 형태는 본원의 특허 청구 범위 내에 포함될 수 있다.
한정된 수의 실시형태가 설명되었지만, 당업자는 이로부터 다수의 수정 및 변형을 인식할 것이다. 첨부된 청구 범위는 본 명세서의 진정한 사상 및 범위 내에 있는 그러한 모든 수정 및 변형을 포함하는 것으로 의도된다.
Claims (25)
- 픽셀 내의 샘플들을 분석하는 단계와,
픽셀 영역에 대해 코어스(coarse) 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지 여부를 결정하는 단계와,
결정된 셰이딩 유형에 기초하여 셰이딩 레이트를 설정하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
상기 영역에서 샘플 단위 셰이딩(per-sample shading)을 사용할지 여부를 결정하는 단계를 포함하는
방법.
- 제 2 항에 있어서,
샘플 단위 셰이딩을 사용하지 않을 경우, 픽셀 영역 내의 각 픽셀에 대한 대표 샘플을 분석하는 단계를 포함하는
방법.
- 제 2 항에 있어서,
샘플 단위 셰이딩을 사용할 경우, 픽셀 샘플 단위 구성요소를 평가하는 단계를 포함하는
방법.
- 제 3 항에 있어서,
픽셀 단위 셰이딩을 사용할지 여부를 결정하는 단계를 포함하는
방법.
- 제 5 항에 있어서,
픽셀 단위 셰이딩을 사용하지 않을 경우, 픽셀 단위 셰이딩 구성요소를 평가하는 단계를 포함하는
방법.
- 제 5 항에 있어서,
픽셀 단위 셰이딩을 사용할 경우, 코어스 픽셀 단위 셰이딩 구성요소를 평가하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
상기 샘플들을 분석하는 단계는 샘플들이 기준 샘플로부터 얼마나 많이 벗어나는지를 결정하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
상기 샘플들을 분석하는 단계는 상기 영역이 얼마나 평탄한지(smooth)를 결정하는 단계를 포함하는
방법.
- 제 1 항에 있어서,
모든 영역을 동시에 동일한 셰이딩 레이트로 셰이딩하는 단계를 포함하는
방법.
- 프로세서에 의해 실행되어 시퀀스를 수행하는 명령어를 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 매체로서,
상기 시퀀스는,
픽셀 내의 샘플들을 분석하는 것과,
픽셀 영역에 대해 코어스 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지 여부를 결정하는 것과,
결정된 셰이딩 유형에 기초하여 셰이딩 레이트를 설정하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 11 항에 있어서,
상기 시퀀스는 상기 영역에서 샘플 단위 셰이딩을 사용할지 여부를 결정하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 12 항에 있어서,
상기 시퀀스는, 샘플 단위 셰이딩을 사용하지 않을 경우, 픽셀 영역 내의 각 픽셀에 대한 대표 샘플을 분석하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 12 항에 있어서,
상기 시퀀스는, 샘플 단위 셰이딩을 사용할 경우, 픽셀 샘플 단위 구성요소를 평가하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 13 항에 있어서,
상기 시퀀스는 픽셀 단위 셰이딩을 사용할지 여부를 결정하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 15 항에 있어서,
상기 시퀀스는, 픽셀 단위 셰이딩을 사용하지 않을 경우, 픽셀 단위 셰이딩 구성요소를 평가하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 15 항에 있어서,
상기 시퀀스는, 픽셀 단위 셰이딩을 사용할 경우, 코어스 픽셀 단위 셰이딩 구성요소를 평가하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 11 항에 있어서,
상기 샘플들을 분석하는 것은 샘플들이 기준 샘플로부터 얼마나 많이 벗어나는지를 결정하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 11 항에 있어서,
상기 샘플들을 분석하는 것은 상기 영역이 얼마나 평탄한지를 결정하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 제 11 항에 있어서,
상기 시퀀스는 모든 영역을 동시에 동일한 셰이딩 레이트로 셰이딩하는 것을 포함하는
비일시적 컴퓨터 판독가능 매체.
- 픽셀 내의 샘플들을 분석하고, 픽셀 영역에 대해 코어스 픽셀 셰이딩, 픽셀 셰이딩 또는 샘플 셰이딩을 사용할지 여부를 결정하고, 결정된 셰이딩 유형에 기초하여 셰이딩 레이트를 설정하는 프로세서와,
상기 프로세서에 결합된 스토리지(storage)를 포함하는
장치.
- 제 21 항에 있어서,
상기 프로세서는 상기 영역에서 샘플 단위 셰이딩을 사용할지 여부를 결정하는
장치.
- 제 22 항에 있어서,
상기 프로세서는, 샘플 단위 셰이딩을 사용하지 않을 경우, 픽셀 영역 내의 각 픽셀에 대한 대표 샘플을 분석하는
장치.
- 제 22 항에 있어서,
상기 프로세서는, 샘플 단위 셰이딩을 사용할 경우, 픽셀 샘플 단위 구성요소를 평가하는
장치.
- 제 23 항에 있어서,
상기 프로세서는 픽셀 단위 셰이딩을 사용할지 여부를 결정하는
장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/487,432 | 2014-09-16 | ||
US14/487,432 US9934606B2 (en) | 2014-09-16 | 2014-09-16 | Deferred coarse pixel shading |
PCT/US2015/045831 WO2016043909A1 (en) | 2014-09-16 | 2015-08-19 | Deferred coarse pixel shading |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170033868A true KR20170033868A (ko) | 2017-03-27 |
KR102241398B1 KR102241398B1 (ko) | 2021-04-16 |
Family
ID=55455236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177003923A KR102241398B1 (ko) | 2014-09-16 | 2015-08-19 | 지연형 코어스 픽셀 셰이딩 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9934606B2 (ko) |
EP (1) | EP3195269A4 (ko) |
JP (1) | JP6464538B2 (ko) |
KR (1) | KR102241398B1 (ko) |
CN (1) | CN106575451B (ko) |
WO (1) | WO2016043909A1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200035467A (ko) * | 2017-08-25 | 2020-04-03 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 가변 요금 셰이딩 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10152764B2 (en) * | 2015-03-24 | 2018-12-11 | Intel Corporation | Hardware based free lists for multi-rate shader |
US10257449B2 (en) * | 2016-01-05 | 2019-04-09 | Nvidia Corporation | Pre-processing for video noise reduction |
US10186076B2 (en) * | 2016-03-29 | 2019-01-22 | Intel Corporation | Per-sample MSAA rendering using comprehension data |
US10535186B2 (en) * | 2016-08-30 | 2020-01-14 | Intel Corporation | Multi-resolution deferred shading using texel shaders in computing environments |
US10109078B1 (en) | 2017-04-10 | 2018-10-23 | Intel Corporation | Controlling coarse pixel size from a stencil buffer |
US10235799B2 (en) | 2017-06-30 | 2019-03-19 | Microsoft Technology Licensing, Llc | Variable rate deferred passes in graphics rendering |
JP7290852B2 (ja) * | 2018-12-07 | 2023-06-14 | 国立大学法人東京工業大学 | 多コンテンツ描画システム及び多コンテンツ描画方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060044935A (ko) * | 2004-05-03 | 2006-05-16 | 마이크로소프트 코포레이션 | 향상된 그래픽 파이프라인을 제공하는 시스템 및 방법 |
KR20080108051A (ko) * | 2007-06-07 | 2008-12-11 | 엔비디아 코포레이션 | 상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법 |
KR20100004890A (ko) * | 2008-07-03 | 2010-01-13 | 엔비디아 코포레이션 | 하이브리드 멀티샘플/수퍼샘플 안티에일리어싱 |
KR20100051750A (ko) * | 2007-09-14 | 2010-05-17 | 콸콤 인코포레이티드 | 그래픽 처리 유닛에서 프레그먼트 셰이더 바이패스, 및 이를 위한 장치 및 방법 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6697063B1 (en) * | 1997-01-03 | 2004-02-24 | Nvidia U.S. Investment Company | Rendering pipeline |
JP3499541B2 (ja) | 2001-07-25 | 2004-02-23 | ザイオソフト株式会社 | 3次元画像表示方法、装置およびプログラム |
US7496416B2 (en) * | 2005-08-01 | 2009-02-24 | Luxology, Llc | Input/output curve editor |
US7692659B1 (en) * | 2006-11-06 | 2010-04-06 | Nvidia Corporation | Color-compression using automatic reduction of multi-sampled pixels |
US8605086B2 (en) | 2008-07-03 | 2013-12-10 | Nvidia Corporation | Hybrid multisample/supersample antialiasing |
US8823736B2 (en) * | 2012-01-20 | 2014-09-02 | Intel Corporation | Graphics tiling architecture with bounding volume hierarchies |
US9684997B2 (en) * | 2012-06-27 | 2017-06-20 | Pixar | Efficient rendering of volumetric elements |
US9082212B2 (en) | 2012-12-21 | 2015-07-14 | Nvidia Corporation | Programmable blending via multiple pixel shader dispatches |
US10733794B2 (en) * | 2013-12-13 | 2020-08-04 | Nvidia Corporation. | Adaptive shading in a graphics processing pipeline |
-
2014
- 2014-09-16 US US14/487,432 patent/US9934606B2/en active Active
-
2015
- 2015-08-19 JP JP2017504751A patent/JP6464538B2/ja active Active
- 2015-08-19 CN CN201580042385.0A patent/CN106575451B/zh active Active
- 2015-08-19 KR KR1020177003923A patent/KR102241398B1/ko active IP Right Grant
- 2015-08-19 WO PCT/US2015/045831 patent/WO2016043909A1/en active Application Filing
- 2015-08-19 EP EP15842937.3A patent/EP3195269A4/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20060044935A (ko) * | 2004-05-03 | 2006-05-16 | 마이크로소프트 코포레이션 | 향상된 그래픽 파이프라인을 제공하는 시스템 및 방법 |
KR20080108051A (ko) * | 2007-06-07 | 2008-12-11 | 엔비디아 코포레이션 | 상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법 |
KR20100051750A (ko) * | 2007-09-14 | 2010-05-17 | 콸콤 인코포레이티드 | 그래픽 처리 유닛에서 프레그먼트 셰이더 바이패스, 및 이를 위한 장치 및 방법 |
KR20100004890A (ko) * | 2008-07-03 | 2010-01-13 | 엔비디아 코포레이션 | 하이브리드 멀티샘플/수퍼샘플 안티에일리어싱 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200035467A (ko) * | 2017-08-25 | 2020-04-03 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 가변 요금 셰이딩 |
Also Published As
Publication number | Publication date |
---|---|
EP3195269A1 (en) | 2017-07-26 |
KR102241398B1 (ko) | 2021-04-16 |
WO2016043909A1 (en) | 2016-03-24 |
US20160078672A1 (en) | 2016-03-17 |
CN106575451A (zh) | 2017-04-19 |
US9934606B2 (en) | 2018-04-03 |
CN106575451B (zh) | 2019-12-10 |
JP2017531224A (ja) | 2017-10-19 |
JP6464538B2 (ja) | 2019-02-06 |
EP3195269A4 (en) | 2018-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369733B (zh) | 使用三角形的属性的加权平均来合并粗像素着色的片段 | |
KR102241398B1 (ko) | 지연형 코어스 픽셀 셰이딩 | |
KR20170034414A (ko) | 위치 전용 셰이딩 파이프라인 | |
CN106796713B (zh) | Msaa中使用索引位进行压缩 | |
WO2016153688A1 (en) | Hardware based free lists for multi-rate shader | |
CN107408210B (zh) | 基于边缘的覆盖掩码压缩 | |
EP3221850B1 (en) | Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures | |
CN107004293B (zh) | 仅位置流水线中的宽松拣分 | |
US9412195B2 (en) | Constant buffer size multi-sampled anti-aliasing depth compression | |
US20170178278A1 (en) | Method and apparatus for updating a shader program based on current state | |
US10089779B2 (en) | Apparatus and method for conservative rasterization of polygons | |
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 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
X091 | Application refused [patent] | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) |