KR102339581B1 - 위치 전용 셰이딩 파이프라인 - Google Patents

위치 전용 셰이딩 파이프라인 Download PDF

Info

Publication number
KR102339581B1
KR102339581B1 KR1020177004819A KR20177004819A KR102339581B1 KR 102339581 B1 KR102339581 B1 KR 102339581B1 KR 1020177004819 A KR1020177004819 A KR 1020177004819A KR 20177004819 A KR20177004819 A KR 20177004819A KR 102339581 B1 KR102339581 B1 KR 102339581B1
Authority
KR
South Korea
Prior art keywords
culling
depth
pipe
calculating
processor
Prior art date
Application number
KR1020177004819A
Other languages
English (en)
Other versions
KR20170034414A (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 KR20170034414A publication Critical patent/KR20170034414A/ko
Application granted granted Critical
Publication of KR102339581B1 publication Critical patent/KR102339581B1/ko

Links

Images

Classifications

    • 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/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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/503Blending, e.g. for anti-aliasing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control 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/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped memory

Landscapes

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

Abstract

위치 전용 셰이딩에는 두 개의 지오메트리 파이프, 즉, 컬 파이프(Cull Pipe)로 불리는 축소 버전(trimmed down version)과 재생 파이프(Replay Pipe)로 불리는 정식 버전(full version)이 존재한다. 따라서, 컬 파이프는 주 애플리케이션과 병렬로 위치 셰이더를 실행하지만, 일반적으로 정점의 위치 속성만 인출 및 셰이딩하고 프레임 버퍼에 대한 픽셀의 렌더링 및 래스터화를 방지하므로, 중요한 결과를 훨씬 더 빠르게 생성한다. 또한, 컬 파이프는 이러한 중요한 결과를 사용하여, 컬링되는지 여부와 상관없이 모든 삼각형에 대한 가시성 정보를 계산한다. 한편, 재생 파이프는 가시성 정보를 소비하여, 컬링된 삼각형을 생략하고 최종적으로 래스터화 단계로 전달되는 가시적 삼각형만을 셰이딩한다. 두 개의 파이프는 함께, 폐기된 삼각형의 긴 컬 구간(long cull runs)을 숨길 수 있으며 몇몇 실시형태에서는 작업을 더 빨리 완료할 수 있다.

Description

위치 전용 셰이딩 파이프라인{POSITION-ONLY SHADING PIPELINE}
본 발명은 그래픽 처리에 관한 것이다.
현대의 그래픽 처리 아키텍처는 삼각형이 순차적으로 처리되는 가상 파이프라인을 따른다. 정점(vertices)은 셰이더를 통해 변형되고, 그 다음에 삼각형은 설정 및 래스터화 스테이지를 거쳐 픽셀을 생성하는데, 이 픽셀은 그 다음에 셰이딩되어 프레임 버퍼에 기록된다. 그러나 임의의 프레임 버퍼에서 올바른 이미지를 렌더링하려면 삼각형의 일부만이 필요하다. 예컨대, 일부 삼각형 시퀀스는 가시적 인 영향을 미치지 않으며 심지어 래스터화 단계 이전에 폐기된다. 이러한 시퀀스는 뷰포트 절두체 폐기(viewport frustum discards)를 통해 드롭되거나 그래픽 파이프라인을 통해 후면 컬링된다(back face culled). 또한, 폐기된 삼각형 시퀀스는 버스트의 크기가 10,000개 초과의 삼각형이 될 수 있는 버스트 특성을 따르는데, 픽셀 파이프와 계산 클러스터는 모두 부족하다.
몇몇 실시형태는 다음 도면을 참조하여 설명된다.
도 1은 몇몇 실시형태에 대한 개략적 베이스라인 아키텍처이다.
도 2는 몇몇 실시형태에 대한 더 구체적인 아키텍처이다.
도 3은 아키텍처의 일 실시형태의 블록도이다.
도 4는 일 실시형태에 따른 차폐 컬링(occlusion culling)를 갖는 컬 파이프 및 재생 파이프에 대한 흐름도이다.
도 5는 일 실시형태에 따른 깊이 표현을 기록하는 컬링 파이프를 갖는 재생 파이프에 대한 흐름도이다.
도 6는 일 실시형태에 따른 데이터 처리 시스템의 블럭도이다.
도 7은 일 실시형태에 따른 도 6에 도시된 프로세서의 블럭도이다.
도 8는 일 실시형태에 따른 도 6의 그래픽 프로세서의 블럭도이다.
도 9는 일 실시형태에 따른 그래픽 처리 엔진의 블럭도이다.
도 10은 다른 실시형태에 따른 그래픽 프로세서의 블럭도이다.
도 11은 일 실시형태에 대한 스레드 실행 로직(thread execution logic)을 도시한다.
도 12는 일 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷의 블럭도이다.
도 13은 그래픽 프로세서의 또 다른 실시형태의 블럭도이다.
도 14a는 일 실시형태에 따른 그래픽 프로세서 커맨드 포맷의 블럭도이다.
도 14b는 일 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스의 블럭도이다.
도 15는 일 실시형태에 대한 그래픽 소프트웨어 아키텍처이다.
장기간의 폐기 시퀀스를 완전히 숨기는 메커니즘은 성능을 향상시킬 것이다. 불행하게도, 어떤 특정 삼각형 시퀀스가 정점의 위치 속성을 인출 및 셰이딩(실행)하지 않고 유효하게 생략될 수 있는지는 확실하게 알 수 없다. 위치의 셰이딩은 그 삼각형을 드롭시킬 수 있는지 여부를 결정하는 데 중요하므로, 그래픽 처리 장치(GPU)는 위치의 셰이딩에 우선순위를 부여해야 한다. 예컨대, 현대의 GPU 아키텍처에서, 정점 계산은 정점 셰이더를 사용하여 (위치, 컬러, 텍스처 좌표, 등등과 같은) 정점 속성을 메모리로부터 인출하고 다음에 그들을 셰이딩하는 것을 수반한다. 위치 속성을 계산하는 중요한 명령어, 즉, 위치 셰이더의 계산은 정점 셰이더로부터 분리될 수 있다. 중요한 결과의 계산이 훨씬 빠르게 수행되면, 그 결과는 컬 시퀀스를 숨기는 데 사용될 수 있다. 간단히 말하면, 주 애플리케이션을 대신하여 대기 시간(latency)을 효과적으로 소비하기 위해 위치 셰이더를 "사전 실행(pre execute)"하는 것이 바람직하다.
위치 전용 셰이딩(position-only shading)에는 두 개의 지오메트리 파이프, 즉, 컬 파이프(Cull Pipe)로 불리는 축소 버전(trimmed down version)과 재생 파이프(Replay Pipe)로 불리는 정식 버전(full version)이 존재한다. 두 개의 파이프 모두 동일한 애플리케이션의 다른 인스턴스를 실행하며 각 인스턴스는 자체 컨텍스트를 갖는다. 따라서, 컬 파이프는 주 애플리케이션과 병렬로 위치 셰이더를 실행하지만, 일반적으로 정점의 위치 속성만 인출 및 셰이딩하고 프레임 버퍼에 대한 픽셀의 렌더링 및 래스터화를 방지하므로, 중요한 결과를 훨씬 더 빠르게 생성한다. 또한, 컬 파이프는 이러한 중요한 결과를 사용하여, 컬링되는지 여부와 상관없이 모든 삼각형에 대한 가시성 정보를 계산한다. 한편, 재생 파이프는 가시성 정보를 소비하여, 컬링된 삼각형을 생략하고 최종적으로 래스터화 단계로 전달되는 가시적 삼각형만을 셰이딩한다. 두 개의 파이프는 함께, 폐기된 삼각형의 긴 컬 구간(long cull runs)을 숨길 수 있으며 몇몇 실시형태에서는 작업을 더 빨리 완료할 수 있다.
잠재적 성능 향상 외에도, 위치 전용 셰이딩은 전력을 절약할 수 있는 기회를 제공하고 아키텍처의 확장성을 향상시킨다. 다음은 몇몇 실시형태의 몇몇 기여사항이다.
ㆍ 몇몇 실시형태에서 위치 전용 셰이딩은 애플리케이션에 임베딩된 삼각형의 긴 컬 시퀀스를 완전히 숨길 수 있다. 이러한 컬 구간은 시스템에 존재하는 픽셀 파이프 및 계산능력의 부족으로 인해 GPU 자원을 비효율적으로 사용하는 경향이 있다. 몇몇 실시형태에서, 위치 전용 셰이딩의 도움으로, 긴 컬 구간은 완전히 억제될 수 있고 병목현상은 기하학적 파이프로부터 픽셀 파이프로 이동하여 성능 향상을 제공한다.
ㆍ GPU 내부의 자원은 중요한 작업의 계산을 더 빨리 완료할 수 있도록 컬 파이프를 통해 사용될 수 있다.
ㆍ 또한, 몇몇 실시형태에서 위치 전용 셰이딩 아키텍처는 에너지를 절약할 수 있다. 즉, 컬링된 삼각형에 대해 더 적은 동적 명령어를 실행하고 더 적은 속성을 인출함으로써 에너지 절약이 획득된다.
ㆍ 위치 전용 셰이딩은 더 높은 볼륨의 제품에 더 많은 확장성을 제공할 수 있다. 즉, 지오메트리 파이프에서 픽셀 파이프로 병목현상을 이동시킴으로써, 아키텍처 요구 사항에 맞도록 픽셀을 증가시키고 처리량을 계산하여 확장성 문제를 해결할 수 있다.
도 1은 애플리케이션 프로그램 인터페이스(API) 및 프로그래밍 모델과 일치하는 베이스라인 아키텍처의 개략적 도면이고, 도 2는 일 실시형태에 따른 베이스 라인 GPU의 더 상세한 마이크로 아키텍처를 나타낸다. GPU는 언슬라이스(Unslice), 슬라이스(Slice) 및 언코어(Uncore)의 세 부분으로 구성된 통합형 셰이더 모델이다.
일반적으로, 3D 장면은 삼각형의 정점들이 객체의 모양을 정의하는 삼각 표면의 컬렉션으로 시작한다. 이러한 입력 정점 리스트는 메모리(14)로부터 정점들에 관련된 속성을 차례로 인출하는 정점 인출(VF) 유닛(12)에 공급된다. 정점 셰이더(VS) 유닛(16)에서, 정점들의 인출된 속성은 프로그램 가능한 셰이더를 사용하여 변환된다. 이 프로그램 가능한 셰이더는 정점을 화면 상에 매핑하고 속성에 대한 수학적 연산을 수행하여 3D 환경의 객체에 특수 효과를 추가하는 서브 루틴으로 생각될 수 있다. 이 셰이더는, (위치, 컬러, 텍스처 좌표 등등과 같은) 정점 속성이 변환되고 계산된 값이 후속 파이프 스테이지에 의한 참조용으로 로컬 메모리에 저장되는 실행 유닛(EU)으로 언급되는 스레드 프로세서에 디스패치된다.
VS 유닛의 출력은, 헐 셰이더(17), 테셀레이션(tessellation)(18), 도메인 셰이더(19), 및 적용 가능한 경우 지오메트리 셰이더(20)인 다음 파이프라인 스테이지로 진행하거나, 삼각형이 생성되는 프리미티브 어셈블리 유닛(22)으로 전송된다. 삼각형의 생성 후, 뷰포트 절두체 폐기(viewport frustum discards)(23)에서 결정되는 뷰포트 절두체 외부에 있는 삼각형이 폐기되는 클리핑 스테이지(clipping stage)(24)가 나온다. 한편, 뷰포트 절두체의 평면 내에 있는 삼각형은 수용되고 후속 파이프 스테이지로 전송된다. 또한, 클리핑 스테이지는 뷰 절두체의 평면과 교차하는 삼각형을 클리핑할 수 있다.
뷰포트 절두체 폐기(23)에서 잔존하는 삼각형은 그 삼각형이 최종 이미지의 일부가 될 것인지 여부를 확인하기 위해 단순 컬 스테이지(26)에 의해 다시 검사되고, 이 테스트에서 실패한 객체는 버려진다. 예컨대, 후면 배향(back facing), 퇴화(degenerate), 제로 영역(zero area) 등의 삼각형은 이 스테이지에서 폐기된다. 몇몇 애플리케이션의 경우, 삼각형의 약 80 % 이상이 뷰포트 절두체 또는 단순 컬 스테이지에 의해 폐기된다. 마지막으로, 통과하는 삼각형은 설정 및 래스터화 유닛(28 및 30)으로 전송된다.
베이스라인 아키텍처의 제 2 부분은, 래스터화(30), 깊이(32), 셰이딩 및 텍스처(33), 및 컬러 클러스터(34)를 포함하는 픽셀 파이프이다. 픽셀 파이프는 지오메트리 파이프에 의해 전송된 삼각형의 안쪽이나 가장자리에 위치하는 모든 픽셀의 위치를 결정하는 래스터화 유닛(30)으로 시작한다. 또한, 래스터화 유닛(30)은 삼각형을 깊이 테스트를 위해 깊이(Z) 파이프(32)로 전송되는 대칭적 픽셀 블록으로 분할한다. 3D 장면의 다수의 객체가 동일한 위치에 매핑될 수 있기 때문에, 깊이 파이프는 블록에 임베딩된 픽셀이 관찰자에 가장 가까운지 또는 다른 객체에 속한 이전에 관찰된 픽셀에 의해 숨겨지는지 여부를 결정한다. 깊이 테스트를 통과하는 픽셀은 그 컬러 및 그와 관련된 다른 속성을 결정하기 위해 셰이딩된다(셰이딩 및 텍스처(33)). 마지막으로, 픽셀의 계산된 값은, 그 계산된 값을 이전에 알려진 상태와 선택적으로 블랜딩하거나 프레임 버퍼를 업데이트하기 위해 그들을 전송할 수 있는 컬러 파이프(34)로 전송된다.
도 2에 도시된 바와 같이, VF 스테이지로부터 단순 컬 스테이지까지의 지오메트리 파이프라인(36)은 아키텍처(40)의 언슬라이스(Unslice) 부분(38)에 존재한다. 지오메트리 파이프로부터 방출되는 프로그램 가능한 셰이더는 글로벌 스레드 디스패치(42)를 통해 스레드 프로세서에 디스패치되고, 계산된 값은 로컬 메모리 (44)에 기록된다. 지오메트리 파이프로부터 통과하는 삼각형은 슬라이스(Slices)(46)로 운송되는데, 여기에서 이들은 래스터화 워크(walk)를 통해 대칭적 픽셀 블록으로 분할된다. 픽셀 블록은, 블록이 슬라이스에서 렌더링될 것인지 여부를 결정하기 위해 픽셀 해싱 메커니즘(48)을 통해 해싱된다. 해싱 메커니즘은 로드 밸런스(load-balance)뿐만 아니라 픽셀 일관성의 유지를 담당한다.
전술한 바와 같이, 3D 장면 내의 다수의 삼각형은 중첩될 수 있고, 주어진 스크린 좌표에서의 픽셀 블록을 로컬 스레드 디스패치(local thread dispatch)(53)를 통해 동일한 계산 클러스터(50) 및 동일한 슬라이스로 전송하는 것은 해싱 메커니즘에 의존한다. 이것은 픽셀의 깊이 및 컬러 일관성을 유지하기 위해 수행된다. 또한, 아키텍처의 슬라이스 부분은 픽셀 파이프(52) 및 계산 클러스터(50)라는 2 개의 기능 블록으로 분할될 수 있다. 전술한 바와 같이, 픽셀 파이프는 래스터 화, 깊이 및 컬러 클러스터를 포함하고, 계산 클러스터는 프로그램 가능한 셰이더를 실행하는 데 사용되는 실행 유닛(EU)(54)의 어레이를 포함한다. 각각의 EU는 상이한 SIMD(Single Instruction Multiple Data) 폭, 즉, 일 실시형태에서 8, 16 또는 32를 갖는 다중 스레드 컨텍스트를 지원할 수 있다. 내부적으로, EU는 쿼드 펌프되는(quad-pumped) 두 개의 파이프를 갖는다. 각 파이프는 4 스트림 SIMD 프로세서를 가지며 부동 소수점 및 스칼라 명령어를 모두 실행할 수 있다. 각각의 계산 클러스터는 또한 공유 텍스처 샘플링 유닛(56), 및 기록을 분산시키고 판독을 수집할 수 있는 로드/저장 유닛(58)을 갖는다. 또한, 공유 기능은 도 2에 도시된 바와 같이 통합된 L2 캐시(60)에 의해 백업된 그들 자신의 개인 캐시를 갖는다. 마지막으로, 유사한 아키텍처 제너레이션(generation)은 전화/태블릿 솔루션에서 하이엔드(high-end) 게임 컴퓨터에 이르는 다양한 마켓 세그먼트를 만족시키려고 한다. 따라서, 동일한 아키텍처 제너레이션에는 상이한 수의 계산 클러스터 및 슬라이스를 갖는 제품이 있을 수 있다.
언코어(Uncore)(62)는 캐시/메모리 인터페이스(61), 최종 레벨 캐시(LLC)(64) 및 메모리(66)를 포함한다. 슬라이스와 마찬가지로, 언코어 구성 또한 마켓 세그먼트에 의존한다. 예컨대, 하이엔드 구성은 임베디드-DRAM(eDRAM) (68)과 함께 최종 레벨 캐시를 가질 수 있는 반면, 전화/태블릿을 위한 구성은 메모리 제어기 및 시스템 메모리를 가질 수 있다.
앞서 논의한 것처럼, 현대의 GPU 아키텍처는 정점의 모든 속성을 인출하고 셰이딩한다. 그러나 대부분의 정점은 뷰포트 절두체 또는 단순 컬 폐기를 통해 거부된다. 여기서의 목표는 폐기 사례에 대한 작업량을 줄이는 것, 즉, 삼각형이 드롭될 것인지 여부를 결정하는 데 필요한 속성만 인출하고 셰이딩하는 것이다. 삼각형이 컬링되는지 여부를 결정하기 위해서는 위치만이 필요하기 때문에, GPU는 나머지 속성보다 위치의 셰이딩에 우선순위를 부여해야 한다.
일반적으로, 셰이딩 속성에는 위치, 법선, 컬러 및 텍스처 좌표가 예로서 포함된다. 몇몇 실시형태에서, 위치 전용 셰이딩이 구현되는 경우, 모든 속성을 판독하고 나서 위치 속성을 선택하는 것이 아니라, 메모리로부터 위치 속성을 판독하는 것만이 필요하다. 이는 몇몇 실시형태에서 시간, 연산 사이클 및 메모리 대역폭을 절약한다. 따라서, 몇몇 실시형태에서, 정점 인출 동안, 컬링 파이프에 의해 위치 속성들만이 인출된다.
현대의 GPU 아키텍처는 폐기된 삼각형에 대한 추가 명령어를 실행하고 있다. 동적 명령어와 마찬가지로, 현대의 GPU 아키텍처는 컬링된 정점에 대한 다수의 불필요한 및/또는 소모적 속성을 인출하고 있다. GPU는 나머지 정점 속성보다 위치의 셰이딩에 우선순위를 부여해야 한다.
첫 번째 단계는 위치 속성을 계산하기 위해 정점 셰이더에 임베딩된 중요한 명령어에 우선순위를 부여하고 가능한 한 빨리 GPU 파이프라인에서 이들을 실행하는 것이다. 먼저 GPU의 지터/드라이버 콤보가 중요한 명령어를 식별하고, 두 번째로 지오메트리 스테이지의 하드웨어 파이프라인이 그 파이프 내에서 이러한 명령어를 먼저 실행하도록 조정된다. 이러한 중요한 명령어는 위치 셰이더로 불린다. 위치 셰이더는 폐기된 정점에 대해 더 적은 속성을 인출하고 더 적은 수의 명령어를 실행하는 데 사용된다.
또 다른 문제점은, 폐기된 삼각형 시퀀스가 버스트의 크기가 10,000개 초과의 삼각형이 될 수 있는 버스트 특성을 갖는다는 점이다. 이런 상태의 의미는, 오랜 기간 동안, 픽셀 파이프가 유휴 상태일 동안 지오메트리 파이프는 삼각형을 거부하느라 바쁠 것이라는 것이다. 또한, 동적 명령어의 측면에서 정점 셰이더의 복잡성은 픽셀 셰이더보다 상당히 적고, 장기간의 컬 시퀀스에 대한 계산 클러스터 역시 부족할 것이다. 몇몇 실시형태에서 이러한 장기간의 폐기 시퀀스를 완전히 숨김으로써 시스템의 효능을 개선시킬 수 있다.
위치 셰이더의 계산은 컬 시퀀스를 효과적으로 숨길 수 있도록 시간적으로 더 분리된다. 메커니즘은 위치 셰이더를 "사전 실행"하고 주 애플리케이션을 대신하여 대기시간을 효과적으로 소비하여 장기간의 컬링된 시퀀스가 생략될 수 있게 한다. 요약하면, 몇몇 실시형태에서 위치 전용 셰이더는 성능 향상을 실현할 수 있을 뿐만 아니라, 폐기된 정점에 대한 작업량을 줄임으로써 전력을 절약한다.
폐기된 객체에 대한 위치 속성만 인출 및 셰이딩하면 시스템의 에너지 풋프린트가 줄어든다. 낭비되는 작업을 생략하면 픽셀 파이프 및 계산 클러스터를 사용 상태로 유지함으로써 시스템의 효율이 향상된다.
도 3은 두 개의 지오메트리 파이프, 즉, 컬 파이프(Cull Pipe)(70) 및 재생 파이프(Replay Pipe)(72)를 갖는 아키텍처의 개략적 블록도를 도시한다. 두 파이프는 동일한 애플리케이션의 상이한 인스턴스를 실행하는데, 각각의 인스턴스는 완전히 다른 드로 콜(draw call)에 대해 작용할 수 있다. 컬 파이프의 역할은 삼각형이 거부되는지 여부에 관계없이 삼각형의 가시성 정보를 계산하는 것이다. 이 정보는 가시성 기록 FIFO(First In First Out)(74)에 저장되고, 다음에 폐기된 삼각형을 생략하기 위해 재생 파이프에 의해 소비된다. 또한, 컬 파이프는 단지 위치 속성을 인출 및 셰이딩하는 것에 의해 중요한 정보를 더 빠르게 생성한다. 이런 식으로 두 파이프가 함께 작업하여 컬링된 삼각형 시퀀스에 필요한 작업량을 줄이고 그들을 효율적으로 생략한다.
도 3에 도시된 것처럼, 컬 파이프는 재생 파이프와 비교할 때 얕고 더 빈약하다. 이것은 위치 속성을 셰이딩하기 위한 위치 전용 VF-VS 스테이지(76)를 가지며, 그 뒤에 프리미티브 어셈블리(77), 뷰포트 절두체 폐기 스테이지(78) 및 단순 컬 스테이지(80)를 갖는다. 즉, 컬링 파이프의 명령어 세트는 위치 속성을 계산하는 데 필요한 명령어만을 포함하며 다른 셰이더 속성을 계산하기 위한 명령어를 갖지 않는다. 이 얕은 파이프 라인은 드로 콜의 각 삼각형에 대한 가시성 정보를 계산하고 이 정보를 가시성 기록 FIFO 내에 시간순으로 기록한다. 기록된 정보는 비트 단위 시퀀스(bitwise sequence)로서 유지되는데, 예컨대 몇몇 실시형태에서는 탈락하는 삼각형에 대해 0을 사용하고 통과하는 삼각형에 대해 1을 사용하여, 소량의 저장 영역을 사용한다. 컬 파이프는 재생 파이프가 가시성 정보 부족을 겪지 않도록 적어도 하나의 드로 콜을 미리 실행할 수 있다. 일반적으로, 3D 프레임은 주어진 렌더링 타겟(들)에서 작용하는 다양한 렌더링 단계로 구성된다. 프레임은 최종 프레임 버퍼를 생성하기 위해 렌더 타겟에 기록된 중간 정보가 함께 블랜딩되는 합성 단계에서 끝난다. 각 렌더 단계는 임의 개수의 드로 콜을 가지는데, 이것은 실제로는 객체의 모양을 정의하는 삼각 표면의 컬렉션이다. 컬 파이프는 드로 콜에 대한 픽셀의 렌더링뿐만 아니라 래스터화를 피하므로, 미리 실행하고 적시에 가시성 정보를 계산할 수 있다. 그러나, 드로 콜에 대한 정보가 사용될 수 없는 경우, 재생 파이프는 정지될 수 있다. 마찬가지로, 가시성 기록 FIFO에 여유 공간이 없다면, 컬 파이프는 정지될 수 있다.
테셀레이션 및 지오메트리 셰이더와 같은 중요한 파이프 스테이지 중 일부는 몇몇 실시형태에서 컬 파이프에서 빠져 있다. 테셀레이션, 지오메트리 셰이더 또는 둘 다를 필요로 하는 드로 콜에 어떤 일이 일어나는지 묻는 것은 당연하다. 컬 파이프는 이러한 상태가 활성화된 드로 콜을 생략하고, 다음에 재생 파이프는 이들을 정규적인 방식으로 처리한다. 즉, 재생 파이프는 이러한 드로 콜에 대한 가시성 기록을 기대하지 않을 것이다. 이를 달성하기 위해, 드라이버는 드로 콜 커맨드 내에 비트를 설정하는데, 즉, 그 커맨드가 컬 파이프의 도메인에 들어오는지 여부를 결정한다. 마찬가지로, 정점 전용 드로 콜이 이전 드로 콜의 픽셀 셰이더를 통해 계산되는 정보를 필요로 하는 상황이 있을 수 있다. 이것은 애플리케이션에서는 거의 발생하지 않지만, 드라이버는 여전히 이러한 종류의 드로 콜이 컬 파이프를 통해 처리되지 않을 것임을 나타내는 비트를 설정한다. 다른 모든 경우에 재생 파이프는 가시적 삼각형에서만 작용하고 이들에 대해 폐기 로직은 필요하지 않기 때문에, 재생 파이프는 그 파이프 라인에 폐기 로직(23)을 계속 가지고 있을 이유가 없다.
마지막으로, 일 실시형태에서는 컬 파이프에 존재하는 정규 클리핑 스테이지가 없으므로, 뷰 절두체 평면과 교차하는 삼각형은 통과되는 것으로 취급되며(즉, 이들은 컬링 파이프에서 가시적인 것으로 표시될 수 있음), 다음에 재생 파이프는 모든 프리미티브 클리핑을 처리한다.
앞서 설명한 바와 같이, 가시성 FIFO는 드로 콜의 모든 삼각형에 대해 비트 단위 시퀀스로 정보를 기록할 수 있다. 즉, 탈락하는 삼각형에 대해서는 0, 통과하는 삼각형에 대해서는 1이다. FIFO에 존재하는 이 정보는 컬 파이프를 통해 생성되며, 폐기된 삼각형을 생략하기 위해 재생 파이프에 의해 소비된다. 따라서 FIFO의 크기는 컬 파이프가 얼마나 미리 작동할 수 있는지를 제어하며, 따라서 아키텍처의 성능에 영향을 줄 수 있다.
가시성 FIFO는 몇몇 실시형태에서 최적의 성능을 제공할 수 있는 정점 정보의 256K 바이트 분량을 기록할 수 있다. 이 정보는 두 가지 시나리오에 의해 한정 될 수 있으며 아래에서 자세히 설명된다.
ㆍ 스트립 케이스(Strip Case): 각 정점이 삼각형일 경우 256K/(8 x 1024) => 32KB가 필요하다.
ㆍ 리스트 케이스(List Case): 세 개의 정점이 삼각형을 만들 때: 256K/(3 x 8 x 1024) => ~ 11KB
몇몇 경우에서, 드로 콜 드라이버는 가시성 기록을 활성화거나 비활성화하도록 선택할 수 있다. 예컨대, 드로 콜에 몇 개의 정점만 존재할 경우, 가시성 기록과 관련된 오버헤드는, 시간, 메모리 대역폭 및 계산 주기와 관련된 가시성 기록 비용을 정당화할 수 없다. 특정 드로 콜에 대해 가시성 기록이 비활성화되는 다른 예에는 드로 콜의 모든 정점이 가시적인 것으로 알려지는 경우 및 라인이 포함된다.
로컬 메모리는 픽셀 렌더링을 위한 픽셀 파이프 및 지오메트리 파이프의 폐기 로직 모두에 의해 참조되는 정점의 셰이딩된 속성을 기록하는 데 사용된다. 정점은 위치, 법선, 컬러, 텍스처 좌표 등과 같은 임의 개수의 속성을 가질 수 있다. 이러한 속성은 정점 셰이더의 도움으로 셰이딩되며, 그 결과는 나중에 참조할 수 있도록 로컬 메모리에 기록된다. 기록된 정보는 그것이 더 이상 필요하지 않을 때마다, 예컨대, 컬링 로직에 의해 삼각형이 폐기되거나 주어진 삼각형에 대한 모든 픽셀이 렌더링될 때, 참조해제된다(dereferenced). 이 로컬 메모리는, 정점에 할당되고 필요하지 않은 경우 최종적으로 풀(pool)로 반환되는 레지스터의 빈 목록일 수 있다.
컬 파이프의 경우, 로컬 메모리는 정점의 위치 계산에 필요한 속성을 기록한다. 또한, 모든 삼각형이 컬 파이프의 끝에서 드롭되므로 기본 모델과 비교할 때 이러한 로컬 메모리 레지스터의 수명은 짧다. 그러나, 로컬 메모리의 용량은 여전히 아키텍처의 성능에 영향을 줄 수 있다. 이상적인 용량은 위치 셰이더의 실행 대기시간의 함수인데, 이것은 위치 셰이더 내에 존재하는 동적 명령어의 수에 따라 달라질 뿐만 아니라 픽셀 셰이더 및 재생 파이프로부터 방출되는 셰이더와 같은 다른 자원에 의한 계산 클러스터에 대한 요구에 따라 달라진다. 따라서, 컬 파이프의 크기가 적절하지 않으면, 이는 컬 파이프의 전방 진행을 방해할 수 있고, 따라서 전체 성능을 저해할 수 있다.
몇몇 실시형태에서 컬 파이프는 적절하게 스트리밍하기 위해 64KB 상당의 로컬 메모리를 사용할 수 있다.
이 아키텍처는 폐기된 객체에 대한 위치 속성만을 인출 및 셰이딩하고, 다음에 장기간의 컬 시퀀스를 생략함으로써 그들을 무시할 수 있다. 첫 번째 측면은 작업량을 줄이고 두 번째 측면은 프레임을 렌더링하는 데 소요되는 시간을 줄이므로, 시스템의 에너지 풋프린트를 줄이는 데 도움이 된다.
또한, 몇몇 실시형태에서, 위치 전용 셰이딩은 비활성화될 수 있다. 예컨대, 드로 콜은 위치 전용 셰이딩이 사용되지 않을 것임을 나타낼 수 있다. 이것은 메모리 대역폭, 계산주기 및/또는 시간을 절약할 수 있다. 따라서, 시스템은 예컨대 드로 콜 단위로 위치 전용 쉐이딩을 선택적으로 비활성화하고 활성화할 수 있다.
위치 전용 셰이딩이 비활성화된 경우, 재생 파이프 라인은 그 드로 콜에 대한 비트 단위 정보를 찾지 않으며, 그 드로 콜 전체에 대해 가시성 정보는 존재하지 않는다.
컬링 기술은 그래픽 프로세서의 성능을 향상시킬 수 있다. 표준 기술에는 후면 컬링, 뷰 절두체 컬링, Zmax 차폐 컬링(occlusion culling), 및 차폐 쿼리가 포함된다. 일반적으로, 컬링 기술은, 예컨대, 시야 밖으로 완전히 벗어나는 삼각형(그래픽에서는 뷰 절두체라고도 함)을 폐기함으로써, 이미지를 렌더링하기 위해 행해지는 불필요한 작업량을 감소시킨다. 데이터가 파이프 라인에서 더 일찍 폐기될 수 있고 비용이 절감될 수 있기 때문에, 컬링 테스트는 그래픽 파이프 라인에서 일찍 수행될수록 더 좋다. Zmax 차폐 컬링은 위치 전용 쉐이딩(POS) 파이프 라인을 사용하여 더 일찍 수행 될 수 있다.
보존적(conservative) 깊이 표현은 컬 파이프에 타일(일 실시형태에서 픽셀의 직사각형 영역을 나타낼 수 있음) 단위로 기록된다. 그 다음, 컬 파이프를 통과하는 모든 삼각형에 대해, 보존적 깊이 표현과 관련하여 삼각형이 완전히 차폐되는지 여부가 테스트될 수 있다. 삼각형이 차폐되면 그것은 컬링될 것이고, 재생 파이프까지 잔존하지 못할 것이다. 이는 몇몇 작업 부하에서 절전 및/또는 성능 향상을 제공한다.
차폐 컬링을 수행하기 위해, 그래픽 프로세서는 몇몇 종류의 차폐 표현을 가질 필요가 있다. 이 정보는 픽셀 당 깊이가 될 수 있지만, 저장 비용을 줄이기 위해 더 개략적이고 보존적인 표현이 더 적합할 수 있다. 한 표현 유형은 타일 당 최대 깊이(Zmax) 및 최소 깊이(Zmin) 스칼라 값을 저장하는 것이다. Zmax는 타일의 최대 깊이보다 크거나 같고 Zmin은 타일의 최소 깊이보다 작거나 같다. 따라서, 예컨대 삼각형이 단일 타일 내에 완전하게 존재하고 삼각형의 깊이가 타일의 Zmax보다 클 경우, 이미 렌더링된 지오메트리에 의해 그 삼각형이 차폐되고 따라서 그 삼각형은 안전하게 컬링될 수 있다. Zmin은 깊이 테스트가 역전될 때 유용하다(예컨대, OpenGL 깊이 함수: GREATER 또는 GEQUAL). 각 타일은 깊이 표현을 가질 수 있으며, 이 깊이 표현을 구현하는 한 가지 방식은 위에서 설명한 것처럼 Zmin 및 Zmax를 사용하는 것이다.
도 4는 역시 차폐 컬링(84)을 포함하는 수정된 POS 파이프라인(82)이다. 단순 컬(후면, 퇴화 및 제로 커버리지) 테스트 및 뷰 절두체 컬링(86) 기술은 일반적으로 차폐 컬링보다 더 많은 삼각형을 컬링하기 때문에, 차폐 컬링(84)은 뷰 절두체 및 단순 컬링 테스트(86) 이후에 배치된다. 따라서, (뷰 절두체 컬링 및 단순 컬링 이후에) 잔존하는 삼각형에 대해, 타일의 깊이 표현에 대한 삼각형 차폐 테스트가 수행된다. 삼각형이 차폐되면 재생 파이프에서 처리되지 않을 것이다. 삼각형이 완전히 차폐되지 않으면, 삼각형은 타일의 깊이 표현을 잠재적으로 업데이트 할 수 있는 차폐 정보를 생성할 수 있다. (위치 전용 셰이더(82) 위에서 삼각형들에 의해 표시되는) 입력 삼각형들 중 몇몇은 블록(90) 아래의 삼각형들 위에 X로 표시된 것처럼 컬링될 수 있다.
차폐 알고리즘은 한 번에 하나의 타일에서 작동할 수 있다. 컬 파이프는 삼각형에 의해 중첩된 모든 타일을 식별하는 코어스 래스터라이저(rasterizer)를 포함할 수 있다. 또한, 래스터라이저는 각 타일 내부의 삼각형의 최소 및 최대 깊이 값의 보존적 경계를 계산할 수 있다. 이러한 경계를
Figure 112017017833880-pct00001
라고 한다. 일단 타일이 삼각형과 중첩되는 것으로 식별되면, 그 타일은 차폐 컬링 알고리즘 중 하나로 전달된다.
이 구현에서, 단일
Figure 112017017833880-pct00002
쌍은 타일 단위로 저장된다. 몇몇 실시형태에서, 8×8 픽셀 타일은 컬링 효율과 대역폭 사이에 양호한 트레이드오프를 제공하지만, 타일은 임의의 모양 및 크기일 수 있다. 현대의 그래픽 프로세서에서 표준 HiZ 버퍼와 구별하기 위해, 화면상의 모든 타일에 대한
Figure 112017017833880-pct00003
값을 포함하는 버퍼는 초기 HiZ 버퍼 또는 eHiZ 버퍼(88)로 표시된다. 잔존하는 삼각형은 블록(90)에 표시된 것처럼 비트 단위로 저장된다. 그 다음, 재생 파이프에서, 전체 정점 셰이더는 잔존하는 삼각형에 대해 작용하고(블록 (92)), 다음에 파이프(94)의 나머지 부분이 이어지는데, 즉, 재생 파이프 라인은 이 텍스트에서 전술된 것처럼 동작한다.
알고리즘은 LESS 깊이 테스트와 관련하여 설명될 수 있지만, 테스트의 임의의 형태에 일반화된다. 알고리즘은 eHiZ 버퍼의 타일과 삼각형 간의 보존적 표준 컬링 테스트를 수행함으로써 시작되며, 따라서 삼각형은
Figure 112017017833880-pct00004
이면 타일에서 컬링될 수 있다. 따라서, 삼각형에 의해 중첩된 모든 타일이 위의 테스트를 충족하면(즉, 삼각형에 의해 중첩된 모든 타일에 대해 삼각형이 깊이 표현 뒤에 존재하면), 전체 삼각형이 컬링될 수 있다.
타일이 컬링되지 않으면, eHiZ 버퍼는 보존적으로 업데이트된다. 이 경우, Zmin은
Figure 112017017833880-pct00005
으로 업데이트된다. 타일이 완전히 덮여 있으면, Zmax 값만 업데이트될 수 있다. 이것은 래스터라이저에서 보존적 타일-삼각형 중첩 테스트를 사용하거나 타일의 모든 샘플에 대해 내부 테스트를 수행하여 결정될 수 있다. 타일이 삼각형에 의해 완전히 덮여 있으면, Zmax는
Figure 112017017833880-pct00006
로 업데이트된다.
확장으로서, Zmin/Zmax 표현은 Zcull로 불리는 단일 참조 값으로 축소될 수 있다. 이 경우, 컬링 테스트를 수행하는 데 필요한 참조 값(위의 LESS 테스트 예에서 Zmax)만 유지된다. 예컨대, LESS에서 GREATER 테스트로, 깊이 테스트 함수가 극성을 변경하면, Zcull 값은 테스트가 항상 보존적임을 보장하기 위해 느리게 클리어된다. 따라서 타일 당 하나의 비트가 저장되어 현재의 Zcull 값이 Zmin 또는 Zmax 값을 나타내는지를 표시한다.
차폐 컬링 알고리즘의 또 다른 가능한 구현은 Zmax-마스크 표현을 사용하는 것이다. 이 표현은 각각의 타일에 대한 하나의
Figure 112017017833880-pct00007
값 세트를 저장할 수 있다. 인덱스 비트의 마스크는
Figure 112017017833880-pct00008
값 중에서 타일의 각 픽셀 또는 샘플에 적용할 값을 선택한다. 보존적 깊이 테스트가 수행되고, 타일의 입력 삼각형이 컬링될 수 없는 경우
Figure 112017017833880-pct00009
Figure 112017017833880-pct00010
값을 사용하여 마스크된 깊이 표현을 업데이트한다. 그러나, 마스크된 표현은 일반적으로 최소값에 유용하지 않으므로, 이들은 인덱스 비트 마스크에 의해 처리되지 않고 일정 화면 공간 영역에 고정된다.
실제로, 타일 당 2 개의
Figure 112017017833880-pct00011
값은 일반적으로 저장 비용과 컬링 효율 간에 최상의 트레이드오프를 제공한다. 타일 단위로
Figure 112017017833880-pct00012
값을 유지하는 것은 몇몇 작업 부하에 유리할 수 있지만, 보통 일방적인 테스트만으로도 대부분의 컬링 가능성을 포착하기에 충분하다.
인덱스 비트의 마스크는 일반적으로 일관성이 있으며, 따라서 대부분의 경우 타일의 메모리 풋프린트를 줄이기 위해 압축될 수 있다. 임의의 비트 마스크 압축 알고리즘이 사용될 수 있지만, 하나의 알고리즘은 각 영역이 일정한지 여부를 나타내는 비트를 사용하여 각각 4x2 또는 2x4 영역을 저장하고, 일정한 영역의 경우 단일 비트를 사용하거나 또는 영역이 일정하지 않은 경우 8 비트를 사용하여 저장한다. 타일이 원하는 비트 버짓으로 압축 가능하지 않으면, 손실 압축이 사용될 수 있다. 일 구현에서,
Figure 112017017833880-pct00013
값은 항상 소팅되어
Figure 112017017833880-pct00014
을 보장한다. 따라서, 색인 마스크의 비트를 1에서 0으로 변경하는 것이 항상 안전하다(픽셀이나 샘플을 효과적으로 밀어내지만 여전히 보존적임). 원하는 비트 버짓이 충족될 수있는 경우, 최소 설정 비트 수를 갖는 4x2/2x4 영역이 선택될 수 있고, 전체 영역은 0으로 클리어된다. 다음에 흐름은, 비트 버짓이 충족될 때까지 두 번째 최소 설정 비트가 있는 영역으로 계속된다.
픽셀 셰이딩은 전체 그래픽 파이프 라인 중 가장 비싼 부분 중 하나이며, 실행 유닛(EU)(셰이더 코어라고도 칭함)의 부담을 줄이는 것은 성능을 향상시키고 더 중요하게는 전력 사용량을 또한 줄이기 때문에 매우 중요하다.
컬 파이프에서, 장면의 깊이 표현은 기록되고, 이 깊이 표현은 재생 파이프라인의 HiZ 버퍼를 프라이밍하는(prime) 데 사용된다. 이러한 방식으로, 몇몇 삼각형의 픽셀 셰이더 작업은 "미래로부터의" (다른) 삼각형의 깊이를 사용하여 컬링될 수 있다.
초기 HiZ 버퍼 또는 eHiZ(88)라고 불리는 깊이 표현은 도 5에 도시된 것과 같이 컬링 파이프에 기록된다. 이 표현을 위한 많은 상이한 선택들이 존재한다. 컬 파이프는 먼저 위치 전용 셰이더를 수행한 다음 표준 컬링 테스트를 수행한다. 잔존하는 삼각형에 대해 깊이 표현이 생성되어 가능하다면 eHiZ 버퍼로 업데이트를 전송한다. 대부분의 그래픽 프로세서에는 깊이에 따라 래스터화된 타일을 신속하게 컬링하는 HiZ 유닛이 존재한다. 이 파이프라인에서, HiZ 유닛(96)은 재생 파이프 내에 있다. 재생 파이프가 렌더 커맨드를 처리하기 전에, HiZ 버퍼는 eHiZ 버퍼(88)의 깊이 표현을 사용하여 프라이밍된다. 이 정보는 eHiZ 포맷으로부터 HiZ의 포맷으로 변환될 수 있지만, 이상적으로 유닛들은 호환가능한 포맷을 사용하므로 변환 단계는 생략된다. 프라이밍이 발생한 후, 컬링되지 않은 모든 삼각형은 재생 파이프라인에서 수정없이 처리되고, 컬링은 HiZ에서 이미 초기화된 정보를 기반으로 이루어진다.
도 4 및 도 5의 시퀀스는 소프트웨어, 펌웨어 및/또는 하드웨어로 구현될 수 있다. 소프트웨어 및 펌웨어 실시형태에서, 이들은 자기, 광학 또는 반도체 스토리지와 같은 하나 이상의 비일시적 컴퓨터 판독가능 매체에 저장된 컴퓨터 실행 명령어에 의해 구현될 수 있다.
HiZ 버퍼는 eHiZ 버퍼(렌더 타겟을 위한 임박한 렌더 커맨드 스트림의 전체 또는 적어도 일부를 사용하여 미리 생성됨)로 초기화되기 때문에, 차폐된 영역은 차폐하는 지오메트리가 차폐되는 지오메트리 이후에 제시되는 경우에도 컬링된다. 따라서, 몇몇 실시형태에서는 더 많은 픽셀 셰이더 작업이 회피되어, 전체 성능을 향상시킬 수 있다.
몇몇 실시형태에서, 픽셀 셰이더 명령어는 감소될 수 있고, 픽셀 셰이더 컬링은 컬링으로 인한 텍스처, 깊이 버퍼, 및 컬러 버퍼 대역폭을 더 감소시킬 수 있다.
이 픽셀 셰이더 차폐 컬링 알고리즘은 차폐 컬링에 대한 확장이기 때문에, 몇몇 실시형태에서는 동일한 eHiZ 데이터 레이아웃 및 컬링 알고리즘이 사용될 수 있다.
전체 샘플 단위 깊이 버퍼 표현은 eHiZ 버퍼로서 유지될 수 있다. Zmax 마스크는 컬링 효율과 대역폭 사이에서 최상의 트레이드오프를 제공할 수 있지만, 몇몇 실시형태에서는 샘플 단위 깊이 알고리즘이 사용될 수 있다.
샘플 단위 깊이는, 깊이 버퍼 값을 샘플 단위로 업데이트하는 전체 깊이 버퍼 로직을 컬링 파이프라인에 추가함으로써 구현된다. 그러나 중요한 차이점은, 픽셀 셰이더가 파이프라인에서 실행되지 않으므로, 비촉진 깊이(non-promoted depth)가 사용되면 eHiZ 버퍼에서 깊이 값이 업데이트되지 않는다는 것이다. 비촉진 깊이는 픽셀 셰이더가 실행되기 전에 깊이 테스트를 수행할 수 없는 경우이다. 이것은 예컨대 픽셀 셰이더가 샘플 당 깊이 값을 계산하는 경우가 될 수 있다. 이것은 eHiZ 버퍼의 값이 실제로 해당 샘플에 대해 예컨대 Zmin 또는 Zmax로 고정될 것임을 의미하며, 비가시적 지오메트리의 잘못된 컬링은 회피될 수 있다. 이것은 EQUAL 깊이 테스트가 비촉진 깊이와 함께 사용될 때 나타난다.
예컨대, 픽셀 셰이더 폐기에 의해 첫 번째 단계에서 나뭇잎이 렌더링된다고 가정하자. 픽셀 셰이더는 조각들을 폐기하므로, 비촉진 깊이 및 eHiZ 버퍼를 업데이트할 수 없다는 것이 예측될 수 있다. 그러나, 후속 단계가 EQUAL 테스트를 사용하여 조명을 렌더링하면, eHiZ 버퍼가 이전 단계에서 업데이트되지 않았기 때문에 정확한 동일성 테스트는 수행될 수 없다. eHiZ 샘플의 깊이 값이 Zmin 또는 Zmax를 따라가고 z ≤Zmax 또는 z ≥Zmin으로 보존적 EQUAL 테스트를 정의하는 경우, eHiZ 버퍼에 저장된 값에 따라, 정확한 동일성 테스트를 수행할 수 없음을 완화할 수 있다. 샘플의 깊이 값이 Zmin 또는 Zmax를 따라가는지 여부는 업데이트에 사용된 깊이 함수의 방향에 따라 다르다. 예컨대, LESS 함수는 샘플의 깊이가 Z_max 값을 나타낼 것임을 의미한다.
HiZ 버퍼를 프라이밍하는 것은 제시된 모든 렌더 커맨드의 출력(또는 결과)이 영향을 받지 않는 경우에만 가능하다. 몇몇 실시형태에서 가장 주목할만한 가정은, Z 버퍼의 값이 단조 증가 또는 감소해야 한다는 것이다. 그렇지 않으면, Z 버퍼의 최종 상태는 컬링에 전형적이지 않다. 또한, 픽셀 셰이더를 실행하는 부작용이 존재하지 않는다고 가정한다. 이것은 비정렬 액세스 뷰(unordered access view: UAV) 액세스, 픽셀 셰이더로부터의 깊이 출력, 픽셀 셰이더 폐기, 및 스텐실 작업을 포함한다. 다음은 일 구현에서 조건의 목록과 조건이 어떻게 처리되는지를 나타낸다.
1. 깊이 테스트 플립(depth test flip): 일 실시형태에서, 깊이 함수가 역전되면(LESS→GREATER 또는 GREATER→LESS) HiZ 버퍼는 프라이밍되지 않는다. 이것은 플립된 깊이 테스트가 실제로 깊이 기록을 활성화시킨 경우에만 해당된다.
2. 픽셀 셰이더 폐기/알파 테스트: 이런 경우, 컬링 파이프라인의 커버리지/깊이의 완전한 평가가 가능하지 않기 때문에 eHiZ 버퍼가 업데이트되지 않는다. 그러나 기존 지오메트리에 대해 컬링할 수 있으며, 양면 eHiZ 포맷이 사용되면 보존적으로 경계를 업데이트할 수 있다. 예컨대, LESS 테스트가 사용되는 경우, Zmax가 아니라 Zmin이 업데이트될 수 있다.
3. 알파 블렌딩: 알파 블렌딩이 활성화된 경우, 프라이밍이 알파 블렌딩 작업에 포함된 지오메트리를 잘못 컬링할 수 있으므로 eHiZ 버퍼는 업데이트되지 않는다. 그러나 알파 블렌딩된 지오메트리는 eHiZ 버퍼의 컨텐츠에 대해 컬링될 수 있다.
4. 픽셀 셰이더 기록 깊이: 보존적 깊이 출력이 사용되면, (보존적 깊이가 깊이 함수와 동일한 "방향"을 가지는지 여부에 의존하여) eHiZ 버퍼는 업데이트되거나 프리미티브에 대해 컬링이 수행될 수 있다. 그러나, 일반적인 경우, 컬링도 eHiZ 버퍼의 업데이트도 수행되지 않을 수 있다.
5. 다중 클리어: 다중 클리어 또는 Z 버퍼 재사용은, 프라이밍을 비활성화하거나 버퍼가 클리어되기 전에 각 클리어 사이에 발행된 커맨드를 재생 파이프라인이 강제로 실행하도록 함으로써 처리될 수 있다. 이 솔루션과 관련된 파이프라인의 정지는 Z 버퍼의 가상 복사본을 생성함으로써 해결될 수 있다.
6. 버퍼 스위칭: 깊이 버퍼를 클리어하지 않고 컬러 버퍼 또는 임의의 다른 출력 버퍼를 교체하면, 재생 파이프라인의 모든 명령이 재개(continuing) 전에 실행되거나 프라이밍이 비활성화 될 수 있다.
7. 픽셀 셰이더 UAV: 픽셀 셰이더가 UAV에 기록하는 경우, UAV 기록을 잘못 컬링할 수도 있으므로 프라이밍은 사용되지 않는다.
도 6은 실시형태에 따른 데이터 처리 시스템(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)에 결합된다.
도 7은, 하나 이상의 프로세서 코어(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) 집적 회로로서 구현될 수 있다.
도 8은, 개별 그래픽 처리 유닛이거나 복수의 처리 코어가 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(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)은 스레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 일 실시형태에서, 서브시스템은 또한, 스레드들 사이에서 데이터를 공유하고 출력 데이터를 저장하기 위해, 레지스터 및 어드레스가능 메모리를 포함하는 공유형 메모리를 포함한다.
도 9는 그래픽 프로세서에 대한 그래픽 처리 엔진(410)의 실시형태의 블록도이다. 일 실시형태에서, 그래픽 처리 엔진(GPE)(410)은 도 8에 도시된 GPE(310)의 한 형태이다. GPE(410)는 3D 파이프라인(412) 및 미디어 파이프라인(416)을 포함하는데, 이들 각각은 도 8의 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)의 서브시스템들의 각각과 결합되는 데이터 분배 상호접속을 통해 메시지를 교환함으로써 데이터 포트와 통신한다.
도 10은 그래픽 프로세서의 다른 실시형태의 블록도이다. 일 실시형태에서, 그래픽 프로세서는 링 상호접속(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)의 세트를 공유한다. 일 실시형태에서, 공유형 자원은 공유형 캐시 메모리 및 픽셀 동작 로직을 포함한다. 그래픽 프로세서의 다양한 실시형태에는 다른 공유형 자원이 또한 포함될 수 있다.
도 11은 그래픽 처리 엔진의 일 실시형태에 사용된 처리 요소의 어레이를 포함하는 스레드 실행 로직(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)를 포함한다. 예컨대, 지오메트리 파이프라인(예컨대, 도 10의 536)은 정점 처리, 테셀레이션(tessellation) 또는 지오메트리 처리 스레드를 스레드 실행 로직(600)에 디스패치한다. 스레드 디스패처(604)는 또한 실행 셰이더 프로그램으로부터의 런타임 스레드 생성 요청을 처리할 수 있다.
일단 기하학적 객체 그룹이 처리되어 픽셀 데이터로 래스터화되면, 픽셀 셰이더(602)가 호출되어 출력 정보를 추가로 계산하고 출력 표면(예컨대, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼, 등등)에 결과를 기록하게 한다. 일 실시형태에서, 픽셀 셰이더(602)는 래스터화된 객체에 걸쳐 보간되어야 할 다양한 정점 속성의 값을 계산한다. 다음에 픽셀 셰이더(602)는 API 제공 픽셀 셰이더 프로그램을 실행한다. 픽셀 셰이더 프로그램을 실행하기 위해, 픽셀 셰이더(602)는 스레드 디스패처 (604)를 통해 실행 유닛(예컨대, 608A)에 스레드를 디스패치한다. 픽셀 셰이더 (602)는 샘플러(610)의 텍스처 샘플링 로직을 사용하여 메모리에 저장된 텍스처 맵의 텍스처 데이터에 액세스한다. 텍스처 데이터 및 입력 지오메트리 데이터에 대한 산술 연산은 각각의 기하학적 조각에 대한 픽셀 컬러 데이터를 계산하거나 추가 처리에서 하나 이상의 픽셀을 폐기한다.
일 실시형태에서, 데이터 포트(614)는, 스레드 실행 로직(600)이 처리된 데이터를 그래픽 프로세서 출력 파이프라인 상에서의 처리를 위해 메모리에 출력하는 메모리 액세스 메커니즘을 제공한다. 일 실시형태에서, 데이터 포트(614)는 데이터 포트를 통한 메모리 액세스를 위해 데이터를 캐싱하기 위해 하나 이상의 캐시 메모리(예컨대, 데이터 캐시(612))를 포함하거나 그에 결합된다.
도 12는 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷을 나타내는 블록도이다. 일 실시형태에서, 그래픽 프로세서 실행 유닛은 다수의 포맷으로 명령어들을 갖는 명령어 세트를 지원한다. 실선으로 표시된 박스는 일반적으로 실행 단위 명령어에 포함되는 구성요소를 도시하지만, 점선은 선택 사항이거나 명령어의 서브 세트에만 포함되는 구성요소를 포함한다. 설명되고 도시된 명령어 포맷은, 명령어가 처리될 때 명령어 디코드로부터 초래되는 마이크로 연산이 아니라, 실행 유닛에 공급되는 명령인 매크로 명령어이다.
일 실시형태에서, 그래픽 프로세서 실행 유닛은 기본적으로 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)를 포함한다. 벡터 수학 그룹은 벡터 피연산자에 대해 내적 계산과 같은 산술 연산을 수행한다.
도 13은 그래픽 파이프라인(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도 지원될 것이다.
도 14a는 실시형태에 따른 그래픽 프로세서 커맨드 포맷을 도시하는는 블록도이고, 도 14b는 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스를 도시하는 블록도이다. 도 14a에 실선으로 도시된 박스는 그래픽 커맨드에 일반적으로 포함되는 구성요소를 도시하고, 점선은 선택적이거나 그래픽 커맨드의 서브 세트에만 포함되는 구성요소를 포함한다. 도 14a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은 커맨드의 타겟 클라이언트(902), 커맨드 연산 코드(opcode)(904) 및 커맨드에 대한 관련 데이터(906)를 식별하기 위한 데이터 필드를 포함한다. 몇몇 커맨드에는 서브 연산 코드(905) 및 커맨드 크기(908)가 또한 포함된다.
클라이언트(902)는 커맨드 데이터를 처리하는 그래픽 디바이스의 클라이언트 유닛을 특정한다. 일 실시형태에서, 그래픽 프로세서 커맨드 파서(parser)는 각 커맨드의 클라이언트 필드를 검사하여 커맨드의 추가 처리를 조절하고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅한다. 일 실시형태에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛 및 미디어 유닛을 포함한다. 각각의 클라이언트 유닛은 커맨드를 처리하는 대응하는 처리 파이프라인을 갖는다. 커맨드가 클라이언트 유닛에 의해 일단 수신되면, 클라이언트 유닛은 연산코드(904), 및 존재한다면, 수행할 동작을 결정하기 위해 서브 연산 코드(905)를 판독한다. 클라이언트 유닛은 커맨드의 데이터 필드(906) 내의 정보를 사용하여 커맨드를 수행한다. 몇몇 커맨드의 경우, 명시적 커맨드 크기(908)는 커맨드의 크기를 특정하기 위해 예측된다. 일 실시형태에서, 커맨드 파서는 커맨드 연산 코드에 기초하여 커맨드들 중 적어도 일부의 크기를 자동으로 결정한다. 일 실시형태에서, 커맨드는 더블 워드의 배수(multiples of a double word)를 통해 정렬된다.
도 14b의 흐름도는 샘플 커맨드 시퀀스(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 동작은 미디어 동작과 유사한 방식으로 구성되고 실행된다.
도 15는 실시형태에 따른 데이터 처리 시스템을 위한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다. 소프트웨어 아키텍처는 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), 등등), 내장 컨트롤러, 하드 와이어 회로 등으로 구현될 수 있다. 여기에 설명된 것 이외에, 본 발명의 범위를 벗어나지 않으면서 본 발명의 개시된 실시형태 및 구현에 대한 다양한 수정이 이루어질 수 있다. 따라서, 본 명세서의 도시 및 예시는 제한적인 의미가 아니라 예시적인 것으로 해석되어야 한다. 본 발명의 범위는 오로지 다음의 청구 범위를 참조하여 측정되어야 한다.
다음의 항목들 및/또는 예들은 다른 실시형태에 관련된다.
일 예시적인 실시형태는, 위치 속성을 계산하는 단계와, 위치 속성 이외의 셰이딩 속성을 계산하기 전에 삼각형을 컬링(culling)하는 단계를 포함하는 방법이 될 수 있다. 상기 방법은 또한 컬링이 단순 컬 테스트 및 뷰 절두체 컬링(view frustum culling)을 포함하는 경우를 포함할 수 있다. 상기 방법은 또한 가시성 정보를 시간순으로 기록하는 단계와, 폐기된 삼각형을 생략(skip)하기 위해 상기 가시성 정보를 사용하는 단계를 포함할 수 있다. 상기 방법은 또한 상기 가시성 정보를 비트 단위 시퀀스(bitwise sequence)로 기록하는 단계를 포함할 수 있다. 상기 방법은 또한 상기 위치 속성을 계산하기 전에 차폐 컬링을 수행하기 위해 타일 당 깊이 표현을 기록하는 단계를 포함할 수 있다. 상기 방법은 또한 완전히 차폐되지 않은 삼각형에 대한 위치 속성을 계산할 때 차폐 정보를 생성하는 단계를 포함할 수 있다. 상기 방법은 또한 계산 또는 컬링 동안 커맨드가 처리되는지 여부를 나타내기 위해 드로 콜 커맨드에 비트를 설정하는 단계를 포함할 수 있다. 상기 방법은 또한 타일 당 스칼라 값으로서 최대 및 최소 깊이를 저장함으로써 상기 차폐 정보를 사용하여 차폐 컬링하는 단계를 포함할 수 있다. 상기 방법은 타일 당 Zmax 값 세트 및 비트 마스크를 사용하여 마스크된 깊이 표현을 저장함으로써 차폐 컬링하는 단계를 포함할 수 있다. 상기 방법은 또한 참조 값이 최소 또는 최대 깊이를 나타내는지를 나타내기 위해 타일 당 하나의 비트를 저장함으로써 컬링하는 단계를 포함할 수 있다. 상기 방법은 또한 위치 속성을 계산하는 것의 일부로서 제 1 깊이 테스트를 수행하는 단계와, 위치 속성을 결정한 이후의 컬링 동안 제 2 깊이 테스트를 수행하는 단계를 포함할 수 있다. 상기 방법은 또한 상기 제 2 깊이 테스트에 사용하기 위해 상기 제 1 깊이 테스트로부터 깊이 표현을 공급하는 단계를 포함할 수 있다. 상기 방법은 또한 픽셀 셰이더 실행을 저장하도록 z 버퍼를 프라이밍하기 위해 제 2 깊이 테스트 파이프에서 상기 제 1 깊이 테스트로부터의 깊이 표현을 사용하는 단계를 포함할 수 있다. 상기 방법은 또한 병렬 파이프들 내에서 계산 및 컬링하는 단계를 포함할 수 있다. 상기 방법은 또한 계산 및 컬링이 하나의 파이프에서 수행되고, 가시성 정보를 기록하는 비트 시퀀스가 다른 파이프에서 소비되는 것을 포함할 수 있다. 상기 방법은 또한 드로 콜(draw call)에 대해 가시성 정보의 기록을 선택적으로 비활성화하는 단계를 포함할 수 있다. 상기 방법은 또한 다른 셰이딩 속성 이전에 위치 속성을 계산하지 않고 적어도 하나의 드로 콜에 대해 하나의 단계에서 모든 속성이 계산되도록 선택적으로 활성화하는 단계를 포함할 수 있다. 상기 방법에서, 상기 위치 속성을 계산하는 단계는, 위치 속성의 계산을 위해 위치 속성만을 판독하고 임의의 다른 셰이딩 속성을 판독하지 않는 단계를 포함할 수 있다. 상기 방법은 또한, 삼각형 컬링 동안 프리미티브(primitive)를 클리핑(clipping)하는 단계와, 위치 속성을 계산할 때 모든 삼각형을 가시적인 것으로 표시하는 단계를 포함할 수 있다. 상기 방법은 또한 비위치(non-position) 속성을 계산하기 위한 명령어를 포함하지 않는 명령어 세트를 사용하여 위치 속성을 계산하는 단계를 포함할 수 있다.
다른 예시적 실시형태는, 프로세서에 의해 실행되어 시퀀스를 수행하는 명령어를 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 매체로서, 상기 시퀀스는, 위치 속성을 계산하는 것과, 위치 속성 이외의 셰이딩 속성을 계산하기 전에 삼각형을 컬링하는 것을 포함하는, 비일시적 컴퓨터 판독가능 매체가 될 수 있다. 상기 매체는 또한 컬링이 단순 컬 테스트 및 뷰 절두체 컬링을 포함하는 명령어를 저장할 수 있다. 상기 매체는 또한, 가시성 정보를 시간순으로 기록하는 것과, 폐기된 삼각형을 생략하기 위해 상기 가시성 정보를 사용하는 것을 포함하는 상기 시퀀스를 저장할 수 있다. 상기 매체는 또한 상기 가시성 정보를 비트 단위 시퀀스로 기록하는 것을 포함하는 상기 시퀀스를 저장할 수 있다. 상기 매체는 상기 위치 속성을 계산하기 전에 차폐 컬링을 수행하기 위해 타일 당 깊이 표현을 기록하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 완전히 차폐되지 않은 삼각형에 대한 위치 속성을 계산할 때 차폐 정보를 생성하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 계산 또는 컬링 동안 커맨드가 처리되는지 여부를 나타내기 위해 드로 콜 커맨드에 비트를 설정하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 타일 당 스칼라 값으로서 최대 및 최소 깊이를 저장함으로써 상기 차폐 정보를 사용하여 차폐 컬링하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 타일 당 Zmax 값 세트 및 비트 마스크를 사용하여 마스크된 깊이 표현을 저장함으로써 차폐 컬링하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 참조 값이 최소 또는 최대 깊이를 나타내는지를 나타내기 위해 타일 당 하나의 비트를 저장함으로써 컬링하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 위치 속성을 계산하는 것의 일부로서 제 1 깊이 테스트를 수행하는 단계와, 위치 속성을 결정한 이후의 컬링 동안 제 2 깊이 테스트를 수행하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 상기 제 2 깊이 테스트에 사용하기 위해 상기 제 1 깊이 테스트로부터 깊이 표현을 공급하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 픽셀 셰이더 실행을 저장하도록 z 버퍼를 프라이밍하기 위해 제 2 깊이 테스트 파이프에서 상기 제 1 깊이 테스트로부터의 깊이 표현을 사용하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 병렬 파이프들 내에서 계산 및 컬링하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 계산 및 컬링이 하나의 파이프에서 수행되고, 가시성 정보를 기록하는 비트 시퀀스가 다른 파이프에서 소비되는 상기 시퀀스를 포함할 수 있다. 상기 매체는 드로 콜에 대해 가시성 정보의 기록을 선택적으로 비활성화하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 다른 셰이딩 속성 이전에 위치 속성을 계산하지 않고 적어도 하나의 드로 콜에 대해 모든 속성이 한꺼번에 계산되도록 선택적으로 활성화하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는, 상기 위치 속성을 계산하는 것이, 위치 속성의 계산을 위해 위치 속성만을 판독하고 임의의 다른 셰이딩 속성을 판독하지 않는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는, 삼각형 컬링 동안 프리미티브를 클리핑하는 것과, 위치 속성을 계산할 때 모든 삼각형을 가시적인 것으로 표시하는 것을 포함하는 상기 시퀀스를 포함할 수 있다. 상기 매체는 비위치 속성을 계산하기 위한 명령어를 포함하지 않는 명령어 세트를 사용하여 위치 속성을 계산하는 것을 포함하는 상기 시퀀스를 포함할 수 있다.
또 다른 예시적 실시형태는, 위치 속성을 계산하고, 위치 속성 이외의 셰이딩 속성을 계산하기 전에 삼각형을 컬링하는 프로세서와, 상기 프로세서에 결합된 스토리지를 포함하는 장치가 될 수 있다. 상기 장치는, 단순 컬 테스트 및 뷰 절두체 컬링을 사용하여 컬링하는 상기 프로세서를 포함할 수 있다. 상기 장치는, 가시성 정보를 시간순으로 기록하고, 폐기된 삼각형을 생략하기 위해 상기 가시성 정보를 사용하는 상기 프로세서를 포함할 수 있다. 상기 장치는 상기 가시성 정보를 비트 단위 시퀀스로 기록하는 상기 프로세서를 포함할 수 있다. 상기 장치는 상기 위치 속성을 계산하기 전에 차폐 컬링을 수행하기 위해 타일 당 깊이 표현을 기록하는 상기 프로세서를 포함할 수 있다. 상기 장치는 완전히 차폐되지 않은 삼각형에 대한 위치 속성을 계산할 때 차폐 정보를 생성하는 상기 프로세서를 포함할 수 있다. 상기 장치는 계산 또는 컬링 동안 커맨드가 처리되는지 여부를 나타내기 위해 드로 콜 커맨드에 비트를 설정하는 상기 프로세서를 포함할 수 있다. 상기 장치는 타일 당 스칼라 값으로서 최대 및 최소 깊이를 저장함으로써 상기 차폐 정보를 사용하여 차폐 컬링하는 상기 프로세서를 포함할 수 있다. 상기 장치는 타일 당 Zmax 값 세트 및 비트 마스크를 사용하여 마스크된 깊이 표현을 저장함으로써 차폐 컬링하는 상기 프로세서를 포함할 수 있다. 상기 장치는 참조 값이 최소 또는 최대 깊이를 나타내는지를 나타내기 위해 타일 당 하나의 비트를 저장함으로써 컬링하는 상기 프로세서를 포함할 수 있다. 상기 장치는, 위치 속성을 계산하는 것의 일부로서 제 1 깊이 테스트를 수행하고, 위치 속성을 결정한 이후의 컬링 동안 제 2 깊이 테스트를 수행하는 상기 프로세서를 포함할 수 있다. 상기 장치는 상기 제 2 깊이 테스트에 사용하기 위해 상기 제 1 깊이 테스트로부터 깊이 표현을 공급하는 상기 프로세서를 포함할 수 있다. 상기 장치는 픽셀 셰이더 실행을 저장하도록 z 버퍼를 프라이밍하기 위해 제 2 깊이 테스트 파이프에서 상기 제 1 깊이 테스트로부터의 깊이 표현을 사용하는 상기 프로세서를 포함할 수 있다. 상기 장티는 병렬 파이프들 내에서 계산 및 컬링하는 상기 프로세서를 포함할 수 있다. 상기 장치는, 하나의 파이프에서 계산 및 컬링하고, 다른 파이프에서 가시성 정보를 기록하는 비트 시퀀스를 소비하는 상기 프로세서를 포함할 수 있다. 상기 장치는 운영 시스템, 베터리 및 펌웨어, 및 상기 펌웨어를 업데이트하는 모듈을 포함할 수 있다.
여기에 설명된 그래픽 처리 기술은 다양한 하드웨어 아키텍처로 구현될 수있다. 예컨대, 그래픽 기능은 칩셋에 통합될 수 있다. 대안적으로, 개별 그래픽 프로세서가 사용될 수 있다. 또 다른 실시형태로서, 그래픽 기능은 멀티 코어 프로세서를 포함하는 범용 프로세서에 의해 구현될 수 있다.
본 명세서에서 "일 실시형태" 또는 "실시형태"에 대한 언급은, 그 실시형태와 관련하여 설명되는 특정 특징, 구조 또는 특성이 본 개시물 내에 포함되는 적어도 하나의 구현에 포함됨을 의미한다. 따라서, "일 실시형태" 또는 "실시형태에서"라는 문구의 출현은 반드시 동일한 실시형태를 지칭하는 것은 아니다. 또한, 특정 특징, 구조 또는 특성은 도시된 특정 실시형태 이외의 다른 적절한 형태로 구성될 수 있으며, 그러한 모든 형태는 본원의 특허 청구 범위 내에 포함될 수 있다.
한정된 수의 실시형태가 설명되었지만, 당업자는 이로부터 다수의 수정 및 변형을 인식할 것이다. 첨부된 청구 범위는 본 명세서의 진정한 사상 및 범위 내에 있는 그러한 모든 수정 및 변형을 포함하는 것으로 의도된다.

Claims (58)

  1. 위치 속성을 계산하는 단계와,
    위치 속성 이외의 셰이딩 속성을 계산하기 전에, 테셀레이션을 갖지 않는 컬 파이프(cull pipe)에서 삼각형을 컬링(culling)하는 단계와,
    상기 테셀레이션을 갖지 않는 컬 파이프에 의해 테셀레이션을 필요로 하는 드로 콜을 처리하는 것을 가능하게 하도록, 계산 또는 컬링 동안 드로 콜 커맨드(draw call command)가 처리되는지 여부를 나타내기 위해 상기 드로 콜 커맨드에 비트를 설정하는 단계를 포함하는
    방법.
  2. 제 1 항에 있어서,
    컬링은 단순 컬 테스트 및 뷰 절두체 컬링(view frustum culling)을 포함하는
    방법.
  3. 제 1 항에 있어서,
    가시성 정보를 시간순으로 기록하는 단계와,
    폐기된 삼각형을 생략(skip)하기 위해 상기 가시성 정보를 사용하는 단계를 포함하는
    방법.
  4. 제 3 항에 있어서,
    상기 가시성 정보를 비트 단위 시퀀스(bitwise sequence)로 기록하는 단계를 포함하는
    방법.
  5. 제 3 항에 있어서,
    상기 위치 속성을 계산하기 전에 차폐 컬링을 수행하기 위해 타일 당 깊이 표현을 기록하는 단계를 포함하는
    방법.
  6. 제 3 항에 있어서,
    완전히 차폐되지 않은 삼각형에 대한 위치 속성을 계산할 때 차폐 정보를 생성하는 단계를 포함하는
    방법.
  7. 삭제
  8. 제 6 항에 있어서,
    타일 당 스칼라 값으로서 최대 및 최소 깊이를 저장함으로써 상기 차폐 정보를 사용하여 차폐 컬링하는 단계를 포함하는
    방법.
  9. 제 1 항에 있어서,
    타일 당 Zmax 값 세트 및 비트 마스크를 사용하여 마스크된 깊이 표현을 저장함으로써 차폐 컬링하는 단계를 포함하는
    방법.
  10. 제 1 항에 있어서,
    참조 값이 최소 또는 최대 깊이를 나타내는지를 표시하기 위해 타일 당 하나의 비트를 저장함으로써 컬링하는 단계를 포함하는
    방법.
  11. 제 1 항에 있어서,
    위치 속성을 계산하는 것의 일부로서 제 1 깊이 테스트를 수행하고, 다음에 위치 속성을 결정한 이후의 컬링 동안 제 2 깊이 테스트를 수행하는 단계를 포함하는
    방법.
  12. 제 11 항에 있어서,
    상기 제 2 깊이 테스트에 사용하기 위해 상기 제 1 깊이 테스트로부터 깊이 표현을 공급하는 단계를 포함하는
    방법.
  13. 제 12 항에 있어서,
    픽셀 셰이더 실행을 저장하도록 z 버퍼를 프라이밍하기 위해 제 2 깊이 테스트 파이프에서 상기 제 1 깊이 테스트로부터의 깊이 표현을 사용하는 단계를 포함하는
    방법.
  14. 제 1 항에 있어서,
    병렬 파이프들 내에서 계산 및 컬링하는 단계를 포함하는
    방법.
  15. 제 14 항에 있어서,
    계산 및 컬링은 하나의 파이프에서 수행되고, 가시성 정보를 기록하는 비트 시퀀스는 다른 파이프에서 소비되는
    방법.
  16. 제 1 항에 있어서,
    드로 콜(draw call)에 대해 가시성 정보의 기록을 선택적으로 비활성화하는 단계를 포함하는
    방법.
  17. 제 1 항에 있어서,
    다른 셰이딩 속성 이전에 위치 속성을 계산하지 않고 적어도 하나의 드로 콜에 대해 하나의 단계에서 모든 속성이 계산되도록 선택적으로 활성화하는 단계를 포함하는
    방법.
  18. 제 1 항에 있어서,
    상기 위치 속성을 계산하는 단계는, 위치 속성의 계산을 위해 위치 속성만을 판독하고 임의의 다른 셰이딩 속성을 판독하지 않는 단계를 포함하는
    방법.
  19. 제 1 항에 있어서,
    삼각형 컬링 동안 프리미티브(primitive)를 클리핑(clipping)하는 단계와,
    위치 속성을 계산할 때 모든 삼각형을 가시적인 것으로 표시하는 단계를 포함하는
    방법.
  20. 제 1 항에 있어서,
    비위치(non-position) 속성을 계산하기 위한 명령어를 포함하지 않는 명령어 세트를 사용하여 위치 속성을 계산하는 단계를 포함하는
    방법.
  21. 프로세서에 의해 실행되어 시퀀스를 수행하는 명령어를 저장하는 하나 이상의 비일시적 컴퓨터 판독가능 매체로서,
    상기 시퀀스는,
    위치 속성을 계산하는 것과,
    위치 속성 이외의 셰이딩 속성을 계산하기 전에 테셀레이션을 갖지 않는 컬 파이프에서 삼각형을 컬링하는 것과,
    상기 테셀레이션을 갖지 않는 컬 파이프에 의해 테셀레이션을 필요로 하는 드로 콜을 처리하는 것을 가능하게 하도록, 계산 또는 컬링 동안 드로 콜 커맨드(draw call command)가 처리되는지 여부를 나타내기 위해 상기 드로 콜 커맨드에 비트를 설정하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  22. 제 21 항에 있어서,
    컬링은 단순 컬 테스트 및 뷰 절두체 컬링을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  23. 제 21 항에 있어서,
    상기 시퀀스는, 가시성 정보를 시간순으로 기록하는 것과, 폐기된 삼각형을 생략하기 위해 상기 가시성 정보를 사용하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  24. 제 23 항에 있어서,
    상기 시퀀스는 상기 가시성 정보를 비트 단위 시퀀스로 기록하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  25. 제 23 항에 있어서,
    상기 시퀀스는 상기 위치 속성을 계산하기 전에 차폐 컬링을 수행하기 위해 타일 당 깊이 표현을 기록하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  26. 제 23 항에 있어서,
    상기 시퀀스는 완전히 차폐되지 않은 삼각형에 대한 위치 속성을 계산할 때 차폐 정보를 생성하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  27. 삭제
  28. 제 26 항에 있어서,
    상기 시퀀스는 타일 당 스칼라 값으로서 최대 및 최소 깊이를 저장함으로써 상기 차폐 정보를 사용하여 차폐 컬링하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  29. 제 21 항에 있어서,
    상기 시퀀스는 타일 당 Zmax 값 세트 및 비트 마스크를 사용하여 마스크된 깊이 표현을 저장함으로써 차폐 컬링하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  30. 제 21 항에 있어서,
    상기 시퀀스는 참조 값이 최소 또는 최대 깊이를 나타내는지를 표시하기 위해 타일 당 하나의 비트를 저장함으로써 컬링하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  31. 제 21 항에 있어서,
    상기 시퀀스는, 위치 속성을 계산하는 것의 일부로서 제 1 깊이 테스트를 수행하고, 다음에 위치 속성을 결정한 이후의 컬링 동안 제 2 깊이 테스트를 수행하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  32. 제 31 항에 있어서,
    상기 시퀀스는 상기 제 2 깊이 테스트에 사용하기 위해 상기 제 1 깊이 테스트로부터 깊이 표현을 공급하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  33. 제 32 항에 있어서,
    상기 시퀀스는 픽셀 셰이더 실행을 저장하도록 z 버퍼를 프라이밍하기 위해 제 2 깊이 테스트 파이프에서 상기 제 1 깊이 테스트로부터의 깊이 표현을 사용하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  34. 제 21 항에 있어서,
    상기 시퀀스는 병렬 파이프들 내에서 계산 및 컬링하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  35. 제 34 항에 있어서,
    계산 및 컬링은 하나의 파이프에서 수행되고, 가시성 정보를 기록하는 비트 시퀀스는 다른 파이프에서 소비되는
    비일시적 컴퓨터 판독가능 매체.
  36. 제 21 항에 있어서,
    상기 시퀀스는, 드로 콜에 대해 가시성 정보의 기록을 선택적으로 비활성화하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  37. 제 21 항에 있어서,
    상기 시퀀스는, 다른 셰이딩 속성 이전에 위치 속성을 계산하지 않고 적어도 하나의 드로 콜에 대해 모든 속성이 한꺼번에 계산되도록 선택적으로 활성화하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  38. 제 21 항에 있어서,
    상기 위치 속성을 계산하는 것은, 위치 속성의 계산을 위해 위치 속성만을 판독하고 임의의 다른 셰이딩 속성을 판독하지 않는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  39. 제 21 항에 있어서,
    상기 시퀀스는,
    삼각형 컬링 동안 프리미티브를 클리핑하는 것과,
    위치 속성을 계산할 때 모든 삼각형을 가시적인 것으로 표시하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  40. 제 21 항에 있어서,
    상기 시퀀스는, 비위치 속성을 계산하기 위한 명령어를 포함하지 않는 명령어 세트를 사용하여 위치 속성을 계산하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  41. 위치 속성을 계산하고, 위치 속성 이외의 셰이딩 속성을 계산하기 전에 테셀레이션을 갖지 않는 컬 파이프에서 삼각형을 컬링하고, 상기 테셀레이션을 갖지 않는 컬 파이프에 의해 테셀레이션을 필요로 하는 드로 콜을 처리하는 것을 가능하게 하도록, 계산 또는 컬링 동안 드로 콜 커맨드(draw call command)가 처리되는지 여부를 나타내기 위해 상기 드로 콜 커맨드에 비트를 설정하는 프로세서와,
    상기 프로세서에 결합된 스토리지를 포함하는
    장치.
  42. 제 41 항에 있어서,
    상기 프로세서는 단순 컬 테스트 및 뷰 절두체 컬링을 사용하여 컬링하는
    장치.
  43. 제 41 항에 있어서,
    상기 프로세서는, 가시성 정보를 시간순으로 기록하고, 폐기된 삼각형을 생략하기 위해 상기 가시성 정보를 사용하는
    장치.
  44. 제 43 항에 있어서,
    상기 프로세서는, 상기 가시성 정보를 비트 단위 시퀀스로 기록하는
    장치.
  45. 제 43 항에 있어서,
    상기 프로세서는, 상기 위치 속성을 계산하기 전에 차폐 컬링을 수행하기 위해 타일 당 깊이 표현을 기록하는
    장치.
  46. 제 43 항에 있어서,
    상기 프로세서는, 완전히 차폐되지 않은 삼각형에 대한 위치 속성을 계산할 때 차폐 정보를 생성하는
    장치.
  47. 삭제
  48. 제 46 항에 있어서,
    상기 프로세서는, 타일 당 스칼라 값으로서 최대 및 최소 깊이를 저장함으로써 상기 차폐 정보를 사용하여 차폐 컬링하는
    장치.
  49. 제 41 항에 있어서,
    상기 프로세서는, 타일 당 Zmax 값 세트 및 비트 마스크를 사용하여 마스크된 깊이 표현을 저장함으로써 차폐 컬링하는
    장치.
  50. 제 41 항에 있어서,
    상기 프로세서는, 참조 값이 최소 또는 최대 깊이를 나타내는지를 표시하기 위해 타일 당 하나의 비트를 저장함으로써 컬링하는
    장치.
  51. 제 41 항에 있어서,
    상기 프로세서는, 위치 속성을 계산하는 것의 일부로서 제 1 깊이 테스트를 수행하고, 다음에 위치 속성을 결정한 이후의 컬링 동안 제 2 깊이 테스트를 수행하는
    장치.
  52. 제 51 항에 있어서,
    상기 프로세서는, 상기 제 2 깊이 테스트에 사용하기 위해 상기 제 1 깊이 테스트로부터 깊이 표현을 공급하는
    장치.
  53. 제 52 항에 있어서,
    상기 프로세서는, 픽셀 셰이더 실행을 저장하도록 z 버퍼를 프라이밍하기 위해 제 2 깊이 테스트 파이프에서 상기 제 1 깊이 테스트로부터의 깊이 표현을 사용하는
    장치.
  54. 제 41 항에 있어서,
    상기 프로세서는 병렬 파이프들 내에서 계산 및 컬링하는
    장치.
  55. 제 54 항에 있어서,
    상기 장치는, 하나의 파이프에서 계산 및 컬링하고, 다른 파이프에서 가시성 정보를 기록하는 비트 시퀀스를 소비하는
    장치.
  56. 제 41 항에 있어서,
    운영 시스템을 포함하는
    장치.
  57. 제 41 항에 있어서,
    배터리를 포함하는
    장치.
  58. 제 41 항에 있어서,
    펌웨어, 및 상기 펌웨어를 업데이트하는 모듈을 포함하는
    장치.
KR1020177004819A 2014-09-24 2015-08-25 위치 전용 셰이딩 파이프라인 KR102339581B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/494,653 US9824412B2 (en) 2014-09-24 2014-09-24 Position-only shading pipeline
US14/494,653 2014-09-24
PCT/US2015/046669 WO2016048521A1 (en) 2014-09-24 2015-08-25 Position-only shading pipeline

Publications (2)

Publication Number Publication Date
KR20170034414A KR20170034414A (ko) 2017-03-28
KR102339581B1 true KR102339581B1 (ko) 2021-12-14

Family

ID=55526184

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177004819A KR102339581B1 (ko) 2014-09-24 2015-08-25 위치 전용 셰이딩 파이프라인

Country Status (6)

Country Link
US (1) US9824412B2 (ko)
EP (1) EP3198553A4 (ko)
JP (1) JP6377842B2 (ko)
KR (1) KR102339581B1 (ko)
CN (1) CN106575449B (ko)
WO (1) WO2016048521A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
JP6421920B2 (ja) * 2014-09-03 2018-11-14 カシオ計算機株式会社 表示装置及びその表示制御方法、制御プログラム
US10238973B2 (en) * 2014-10-24 2019-03-26 Electronic Arts Inc. Generating digital elements using non-deterministic selection
US9959590B2 (en) 2016-03-30 2018-05-01 Intel Corporation System and method of caching for pixel synchronization-based graphics techniques
US10032308B2 (en) * 2016-06-22 2018-07-24 Advanced Micro Devices, Inc. Culling objects from a 3-D graphics pipeline using hierarchical Z buffers
US10127707B2 (en) 2016-06-27 2018-11-13 Intel Corporation Discard mechanism for tile-based rendering
JP6813600B2 (ja) * 2016-06-27 2021-01-13 ローベルト ボツシユ ゲゼルシヤフト ミツト ベシユレンクテル ハフツングRobert Bosch Gmbh 動的オクルージョン処理のためのシステム及び方法
US20180082468A1 (en) * 2016-09-16 2018-03-22 Intel Corporation Hierarchical Z-Culling (HiZ) Optimized Shadow Mapping
US10380789B2 (en) * 2016-09-16 2019-08-13 Intel Corporation Method and apparatus for efficient depth prepass
US10540808B2 (en) * 2016-09-16 2020-01-21 Intel Corporation Hierarchical Z-culling (HiZ) optimization for texture-dependent discard operations
US20180082464A1 (en) * 2016-09-16 2018-03-22 Tomas G. Akenine-Moller Apparatus and method for an efficient 3d graphics pipeline
US10733695B2 (en) * 2016-09-16 2020-08-04 Intel Corporation Priming hierarchical depth logic within a graphics processor
US11379941B2 (en) * 2016-09-22 2022-07-05 Advanced Micro Devices, Inc. Primitive shader
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US10235811B2 (en) * 2016-12-29 2019-03-19 Intel Corporation Replicating primitives across multiple viewports
US10417815B2 (en) * 2017-01-27 2019-09-17 Advanced Micro Devices, Inc. Out of order pixel shader exports
US10748332B2 (en) 2017-03-15 2020-08-18 Nvidia Corporation Hybrid frustum traced shadows systems and methods
US10521875B2 (en) * 2017-04-01 2019-12-31 Intel Corporation Thread scheduling over compute blocks for power optimization
US10706612B2 (en) * 2017-04-01 2020-07-07 Intel Corporation Tile-based immediate mode rendering with early hierarchical-z
US10242494B2 (en) * 2017-04-01 2019-03-26 Intel Corporation Conditional shader for graphics
US10719971B2 (en) * 2018-05-25 2020-07-21 Microsoft Technology Licensing, Llc Low resolution depth pre-pass
US10997771B2 (en) 2018-08-29 2021-05-04 Intel Corporation Position-based rendering apparatus and method for multi-die/GPU graphics processing
US10628910B2 (en) 2018-09-24 2020-04-21 Intel Corporation Vertex shader with primitive replication
US11715262B2 (en) * 2018-12-17 2023-08-01 Advanced Micro Devices, Inc. Optimizing primitive shaders
US11004255B2 (en) * 2019-04-24 2021-05-11 Microsoft Technology Licensing, Llc Efficient rendering of high-density meshes
US11227430B2 (en) 2019-06-19 2022-01-18 Samsung Electronics Co., Ltd. Optimized pixel shader attribute management
KR20200145665A (ko) * 2019-06-19 2020-12-30 삼성전자주식회사 최적화된 픽셀 셰이더 속성 관리
US11631187B2 (en) 2020-09-24 2023-04-18 Advanced Micro Devices, Inc. Depth buffer pre-pass
US11176734B1 (en) * 2020-10-06 2021-11-16 Qualcomm Incorporated GPU hardware-based depth buffer direction tracking
GB2616628B (en) * 2022-03-15 2024-03-20 Advanced Risc Mach Ltd Graphics processing
WO2024050188A1 (en) * 2022-09-01 2024-03-07 Qualcomm Incorporated Sliced graphics processing unit (gpu) architecture in processor-based devices

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100097377A1 (en) * 2008-10-20 2010-04-22 Jon Hasselgren Graphics Processing Using Culling on Groups of Vertices
US20120069021A1 (en) * 2010-09-20 2012-03-22 Samsung Electronics Co., Ltd. Apparatus and method of early pixel discarding in graphic processing unit
US20120212488A1 (en) * 2011-02-22 2012-08-23 Chang-Hyo Yu Graphic processor and method of early testing visibility of pixels
US20130058537A1 (en) * 2011-09-07 2013-03-07 Michael Chertok System and method for identifying a region of interest in a digital image
US20130300754A1 (en) * 2012-05-14 2013-11-14 Cass W. Everitt Cull streams for fine-grained rendering predication

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6912293B1 (en) * 1998-06-26 2005-06-28 Carl P. Korobkin Photogrammetry engine for model construction
US7068272B1 (en) * 2000-05-31 2006-06-27 Nvidia Corporation System, method and article of manufacture for Z-value and stencil culling prior to rendering in a computer graphics processing pipeline
AU5686299A (en) * 1998-08-20 2000-03-14 Raycer, Inc. Method and apparatus for generating texture
JP3350473B2 (ja) * 1999-03-17 2002-11-25 富士通株式会社 オクルージョンカリングを行う3次元グラフィックス描画装置および方法
US20050195186A1 (en) * 2004-03-02 2005-09-08 Ati Technologies Inc. Method and apparatus for object based visibility culling
US7468726B1 (en) * 2005-12-01 2008-12-23 Nvidia Corporation Culling in a vertex processing unit
US7746355B1 (en) * 2007-01-24 2010-06-29 Vivante Corporation Method for distributed clipping outside of view volume
JP5004650B2 (ja) * 2007-05-09 2012-08-22 株式会社ソニー・コンピュータエンタテインメント グラフィックスプロセッサ、描画処理装置および描画処理方法
US8760450B2 (en) 2007-10-30 2014-06-24 Advanced Micro Devices, Inc. Real-time mesh simplification using the graphics processing unit
US8102393B1 (en) * 2007-12-13 2012-01-24 Nvidia Corporation Cull streams for fine-grained rendering predication
US8933943B2 (en) * 2008-04-30 2015-01-13 Intel Corporation Technique for performing load balancing for parallel rendering
US8436854B2 (en) * 2009-05-29 2013-05-07 Qualcomm Incorporated Graphics processing unit with deferred vertex shading
US8542247B1 (en) * 2009-07-17 2013-09-24 Nvidia Corporation Cull before vertex attribute fetch and vertex lighting
US8564616B1 (en) * 2009-07-17 2013-10-22 Nvidia Corporation Cull before vertex attribute fetch and vertex lighting
US9390539B2 (en) * 2009-11-04 2016-07-12 Intel Corporation Performing parallel shading operations
CN102667850B (zh) * 2009-12-23 2015-01-28 英特尔公司 图像处理技术
US8854365B2 (en) 2010-01-15 2014-10-07 Microsoft Corporation Rendering parametric surface patches
GB201007348D0 (en) * 2010-04-30 2010-06-16 Imagination Tech Ltd Programmable tessellation in a tile based rendering system
US8593466B2 (en) * 2010-06-08 2013-11-26 Intel Corporation Tile rendering for image processing
KR101681056B1 (ko) 2010-10-01 2016-12-01 삼성전자주식회사 정점 처리 방법 및 장치
US9165348B2 (en) * 2011-06-23 2015-10-20 Intel Corporation Stochastic rasterization with selective culling
US10089774B2 (en) * 2011-11-16 2018-10-02 Qualcomm Incorporated Tessellation in tile-based rendering
US9299182B2 (en) * 2012-12-04 2016-03-29 Panasonic Intellectual Property Management Co., Ltd. Divided-area-based rendering device and divided-area-based rendering method
US9342857B2 (en) * 2013-03-29 2016-05-17 Nvidia Corporation Techniques for locally modifying draw calls
US20150179142A1 (en) * 2013-12-20 2015-06-25 Nvidia Corporation System, method, and computer program product for reduced-rate calculation of low-frequency pixel shader intermediate values
US9934604B2 (en) * 2013-12-27 2018-04-03 Intel Corporation Culling using masked depths for MSAA
US9418471B2 (en) * 2014-03-18 2016-08-16 Intel Corporation Compact depth plane representation for sort last architectures
US9552620B2 (en) * 2014-06-30 2017-01-24 Intel Corporation Depth offset compression

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100097377A1 (en) * 2008-10-20 2010-04-22 Jon Hasselgren Graphics Processing Using Culling on Groups of Vertices
US20120069021A1 (en) * 2010-09-20 2012-03-22 Samsung Electronics Co., Ltd. Apparatus and method of early pixel discarding in graphic processing unit
US20120212488A1 (en) * 2011-02-22 2012-08-23 Chang-Hyo Yu Graphic processor and method of early testing visibility of pixels
US20130058537A1 (en) * 2011-09-07 2013-03-07 Michael Chertok System and method for identifying a region of interest in a digital image
US20130300754A1 (en) * 2012-05-14 2013-11-14 Cass W. Everitt Cull streams for fine-grained rendering predication

Also Published As

Publication number Publication date
EP3198553A4 (en) 2018-04-04
CN106575449B (zh) 2020-10-30
EP3198553A1 (en) 2017-08-02
US20160086299A1 (en) 2016-03-24
JP2017531254A (ja) 2017-10-19
CN106575449A (zh) 2017-04-19
US9824412B2 (en) 2017-11-21
KR20170034414A (ko) 2017-03-28
WO2016048521A1 (en) 2016-03-31
JP6377842B2 (ja) 2018-08-22

Similar Documents

Publication Publication Date Title
KR102339581B1 (ko) 위치 전용 셰이딩 파이프라인
CN107430523B (zh) 图形处理器的高效抢占
TWI731871B (zh) 用於最佳化在唯位置著色圖磚延遲渲染器中的剪裁操作的方法、裝置及非暫態電腦可讀取媒體
TWI614685B (zh) 用於在虛擬執行環境中有效率地處理圖形的系統
TWI706374B (zh) 經由渲染命令串流器之僅關於位置的著色器背景提交
CN109643463B (zh) 预设图形处理器内的分级式深度逻辑
WO2018052592A1 (en) Method and apparatus for efficient depth prepass
CN106575451B (zh) 用于对像素区域进行着色的方法、装置、设备及存储介质
EP3221850B1 (en) Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures
US9886934B2 (en) Ordering mechanism for offload graphics scheduling
US9412195B2 (en) Constant buffer size multi-sampled anti-aliasing depth compression
CN106575443B (zh) 用于存储多点采样图形保真的分层索引位的方法及其装置
JP2018502381A (ja) 位置限定パイプラインにおける減らされたソーティング
US9601092B2 (en) Dynamically managing memory footprint for tile based rendering
WO2017172032A1 (en) System and method of caching for pixel synchronization-based graphics techniques
US20160093102A1 (en) Efficient tessellation cache

Legal Events

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