KR20230162023A - 서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝 - Google Patents

서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝 Download PDF

Info

Publication number
KR20230162023A
KR20230162023A KR1020237036342A KR20237036342A KR20230162023A KR 20230162023 A KR20230162023 A KR 20230162023A KR 1020237036342 A KR1020237036342 A KR 1020237036342A KR 20237036342 A KR20237036342 A KR 20237036342A KR 20230162023 A KR20230162023 A KR 20230162023A
Authority
KR
South Korea
Prior art keywords
subpaths
subpath
execution
order
tile
Prior art date
Application number
KR1020237036342A
Other languages
English (en)
Inventor
루이진 우
미카 투오미
파보 삼포 일마리 페시
아니루드 알. 아차리아
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20230162023A publication Critical patent/KR20230162023A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

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

Abstract

렌더링될 프레임을 복수의 타일들로 분할하는 단계, 상기 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하는 단계, 및 상기 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계를 포함하는 타일형 렌더링 방법이 제공된다. 제 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계는 제1 타일의 이전 순서의 제1 서브패스의 실행과 상기 제1 타일의 후속 순서의 제2 서브패스의 실행 사이에 제2 타일의 이전 순서의 제1 서브패스를 실행하는 단계를 포함한다. 인터리빙은 예를 들어, 상기 복수의 서브패스들을 실행하라는 커맨드들이 저장되고 발행된 순서와 상이한 순서로 상기 복수의 서브패스들을 실행함으로써, 수행된다. 대안적으로, 인터리빙은 상기 복수의 서브패스들이 동일한 순서로 실행되도록 하나 이상의 서브패스를 스킵 동작들로서 실행함으로써 수행된다.

Description

서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝
관련 출원(들) 상호 참조
본 출원은 2021년 3월 26일자로 출원된 미국 가출원 제63/166,956호, 및 2021년 12월 29일자로 출원된 미국 정규 출원 제17/565,394호의 이익을 주장하며, 이들은 본원에 전문이 기재된 것처럼 참조되어 포함된다.
그래픽 처리는 2차원 스크린 상에 3차원(3D) 장면을 렌더링하는 것을 포함한다. 3D 장면은 상이한 처리 스테이지들을 포함하는 그래픽 파이프라인을 통해 디스플레이 스크린 상에 렌더링된다. 커맨드 스트림의 그래픽 처리 커맨드들이 (예를 들어, 애플리케이션으로부터) 수신되고, 컴퓨테이션 태스크들이 태스크들의 실행을 위해 (예를 들어, GPU와 같은 가속 처리 디바이스로) 제공된다.
그래픽은 프리미티브(primitive)(예를 들어, 삼각형, 사변형 또는 다른 기하학적 형상)들을 사용하여 디스플레이 스크린 상에 렌더링된다. 그래픽 처리 커맨드들은 예를 들어, 디스플레이 스크린 상에 렌더링될 프리미티브의 개수, 각 프리미티브의 위치 및 각 프리미티브의 속성들을 포함한다.
더 상세한 이해는 첨부된 도면과 함께 예로서 주어진 다음의 설명으로부터 얻을 수 있다.
도 1은 본 개시의 하나 이상의 특징들이 구현될 수 있는 예시적인 디바이스의 블록도이다.
도 2는 추가 세부사항을 도시한, 도 1의 장치의 블록도이다.
도 3은 예에 따른 그래픽 처리 파이프라인을 예시하는 블록도이다.
도 4는 본 개시의 하나 이상의 특징이 구현될 수 있는 가속 처리 디바이스의 예시적인 컴포넌트들을 예시하는 블록도이다.
도 5는 예에 따른 상이한 렌더링 서브패스의 순서화를 예시하는 그래픽 처리 파이프라인의 일부분의 도해이다.
도 6은 연속적인 빈들의 서브패스들을 인터리빙하는 예를 구현하는 것의 성능 이점들을 예시하는 타이밍도들이다.
도 7은 3개의 빈들에 대해 도 6에 도시된 예를 예시하는 타이밍도이다.
도 8은 연속적인 빈들의 서브패스들을 인터리빙하는 제1 예시적인 모드를 예시하는 도해이다.
도 9는 연속적인 빈들의 서브패스들을 인터리빙하는 제2 예시적인 모드를 예시하는 도해이다.
도 10은 도 9에 도시된 제2 예시적인 모드를 예시하는 타이밍도이다.
도 11은 본 개시의 특징들에 따른 타일형 이미지 렌더링의 예시적인 방법을 예시하는 흐름도이다.
"타일", "빈", "타일형", "빈형", "타일링" 및 비닝이라는 용어들은 본원에서 상호교환적으로 사용된다.
그래픽 파이프라인은 프론트엔드 지오메트리 부분 및 백엔드 부분을 포함하는 것으로 간략화될 수 있다. 예를 들어, 파이프라인의 프론트엔드 지오메트리 부분은 여러 셰이더 스테이지들(예를 들어, 버텍스 셰이더 스테이지, 헐 셰이더 스테이지, 테셀레이터 스테이지, 도메인 셰이더 스테이지 및 지오메트리 셰이더 스테이지)를 포함한다. 셰이더 스테이지들 동안 프리미티브들은 3D 객체들로서 수신되고, 2D 스크린 상에 렌더링될 2D 객체들로 변환된다. 백엔드 부분은 래스터라이저 스테이지 및 픽셀 셰이더 스테이지를 포함한다. 래스터라이저 스테이지 동안, 2D 스크린 상에 투영될 각 프리미티브의 스크린상 위치가 결정된다. 예를 들어, 래스터화 동안, 가속 처리 디바이스(예를 들어, GPU)가 각 프리미티브에 대해, 어느 픽셀들(또는 서브 픽셀 샘플들)이 2D 스크린 상에 렌더링될 각 프리미티브에 대응하는지를 결정한다. 픽셀 셰이더 스테이지 동안, 프리미티브에 대응하는 픽셀들에 대한 값들(예를 들어, 밝기 및 색상)이 계산된다.
프레임을 렌더링하는 것은 상이한 태스크들을 특정 순서로 수행하는 것을 포함한다. 예를 들어, 프레임 렌더링은 셰도우 렌더링, 렌더 패스 및 후처리를 포함한다. 렌더 패스는 특정 순서로 수행되는 다양한 서브패스들(예를 들어, 가시성(visibility) 서브패스)를 포함한다. 서브패스는 동일한 렌더 타겟에 렌더링하는 드로우 커맨드들의 시퀀스이다.
서브패스들에 대한 커맨드들(즉, 명령어)은 특정 순서로 (예를 들어, 커맨드 버퍼에) 저장되고, 버퍼에서 특정 순서로 프로세서(예를 들어, GPU의 스케줄러)에 발행되는데, 이는 일부 경우들에서, 후속 서브패스들이 실행 전 이전 서브패스로부터의 출력 데이터에 의존하기 때문이다. 각 서브패스의 실행의 결과로 얻어지는 데이터는 통상적으로 캐시(예를 들어, 렌더 백엔드(render backend, RB) 캐시)에 저장된다. 그러나, 후속 태스크의 실행은 메모리의 또 다른 부분(즉, RB 캐시로부터가 아닌 부분)으로부터 데이터를 판독하는 것에 의존한다. 이에 따라, RB 캐시로부터의 데이터는 플러싱되고, 후속 태스크를 실행하기 위해 데이터가 판독될 수 있도록 보다 하위 레벨 캐시(예를 들어, 레벨 2(L2) 캐시 또는 다른 보다 하위 레벨 캐시) 또는 메인 메모리와 같은 메모리의 또 다른 부분에 저장된다.
커맨드 버퍼 내 후속 순서의 서브패스는 이전 순서의 서브패스로부터의 결과로 얻어지는 데이터에 의존한다. 커맨드 버퍼 내 후속 순서의 서브패스가 실행을 시작할 수 있기 전에(즉, 후속 순서의 서브패스에 의해 임의의 작업이 시작될 수 있기 전에), 커맨드 버퍼 내 이전 순서의 서브패스는 실행을 끝내야 한다(즉, 출력 데이터가 캐시로부터 플러싱되고, 데이터가 메모리의 또 다른 부분에 저장된다). 따라서, 이러한 경우에서, 후속 순서의 서브패스가 이전 순서의 서브패스가 완료되기를 기다려야 할 때, 처리 파이프라인에 오버헤드(예를 들어, 레이턴시)가 도입된다. 또한, 이 대기 기간 동안, 프로세서는 이전 순서의 서브패스가 완료될 때까지 유휴 상태이므로, 파이프라인에 비효율을 초래하고 프레임 레이턴시를 증가시킨다.
타일링(또는 비닝)은 프레임을 섹션들(예를 들어, 타일들 또는 빈들)로 분할하고, 프레임의 하나의 타일을 프레임의 또 다른 타일을 렌더링하기 전에 렌더링하는 기법이다. 예를 들어, 프레임(또는 이미지)이 네 개의 동일한 타일들(즉, 좌측 상단 사분면, 우측 상단 사분면, 좌측 하단 사분면, 우측 하단 사분면)로 분할된다면, 첫 번째 타일(예를 들어, 좌측 상단 사분면)이 그 다음 타일들 중 하나를 렌더링하는 것으로 진행하기 전에 렌더링된다. 그 후, 프레임의 타일들 각각이 렌더링될 때까지, 다른 타일들 중 하나(예를 들어, 우측 상단 사분면)가 마지막 두 개의 타일들 중 하나를 렌더링하는 것으로 진행하기 전에 렌더링되는 등등이다.
종래의 타일형(빈형) 렌더링에서는, 빈들 각각이 서로 독립적으로 렌더링된다. 타일(또는 빈)을 렌더링할 때, 동일한 타일(또는 빈)의 상이한 서브패스들은 동일한 타일의 후속 순서의 서브패스가 이전 순서의 서브패스의 실행으로부터의 결과로 얻어진 데이터를 판독할 수 있도록, 커맨드 버퍼에서 지정된 순서로 실행되어야 한다. 따라서, 타일의 후속 순서의 서브패스가 동일한 타일의 이전 순서의 서브패스가 완료되기를 기다려야 하기 때문에, 처리 파이프라인에 레이턴시가 도입된다.
본 출원은 타일형(빈형) 렌더링의 이러한 속성들을 활용하고, 다수의 빈들의 동일한 서브패스들(예를 들어, 빈 1의 제1 조명 서브패스와 빈 2의 동일한 제1 조명 서브패스)을 인터리빙함으로써 보다 효율적인 처리 파이프라인을 제공하는 장치들 및 방법들을 개시한다. 본 출원의 특징들은 동일한 타일의 (이전 순서의 서브패스와 상이한) 후속 순서의 서브패스가 동일한 타일의 이전 순서의 서브패스가 완료되기를 기다리는 시구간 동안 상이한 타일의 동일한 서브패스(즉, 동일한 서브패스 유형)의 실행을 인터리빙한다. 따라서, 동일한 타일의 후속 순서의 서브패스가 대기하는 이러한 시구간들이 상이한 타일의 하나 이상의 서브패스를 실행하는 데 사용되기 때문에, 전체적인 레이턴시가 감소된다. 또한, 프로세서가 동일한 타일의 후속 순서의 서브패스가 대기하는 이러한 시구간 동안 상이한 타일의 하나 이상의 서브패스를 실행하기 때문에, 프로세서는 이 시구간 동안 유휴 상태가 아니므로, 자원을 보다 효율적으로 사용할 수 있게 된다. 또한, 본 출원의 특징들은 상이한 빈들의 동일한 서브패스들의 실행을 (시간적으로) 중첩시킴으로써, 가속 처리 디바이스(예를 들어, GPU)를 통해, 서브패스들을 병렬적으로 처리할 수 있는 능력을 또한 이용하여, 레이턴시를 더 감소시킨다.
하나의 예시적인 모드에서, 연속적인 빈들의 서브패스들은 서브패스 커맨드들이 (예를 들어, 커맨드 버퍼에) 저장되고 프로세서(예를 들어, GPU의 스케줄러)에 발행된 순서와 상이한 순서로 서브패스를 실행함으로써 인터리빙된다. 또 다른 예시적인 모드에서, 연속적인 빈들의 서브패스들은 서브패스 커맨드들이 저장되고 프로세서에 발행된 순서와 동일한 순서로 서브패스들이 실행되도록 서브패스를 스킵 동작들로서 실행함으로써 인터리빙된다. 구현될 인터리빙 모드 및 다수의 빈들의 인터리빙된 동일한 서브패스들의 개수는 프레임을 렌더링하기 전에 프레임 단위로 또는 다수의 프레임 기반으로 결정된다.
렌더링될 프레임을 복수의 타일들로 분할하는 단계, 상기 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하는 단계, 및 상기 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계를 포함하는 타일형 이미지 렌더링 방법이 제공된다.
메모리 및 프로세서를 포함하는 타일형 이미지 렌더링에 사용되는 처리 디바이스가 제공된다. 프로세서는 렌더링될 프레임을 복수의 타일들로 분할하도록, 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하도록, 그리고 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하도록 구성된다.
컴퓨터로 하여금 타일형 이미지 렌더링 방법을 실행하게 하기 위한 명령어들을 포함하는 비일시적인 컴퓨터 판독가능 매체가 제공된다. 명령어들은 렌더링될 프레임을 복수의 타일들로 분할하는 명령어, 상기 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하는 명령어, 및 상기 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 명령어들를 포함한다.
도 1은 본 개시의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들어, 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함할 수 있다. 디바이스(100)는 프로세서(102), 메모리(104), 스토리지(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다는 것이 이해된다.
다양한 대안들에서, 프로세서(102)는 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU), 동일한 다이 상에 위치된 CPU 및 GPU, 또는 하나 이상의 프로세서 코어들을 포함하고, 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 다양한 대안들에서, 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치되거나 또는 프로세서(102)와 별도로 위치된다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 예를 들어, 랜덤 액세스 메모리(RAM), 동적 RAM, 또는 캐시를 포함한다.
스토리지(106)는 고정 또는 제거 가능한 스토리지, 예를 들어, 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광학 디스크, 또는 플래시 드라이브를 포함한다. 입력 디바이스들(108)은 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 바이오메트릭 스캐너, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 로컬 영역 네트워크 카드)을 포함하지만, 이에 제한되지 않는다. 출력 디바이스들(110)은 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 조명들, 안테나, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 로컬 영역 네트워크 카드)을 포함하지만, 이에 제한되지 않는다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스들(108)과 통신하고, 프로세서(102)가 입력 디바이스들(108)로부터 입력을 수신하도록 허용한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스들(110)과 통신하고, 프로세서(102)가 출력 디바이스들(110)에 출력을 발송하도록 허용한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적인 컴포넌트들이며, 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는 경우에 디바이스(100)는 동일한 방식으로 동작할 것이라는 점에 유의한다. 출력 드라이버(116)는 디스플레이 디바이스(118)에 결합된 가속 처리 디바이스("APD")(116)를 포함한다. APD는 프로세서(102)로부터 컴퓨트 커맨드들 및 그래픽 렌더링 커맨드들을 수용하고, 이들 컴퓨트 및 그래픽 렌더링 커맨드들을 처리하고, 픽셀 출력을 디스플레이를 위해 디스플레이 디바이스(118)에 제공한다. 이하에서 보다 상세히 설명되는 바와 같이, APD(116)는 하나 이상의 병렬 처리 유닛을 포함하여 SIMD(single-instruction-multiple-data) 패러다임에 따라 계산을 수행한다. 따라서, 다양한 기능이 APD(116)에 의해 또는 이와 함께 수행되는 것으로 본원에 설명되지만, 다양한 대안에서, APD(116)에 의해 수행되는 것으로 설명된 기능은 호스트 프로세서(예를 들어, 프로세서(102))에 의해 구동되지 않고 디스플레이 디바이스(118)에 그래픽 출력을 제공하는 유사한 능력을 갖는 다른 컴퓨팅 디바이스에 의해 추가적으로 또는 대안적으로 수행된다. 예를 들어, SIMD 패러다임에 따라 처리 작업을 수행하는 임의의 처리 시스템은 본원에서 설명된 기능을 수행할 수 있음이 고려된다. 또는, SIMD 패러다임에 따라 처리 작업을 수행하지 않는 컴퓨팅 시스템은 본원에 설명된 기능을 수행하는 것으로 고려된다.
도 2는, 장치(100)의 블록도로, APD(116)에서 처리 작업의 실행과 관련된 추가 세부사항을 도시한다. 프로세서(102)는, 시스템 메모리(104)에, 프로세서(102)에 의한 실행을 위한 하나 이상의 제어 로직 모듈을 유지한다. 제어 로직 모듈은 운영 체제(120), 커널 모드 드라이버(122), 및 애플리케이션(126)을 포함한다. 이러한 제어 로직 모듈들은 프로세서(102) 및 APD(116)의 연산의 다양한 피처들을 제어한다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 통신하고, 프로세서(102) 상에서 실행되는 다른 소프트웨어에 대한 인터페이스를 하드웨어에 제공한다. 커널 모드 드라이버(122)는, 예를 들어, 프로세서(102) 상에서 실행되는 소프트웨어(예를 들어, 애플리케이션(126))에 API(application programming interface)를 제공하여 APD(116)의 다양한 기능에 액세스하는 APD(116)의 동작을 제어한다. 커널 모드 드라이버(122)는 또한 (아래에서 더 상세히 논의되는 SIMD 유닛(138)과 같은) APD(116)의 처리 구성요소로 실행하기 위한 프로그램을 컴파일하는 JIT(just-in-time) 컴파일러를 포함한다.
APD(116)는 병렬 처리에 적합할 수 있는 그래픽 연산 및 비그래픽 연산과 같은 선택된 기능에 대한 명령 및 프로그램을 실행한다. APD(116)는 픽셀 연산, 지오메트리 계산과 같은 그래픽 파이프라인 연산을 실행하고, 프로세서(102)로부터 수신된 명령에 기초하여 이미지를 디스플레이 장치(118)에 렌더링하는 데 사용될 수 있다. APD(116)는 또한 프로세서(102)로부터 수신되는 커맨드들에 기초하여, 그래픽 동작들과 직접 관련이 없는 컴퓨트 처리 동작들, 이를테면 비디오, 물리 시뮬레이션들, 전산 유체 역학, 또는 다른 작업들과 관련된 동작들을 실행한다.
APD(116)는 SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청에 동작을 수행하는 하나 이상의 SIMD 유닛(138)을 포함하는 계산 유닛(132)을 포함한다. SIMD 패러다임은 다수의 프로세싱 요소가 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고, 따라서 동일한 프로그램을 실행하지만, 상이한 데이터로 해당 프로그램을 실행할 수 있는 것이다. 일례에서, 각각의 SIMD 유닛(138)은 16개의 레인을 포함하고, 여기서 각각의 레인은 SIMD 유닛(138)의 다른 레인과 동일한 시간에 동일한 명령어를 실행하지만 상이한 데이터로 해당 명령어를 실행할 수 있다. 모든 레인이 주어진 명령어를 실행할 필요가 없는 경우 예측으로 레인을 끌 수 있다. 예측은 또한, 프로그램들을 분기하는(divergent) 제어 흐름으로 실행하기 위해 사용될 수 있다. 더 구체적으로, 제어 흐름이 개별 레인에 의해 수행되는 계산들에 기초하는 조건부 분기들 또는 다른 명령어들을 갖는 프로그램들에 대해, 현재 실행되고 있지 않은 제어 흐름 경로들에 대응하는 레인들의 예측, 및 상이한 제어 흐름 경로들의 직렬 실행은 자의적인 제어 흐름을 가능하게 한다.
계산 유닛(132)에서 실행의 기본 단위는 작업-항목이다. 각 작업 항목은 특정 레인에서 병렬로 실행될 프로그램의 단일 인스턴스화를 나타낸다. 작업-항목은 단일 SIMD 처리 유닛(138) 상에서 "파면(wavefront)"으로서 동시에 실행될 수 있다. 하나 이상의 파면은 동일한 프로그램을 실행하도록 지정된 작업-항목의 집합을 포함하는 "작업 그룹"에 포함된다. 작업그룹을 구성하는 파면 각각을 실행함으로써 작업그룹은 실행될 수 있다. 대안적으로, 파면은 단일 SIMD 유닛(138) 상에서 순차적으로 또는 상이한 SIMD 유닛(138) 상에서 부분적으로 또는 완전히 병렬로 실행된다. 파면은 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 있는 작업-항목의 가장 큰 집합으로 생각될 수 있다. 따라서, 프로세서(102)로부터 수신된 명령이, 프로그램이 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 없는 정도로 특정 프로그램이 병렬화되어야 함을 표시하는 경우, 해당 프로그램은 2개 이상의 SIMD 유닛(138) 상에 병렬화되거나 동일한 SIMD 유닛(138) 상에 직렬화되는 (또는 필요에 따라 병렬화 및 직렬화 모두) 파면으로 분할된다. 스케줄러(136)는 상이한 컴퓨트 유닛들(132) 및 SIMD 유닛들(138) 상에서 다양한 파면을 스케줄링하는 것과 관련된 동작들을 수행한다.
계산 유닛(132)에 의해 제공되는 병렬성은 픽셀 값 계산, 정점 변환 및 다른 그래픽 동작과 같은 그래픽 관련 동작에 적합하다. 따라서, 일부 경우에서, 프로세서(102)로부터 그래픽 처리 명령을 수용하는 그래픽 파이프라인(134)은 병렬로 실행하기 위해 계산 유닛(132)에 계산 작업을 제공한다.
계산 유닛(132)은 또한 그래픽과 관련되지 않거나 그래픽 파이프라인(134)의 "정상(normal)" 동작의 일부로서 수행되지 않는 계산 작업(예를 들어, 그래픽 파이프라인(134)의 동작을 위해 수행되는 처리를 보완하기 위해 수행된 커스텀 동작)을 수행하는 데 사용된다. 프로세서(102) 상에서 실행되는 애플리케이션(126) 또는 다른 소프트웨어는 이와 같은 컴퓨테이션 작업들을 정의하는 프로그램들을 실행을 위해 APD(116)로 송신한다.
APD(116)는 복수의 기능들을 실행함으로써 본 개시의 특징들을 구현하도록 구성된다. 예를 들어, APD(116)는 이미지들(즉, 프레임들)을 수신하고, 이미지들을 복수의 타일들로 분할하고, 사용자 모드 드라이버(200)를 통해 서브패스 커맨드들을 수신하고, 서브패스 커맨드들이 저장되고 프로세서에 발행된 순서와 상이한 순서로 서브패스들을 실행함으로써 다수의 빈들의 동일한 서브패스들을 인터리빙하고, 서브패스 커맨드들이 저장되고 프로세서에 발행된 순서와 동일한 순서로 서브패스들이 실행되도록 서브패스들의 실행을 스킵함으로써 다수의 빈들의 동일한 서브패스들을 인터리빙하고, 인터리빙 모드 및 다수의 빈들의 인터리빙된 동일한 서브패스들의 개수가 프레임을 렌더링하기 전에 프레임 단위 또는 다수의 프레임 기반으로 결정하도록 구성된다.
도 3은 도 2에 예시된 그래픽 처리 파이프라인(134)의 추가적인 세부사항을 도시하는 블록도이다. 그래픽 처리 파이프라인(134)은, 각각이 특정 기능을 수행하는 스테이지들을 포함한다. 스테이지는 그래픽 처리 파이프라인(134)의 기능의 세분화를 나타낸다. 각각의 스테이지는 프로그램 가능한 처리 유닛(202)에서 실행되는 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현되거나, 프로그램 가능한 처리 유닛(202) 외부의 고정된 기능, 프로그램 가능하지 않은 하드웨어로서 부분적으로 또는 전체적으로 구현된다.
스테이지들 302 내지 313은 그래픽 처리 파이프라인(134)의 프론트엔드 지오메트리 처리 부분을 나타낸다. 스테이지들 314 내지 318은 그래픽 처리 파이프라인(134)의 백엔드 픽셀 처리 부분을 나타낸다.
입력 어셈블러 스테이지(302)는 유저-필드 버퍼(user-filled buffer)(예를 들어, 애플리케이션(126)과 같은 프로세서(102)에 의해 실행되는 소프트웨어의 요청 시에 채워진 버퍼)로부터 프리미티브 데이터를 읽고, 파이프라인의 나머지 부분에서 사용하기 위해 데이터를 프리미티브 안으로 어셈블링한다. 입력 어셈블러 스테이지(302)는 유저-필드 버퍼에 포함된 프리미티브 데이터에 기초하여 다양한 유형의 프리미티브를 생성할 수 있다. 입력 어셈블러 스테이지(302)는 나머지 파이프라인에 의해서 사용되기 위해, 어셈블된 프리미티브를 포맷한다.
정점 셰이더 스테이지(304)는 입력 어셈블러 스테이지(302)에 의해 어셈블된 프리미티브의 정점을 처리한다. 정점 셰이더 스테이지(304)는 변환, 스키닝(skinning), 모핑(morphing) 및 정점별 조명처리와 같은 다양한 정점별 동작을 수행한다. 변환 연산은 정점의 좌표를 변환하는 다양한 연산을 포함한다. 이러한 연산은 모델링 변환, 보기 변환, 투영 변환, 원근 분할, 및 뷰포트 변환 중 하나 이상을 포함한다. 여기서, 이러한 변환은 변환이 수행되는 정점의 좌표 또는 "위치"를 수정하는 것으로 간주된다. 정점 셰이더 스테이지(304)의 다른 연산은 좌표 이외의 속성을 수정한다.
정점 셰이더 스테이지(304)는 하나 이상의 컴퓨팅 유닛(132) 상에서 실행될 정점 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현된다. 정점 셰이더 프로그램은 프로세서(102)에 의해 제공되고, 컴퓨터 프로그래머에 의해 미리 작성된 프로그램에 기초한다. 드라이버(122)는 이러한 컴퓨터 프로그램을 컴퓨팅 유닛(132) 내에서 실행하기에 적합한 포맷을 갖는 정점 셰이더 프로그램을 생성하도록 컴파일한다.
헐 셰이더 스테이지(306), 테셀레이터 스테이지(308) 및 도메인 셰이더 스테이지(310)는, 프리미티브를 세분화하여 단순한 프리미티브를 보다 복잡한 프리미티브로 변환하는 테셀레이션을 구현하기 위해 함께 작동된다. 헐 셰이더 스테이지(306)는 입력 프리미티브에 기초하여 테셀레이션을 위한 패치를 생성한다. 테셀레이터 스테이지(308)는 패치에 대한 일 세트의 샘플을 생성한다. 도메인 셰이더 스테이지(310)는 패치에 대한 샘플에 대응하는 정점에 대한 정점 위치를 계산한다. 헐 셰이더 스테이지(306) 및 도메인 셰이더 스테이지(310)는 프로그래밍 가능한 프로세싱 유닛(202) 상에서 실행될 셰이더 프로그램으로서 구현될 수 있다.
지오메트리 셰이더 스테이지(312)는 프리미티브 단위로 정점 연산을 수행한다. 포인트 스프린트 확장(point sprint expand), 동적 입자 시스템 연산, 퍼-핀(fur-fin) 생성, 그림자 볼륨 생성, 단일 패스 렌더-투-큐브맵(single pass render-to-cubemap), 프리미티브별 재료 스와핑, 및 프리미티브별 재료 설정과 같은 연산을 포함하여, 다양한 상이한 유형의 연산이 기하학 셰이더 스테이지(312)에 의해 수행될 수 있다. 일부 예에서, 프로그래밍 가능한 처리 유닛(202) 상에서 실행되는 셰이더 프로그램은 기하학적 구조 셰이더 스테이지(312)에 대한 연산을 수행한다.
비너 스테이지(313)는 프론트엔드 처리의 마지막 스테이지이다. 비너 스테이지는 프레임(또는 이미지)의 타일(또는 빈)이 프리미티브와 중첩되는지를 결정하기 위해 대략적인 래스터화를 수행한다. 예를 들어, 비너 스테이지는 각 타일에 있을 것으로 결정된 프리미티브들에 대한 가시성 체킹(즉, 가시성 패스) 및 타일 워킹을 포함한다. 비너 스테이지(313)는 고정 기능 하드웨어에 의해 수행된다.
위에서 설명된 바와 같이, 스테이지들 314-318은 그래픽 처리 파이프라인(134)의 백엔드 처리를 나타낸다. 래스터라이저 스테이지(314)는 단순 프리미티브 및 생성된 업스트림을 수용하고 래스터화한다. 래스터화는 특정 프리미티브에 커버되는 화면 픽셀(또는 하위-픽셀 샘플)을 결정하는 것을 포함한다. 예를 들어, 래스터라이저 스테이지(314)는 프리미티브(예를 들어, 삼각형)를 스크린 공간 픽셀들로 변환하여, 어느 픽셀이 프리미티브에 의해 커버되는지를 테스트한다. 래스터화는 고정 기능 하드웨어에 의해 수행된다.
픽셀 셰이더 스테이지(316)는 업스트림에서 생성된 프리미티브 및 래스터화 결과에 기초하여 스크린 픽셀에 대한 출력 값을 계산한다. 픽셀 셰이더 스테이지(316)는 텍스처 메모리로부터의 텍스처를 적용할 수 있다. 픽셀 셰이더 스테이지(316)에 대한 연산은 프로그래밍 가능한 프로세싱 유닛(202) 상에서 실행되는 셰이더 프로그램에 의해 수행된다.
출력 병합 스테이지(318)는 픽셀 셰이더 스테이지(316)로부터의 출력을 수용하고, 이러한 출력을 병합하여, 스크린 픽셀에 대한 최종 색상을 결정하기 위해 z-테스트 및 알파 블렌딩과 같은 연산을 수행한다.
텍스처를 정의하는 텍스처 데이터는 텍스처 유닛(320)에 의해 저장되고/되거나 액세스된다. 텍스처는 그래픽 처리 파이프라인(134)의 다양한 지점에서 사용되는 비트맵 이미지이다. 예를 들어, 일부 경우에서, 픽셀 셰이더 스테이지(316)는 렌더링될 정점의 수를 증가시키지 않고 명백한 렌더링 복잡성을 개선하기 위해(예를 들어, 더 "사실적인" 모습을 제공하기 위해) 픽셀에 텍스처를 적용한다.
일부 예에서, 정점 셰이더 스테이지(304)는, 예를 들어, 개선된 미학을 위해 정점을 생성 또는 수정함으로써 복잡성을 증가시키기 위해 프리미티브를 수정하기 위해 텍스처 유닛(320)으로부터의 텍스처 데이터를 사용한다. 일 예에서, 정점 셰이더 스테이지(304)는 정점의 변위를 수정하기 위해 텍스처 유닛(320)에 저장된 높이 맵을 사용한다. 이러한 유형의 기술은, 예를 들어, 물을 렌더링하기 위해서 사용되는 정점의 위치 및 수를 수정함으로써, 픽셀 셰이더 스테이지(316)에서만 사용되는 텍스처와 비교하여 보다 사실적으로 보이는 물을 생성하기 위해서 사용될 수 있다. 일부 경우에서, 기하학적 구조 셰이더 스테이지(312)는 텍스처 유닛(320)으로부터 텍스처 데이터에 액세스한다.
도 4는 본 개시의 하나 이상의 특징이 구현될 수 있는 도 2에 도시된 APD(116)의 예시적인 컴포넌트들을 예시하는 블록도이다. 도 4에 도시된 바와 같이, APD(116)는 L1 캐시를 각각 갖는 컴퓨트 유닛(132)을 포함한다. 각 컴퓨트 유닛은 고정 기능 하드웨어를 통해 구현되는 렌더링 백엔드(RB)와 통신한다. 서브패스들(예를 들어, 도 5에 도시된 서브패스 0, 서브패스 1 및 서브패스 2)의 실행의 결과로 얻어지는 출력 데이터가 RB 캐시에 저장된다. 이전 순서의 서브패스로부터의 출력 데이터는 RB 캐시로부터 플러싱되고, 도 4에 도시된 L2 캐시(406)와 같은 메모리의 또 다른 부분으로 제공되고, 데이터는 실행을 위해 후속 순서의 서브패스에 의해 판독된다.
도 5는 예에 따른 상이한 렌더링 서브패스의 순서화를 예시하는 그래픽 처리 파이프라인의 일부분의 도해이다. 프레임 렌더링은 셰도우 렌더링(502), 렌더 패스(504) 및 후처리(506)를 포함한다. 설명의 간략화를 위해, 도 5에 도시된 예에서의 렌더 패스(504)는 세 개의 서브패스들, 즉 지오메트리 버퍼(GBuffer) 렌더링 서브패스(즉, 서브패스 0), 제1 조명(라이트 1) 서브패스(즉, 서브패스 1) 및 제2 조명 서브패스(즉, 서브패스 2)를 포함한다. 도 5에 도시된 서브패스의 개수와 서브패스의 유형은 단지 예일 뿐이다. 본 개시의 특징들은 도 5에 도시된 것들과 상이한 개수의 서브패스 및 다른 유형의 서브패스를 사용하여 구현될 수 있다.
위에서 설명된 바와 같이, 커맨드 버퍼 내 후속 순서의 서브패스(예를 들어, 도 5에서의 서브패스 1)가 실행을 시작할 수 있기 전에(즉, 후속 순서의 서브패스에 의해 임의의 작업이 시작될 수 있기 전에), 커맨드 버퍼 내 이전 순서의 서브패스(예를 들어, 도 5에서의 서브패스 0)는 실행을 끝내야 한다(즉, 출력 데이터가 캐시로부터 플러싱되고, 데이터가 메모리의 또 다른 부분에 저장된다). 따라서, 서브패스 1이 서브패스 0이 완료되기를 기다려야 할 때, 처리 파이프라인에 오버헤드(예를 들어, 레이턴시)가 도입된다. 또한, 이 대기 기간 동안, 프로세서는 서브패스 0이 완료될 때까지 유휴 상태이므로, 파이프라인에 비효율을 초래하고 프레임 레이턴시를 증가시킨다. 도 6은 연속적인 빈들의 서브패스들을 인터리빙하는 예를 구현하는 것의 성능 이점들을 예시하는 타이밍도들이다. 특히, 도 6은 연속적인 빈들의 두 개의 상이한 서브패스들을 인터리빙하지 않는 연속적인 빈들의 두 개의 상이한 서브패스들을 실행하는 것과, 연속적인 빈들의 두 개의 상이한 서브패스들을 인터리빙함으로써 실행하는 것 사이의 성능 이점들(예를 들어, 레이턴시 감소)을 예시한다. 도 6에서는 설명의 간략화를 위해 두 개의 서브패스들 및 두 개의 빈들이 예시된다. 본 개시의 특징들은 두 개 초과의 서브패스들 및 두 개 초과의 빈들을 사용하여 구현될 수 있다.
도 6의 상단 부분의 타이밍도는 두 개의 연속적인 빈들(즉, 빈 1 및 빈 2)의 두 개의 상이한 서브패스들(즉, 패스 1 및 패스 2)의 실행을 인터리빙 없이 예시한다. 도 6의 하단 부분의 타이밍도는 본 개시의 특징들에 따라 빈 1 및 빈 2의 두 개의 상이한 서브패스들(즉, 패스 1 및 패스 2)을 인터리빙하는 것을 예시한다. 설명의 간략화를 위해, 도 6에 도시된 예시적인 서브패스들 각각은 처리 파이프라인의 3개의 스테이지들(즉, 버텍스 셰이더(vertex shader, VS) 스테이지, 픽셀 셰이더(pixel shader, PS) 스테이지, RB 스테이지)을 포함한다. 그러나, 파이프라인들은 예를 들어, 도 3에 도시된 파이프라인(134)에 도시된 스테이지들과 같은 추가적인 또는 다른 스테이지들을 포함할 수 있다.
도 6의 상단 부분에 도시된 바와 같이, 빈 1에 대해 제1 서브패스(패스 1)(즉, 도 5에서의 지오메트리 버퍼 렌더링 서브패스 0과 같은 제1 유형의 서브패스)가 실행된 후, 빈 1의 제2 서브패스(패스 2)(즉, 도 5에서의 제1 조명 서브패스 1과 같은 상이한 제2 유형의 서브패스)의 실행이 이어진다. 그 후, 빈 2에 대해 제1 서브패스(패스 1)가 실행된 후, 빈 2에 대한 제2 서브패스(패스 2)의 실행이 이어진다.
도 6에서의 패스 1의 RB 스테이지들로부터 패스 2의 PS 스테이지들로 이어지는 곡선 화살표들은 후속 순서의 서브패스의 PS 스테이지의 실행이 이전 순서의 서브패스의 RB 스테이지로부터의 결과로 얻어지는 데이터와 캐시(예를 들어, RB 캐시)가 플러싱된(즉, 무효화된(INV)) 것에 의존적임을 나타낸다. 즉, 도 6의 상단 부분에 도시된 바와 같이, 후속 순서의 서브패스(패스 2)는 이전 순서의 서브패스(패스 1)가 실행을 완료하기를 기다려야 하므로, 파이프라인에 레이턴시를 초래한다. 또한, 이러한 대기 기간 동안, 프로세서는 유휴 상태이며, 이는 자원의 낭비이다..
그러나, 도 6의 하단 부분에 도시된 바와 같이, 빈 1의 동일한 이전 순서의 서브패스(즉, 패스 1)의 실행과 빈 1의 후속 순서의 서브패스(패스 2)의 실행 사이에 빈 2의 이전 순서의 서브패스(즉, 패스 1)의 실행이 인터리빙된다. 따라서, 도 6의 상단 부분에서 어떠한 서브패스도 실행되지 않고 프로세서가 유휴 상태인 시구간이 빈 2의 이전 순서의 서브패스(즉, 패스 1)의 실행에 의해 이용되어, 레이턴시를 감소시키고 전체적인 성능을 개선한다. 또한, 도 6의 하단 부분에 도시된 바와 같이, 레이턴시는 빈 1의 이전 순서의 서브패스(즉, 패스 1)의 실행의 일부분과 빈 2의 이전 순서의 서브패스(즉, 패스 1)의 실행의 일부분을 (시간적으로) 중첩시킴으로써 더 감소된다.
도 7은 도 6의 하단 부분에 도시된 동일하지만, 3개의 빈들에 대한 3개의 패스들을 사용하여 구현된 절차를 예시한 타이밍도이다. 빈 및 서브패스(도 6 및 도 7에서 패스로서 도시됨)의 개수는 단지 설명의 간략화를 위한 예들일 뿐이다. 본 출원의 특징들은 임의의 수의 빈 및 임의의 수의 서브패스에 대해 구현될 수 있다. 도 7에 도시된 예에서, 제1 서브패스(패스 1), 제2 서브패스(패스 2), 및 제3 서브패스(패스 3) 각각은 서로 상이하다. 예를 들어, 패스 1은 지오메트리 버퍼 렌더링 서브패스에 대응하고, 패스 2는 제1 조명 서브패스에 대응하고, 패스 3은 제2 조명 서브패스에 대응한다. 설명의 간략화를 위해 도시되지는 않았지만, 도 7과 관련하여 설명된 것들을 포함하여, 본 개시의 특징들은 추가적인 서브패스들(즉, 세 개 초과의 서브패스들)에 대해 구현될 수 있는 것으로 이해될 수 있다.
도 6의 하단 부분의 타이밍도와 도 7의 타이밍도 둘 모두에 도시된 바와 같이, 빈 1의 동일한 이전 순서의 제1 서브패스(즉, 패스 1)의 실행과 빈 1의 후속 순서의 제2 서브패스(패스 2)의 실행 사이에 빈 2의 이전 순서의 제1 서브패스(즉, 패스 1)의 실행이 인터리빙된다. 또한, 도 7의 타이밍도에 도시된 바와 같이, 빈 1의 동일한 후속 순서의 제2 서브패스(즉, 패스 2)의 실행과 빈 1의 후속 순서의 제3 서브패스(패스 3)의 실행 사이에 빈 2의 후속 순서의 제2 서브패스(즉, 패스 2)의 실행이 인터리빙된다. 따라서, 인터리빙이 사용되지 않았다면 프로세서가 유휴 상태가 되었을 시구간이 빈 2의 패스 2를 실행하는 데 이용되고, 레이턴시를 더 감소시키고 전체적인 성능을 개선한다. 또한, 도 6의 하단 부분에 도시된 바와 같이, 레이턴시는 빈 1의 패스 2의 실행의 일부분과 빈 2의 패스 2의 실행의 일부분을 (시간적으로) 중첩시킴으로써 더 감소된다. 이해할 수 있는 바와 같이, 프레임의 각 추가적인 패스들에 대해 그리고 복수의 프레임들에 대해 추가적인 레이턴시가 감소되어, 전체적인 성능이 크게 개선한다.
도 8 내지 도 11은 본 출원의 특징들에 따라 구현될 수 있는 상이한 인터리빙 모드들의 예들을 예시한다. 도 8 내지 도 11에 도시된 빈, 서브패스(도 8 내지 도 10에서 패스로서 도시되고, 도 11에서 서브패스로서 도시됨) 및 커맨드들은 단지 설명의 간략화를 위한 예들일 뿐이다. 본 출원의 특징들은 임의의 수의 빈 및 임의의 수의 서브패스에 대해 임의의 수의 커맨드를 사용하여 구현될 수 있다.
도 8은 연속적인 빈들의 서브패스들을 인터리빙하는 제1 예시적인 모드를 예시하는 도해이다. 도 8을 참조하면, 사용자 모드 드라이버(200)를 통해 APD(115)의 스케줄러(136)(예를 들어, GPU)에 발행된 커맨드들(즉, 패스 1에 대한 커맨드, 패스 2에 대한 커맨드 및 패스 3에 대한 커맨드)이 실행될 특정 순서로 커맨드 버퍼(802)에 저장된다. 타일(또는 빈)을 렌더링할 때, 동일한 타일(또는 빈)의 상이한 서브패스들은 동일한 타일의 후속 순서의 서브패스가 이전 순서의 서브패스의 실행으로부터의 결과로 얻어진 데이터를 판독할 수 있도록, 커맨드 버퍼(802)에서 지정된 순서로 실행된다.
도 8에 도시된 바와 같이, 빈 1의 서브패스 2가 빈 1의 서브패스 1이 실행을 완료하기를 기다리는 시구간 동안, 빈 1의 서브패스 1의 실행과 빈 1의 서브패스 2의 실행 사이에 빈 2의 서브패스 1의 실행이 인터리빙된다. 또한, 빈 1의 서브패스 3이 빈 1의 서브패스 2가 실행을 완료하기를 기다리는 시구간 동안, 빈 1의 서브패스 2의 실행과 빈 1의 서브패스 3의 실행 사이에 빈 2의 서브패스 2의 실행이 인터리빙된다. 이해될 수 있는 바와 같이, 이러한 프로세스는 추가적인 패스들 및 빈들(도 8에 도시되지 않음)에 대해 계속될 수 있다.
도 8에 예시된 예시적인 인터리빙 모드에서, 서브패스들의 실행 순서는 커맨드 버퍼(802)에서 지정된 순서와 상이한다. 즉, 커맨드 버퍼(802)에서 지정된 순서는 서브패스 1(패스 1), 서브패스 2(패스 2) 그리고 그 후 서브패스 3(패스 3)이지만, 위에서 설명된 인터리빙은 서브패스 1 내지 서브패스 3의 실행이 커맨드 버퍼(802)에서 지정된 순서(예를 들어, 빈 1에 대한 서브패스 1 다음, 빈 2에 대한 서브패스 1, 그리고 그 후 빈 1에 대한 서브패스 2)와 상이하게 한다.
동일한 빈의 후속 순서의 서브패스가 대기하는 이러한 시구간들이 상이한 타일의 하나 이상의 서브패스를 실행하는 데 사용되기 때문에, 전체적인 레이턴시가 감소된다. 또한, 프로세서가 동일한 타일의 후속 순서의 서브패스가 대기하는 이러한 시구간 동안 상이한 타일의 하나 이상의 서브패스를 실행하기 때문에, 프로세서는 이 시구간 동안 유휴 상태가 아니므로, 자원을 보다 효율적으로 사용할 수 있게 된다.
도 9 및 도 10은 연속적인 빈들의 서브패스들을 인터리빙하는 제2 예시적인 모드를 예시하는 도해들이다. 제2 예시적인 모드에서, 연속적인 빈들의 서브패스들은 커맨드 버퍼(802)에서 지정된 동일한 순서로 서브패스들이 실행되도록 서브패스를 스킵 동작들로서 실행함으로써 인터리빙된다.
도 9에서는, 서브패스들이 커맨드 버퍼(802)에서 지정된 동일한 순서로 실행되는 것을 더 잘 예시하기 위해, 각 서브패스(즉, 서브패스 1, 서브패스 2 및 서브패스 3)의 실행 순서가 매트릭스 형태로(그리고 도 9의 상단의 커맨드 버퍼(802) 내의 커맨드들과 수직 정렬된 것으로) 도시된다. 서브패스들 및 스킵들이 실행되는 순서는 대응하는 숫자 1~ 숫자 12에 의해 표시된다. 예를 들어, 빈 1의 서브패스 1이 실행되고, 빈 1의 서브패스 2와 3이 스킵 실행으로서 실행되고, 그 후 빈 2의 서브패스 1이 실행된다.
도 10에서는, 서브패스의 인터리빙을 보다 잘 예시하기 위해, 각 서브패스(즉, 서브패스 1, 서브패스 2 및 서브패스 3)의 실행 순서가 시간에 따라 수평으로 도시된다. 도 9 내지 도 11에 도시된 제2 예시 모드에서는, 스킵들에 의해 유발되는 약간의 레이턴시가 존재한다. 그러나, 도 9 및 도 10에 도시된 바와 같이, 스킵(스킵 동작)의 수는 시간이 지나면서 감소하여 스킵이 없게 된다.
도 11은 본 개시의 특징들에 따른 타일형 이미지 렌더링의 예시적인 방법을 예시하는 흐름도(1100)이다. 도 11에서의 블록(1102)에 도시된 바와 같이, 방법(1100)은 렌더링될 프레임을 복수의 타일들로 분할하는 단계를 포함한다. 렌더링될 프레임은 임의의 수의 타일들로 분할될 수 있다. 프레임의 각 타일은 프레임의 또 다른 타일을 렌더링하기 전에 렌더링된다. 예를 들어, 프레임이 네 개의 동일한 타일들(즉, 좌측 상단 사분면, 우측 상단 사분면, 좌측 하단 사분면, 우측 하단 사분면)로 분할된다면, 첫 번째 타일(예를 들어, 좌측 상단 사분면)이 그 다음 타일들 중 하나를 렌더링하는 것으로 진행하기 전에 렌더링된다. 그 후, 프레임의 타일들 각각이 렌더링될 때까지, 다른 타일들 중 하나(예를 들어, 우측 상단 사분면)가 마지막 두 개의 타일들 중 하나를 렌더링하는 것으로 진행하기 전에 렌더링되는 등등이다.
도 11에서의 블록(1104)에 도시된 바와 같이, 방법(1100)은 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하는 단계를 포함한다. 예를 들어, 복수의 서브패스들(즉, 도 7 및 도 8에 도시된 패스 1, 패스 2 및 패스 3)을 실행하라는 커맨드들은 (도 8 및 도 9에 도시된) 커맨드 버퍼(802)를 통해 수신되고, 사용자 모드 드라이버(200)를 통해 APD(115)의 스케줄러(136)(예를 들어, GPU)에 발행되어 이에 의해 수신된다. 커맨드들은 실행될 특정 순서로 커맨드 버퍼(802)에 저장된다. 타일(또는 빈)을 렌더링할 때, 동일한 타일(또는 빈)의 상이한 서브패스들은 동일한 타일의 후속 순서의 서브패스가 이전 순서의 서브패스의 실행으로부터의 결과로 얻어진 데이터를 판독할 수 있도록, 커맨드 버퍼(802)에서 지정된 순서로 실행된다.
도 11에서의 블록(1106)에 도시된 바와 같이, 방법(1100)은 프레임의 다수의 타일들의 동일한 서브패스들(예를 들어, 제1 타일의 서브패스 및 제2 타일의 동일한 서브패스)의 실행을 인터리빙하는 단계를 포함한다. 예를 들어, 제1 타일의 이전 순서의 제1 서브패스의 실행과 제1 타일의 후속 순서의 제2 서브패스의 실행 사이에 제2 타일의 이전 순서의(예를 들어, 커맨드 버퍼(802)에서의 순서) 제1 서브패스가 실행된다.
다수의 타일들의 동일한 서브패스들의 실행은 예를 들어, 복수의 서브패스들을 실행하라는 커맨드들이 저장되고 발행된 순서와 상이한 순서로 복수의 서브패스들을 실행함으로써, 인터리빙된다. 대안적으로, 다수의 타일들의 동일한 서브패스들의 실행은 복수의 서브패스들을 실행하라는 커맨드들이 저장되고 발행된 동일한 순서로 복수의 서브패스들이 실행되도록 하나 이상의 서브패스의 실행을 스킵함으로써 인터리빙된다.
본 명세서의 개시내용에 기초하여 많은 변형들이 가능하다는 것이 이해되어야 한다. 특징 및 엘리먼트가 특정 조합으로 위에서 설명되었지만, 각각의 특징 또는 엘리먼트는 다른 특징 및 엘리먼트 없이 단독으로 또는 다른 특징 및 엘리먼트를 갖거나 갖지 않는 다양한 조합으로 사용될 수 있다.
도면에 예시되고/되거나 본 명세서에 설명된 다양한 기능 유닛(프로세서(102), 입력 드라이버(112), 입력 장치(108), 출력 드라이버(114), 출력 장치(110), APD(116), 스케줄러(136), 그래픽 처리 파이프라인(134), 컴퓨트 유닛(132), 및 SIMD 유닛(138)이 포함되나 이에 제한되지 않음)은 범용 컴퓨터, 프로세서 또는 프로세서 코어, 또는 프로그램, 소프트웨어 또는 펌웨어로 구현되고, 비일시적인 컴퓨터 판독 가능한 매체 또는 다른 매체에 저장되거나, 범용 컴퓨터, 프로세서 또는 프로세서 코어에 의해 실행될 수도 있다. 제공된 방법들은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서들은, 예를 들어, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서들, DSP 코어와 연관된 하나 이상의 마이크로프로세서들, 제어기, 마이크로제어기, ASICs(Application Specific Integrated Circuits), FPGAs(Field Programmable Gate Arrays) 회로들, 임의의 다른 유형의 집적 회로(IC), 및/또는 상태 머신을 포함한다. 이러한 프로세서들은 프로세싱된 하드웨어 기술 언어(HDL) 명령어들의 결과들 및 넷리스트들을 포함하는 다른 중간 데이터(이러한 명령어들은 컴퓨터 판독가능 매체 상에 저장될 수 있음)를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 본 개시의 특징을 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에 사용되는 마스크워크일 수 있다.
본 명세서에 제공된 방법들 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 스토리지 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독 가능 스토리지 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 자기 광학 매체, CD-ROM 디스크 및 디지털 다목적 디스크(DVD)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 타일형 이미지 렌더링 방법으로서,
    렌더링될 프레임을 복수의 타일들로 분할하는 단계;
    상기 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하는 단계; 및
    상기 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계는 제1 타일의 이전 순서의 제1 서브패스의 실행과 상기 제1 타일의 후속 순서의 제2 서브패스의 실행 사이에 제2 타일의 이전 순서의 제1 서브패스를 실행하는 단계를 포함하는 것인, 방법.
  3. 제1항에 있어서, 상기 복수의 서브패스들을 실행하라는 커맨드가 저장되고 발행된 순서와 상이한 순서로 상기 복수의 서브패스들을 실행함으로써 상기 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계를 더 포함하는, 방법.
  4. 제1항에 있어서, 상기 복수의 서브패스들을 실행하라는 커맨드가 저장되고 발행된 순서와 동일한 순서로 상기 복수의 서브패스들이 실행되도록 하나 이상의 서브패스를 스킵 동작들로서 실행함으로써 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계를 더 포함하는, 방법.
  5. 제2항에 있어서, 인터리빙은 프레임을 렌더링하기 전에 프레임 단위로 결정되는 것인, 방법.
  6. 제1항에 있어서, 제1 타일의 이전 순서의 제1 서브패스의 일부분의 실행이 제2 타일의 이전 순서의 서브패스의 일부분의 실행과 시간적으로 중첩되는 것인, 방법.
  7. 제6항에 있어서, 상기 이전 순서의 제1 서브패스의 일부분은 상기 이전 순서의 제1 서브패스의 버텍스 셰이더 스테이지, 픽셀 셰이더 스테이지 및 렌더 백엔드 스테이지 중 하나이고, 상기 제2 타일의 이전 순서의 서브패스의 일부분은 상기 버텍스 셰이더 스테이지, 상기 픽셀 셰이더 스테이지 및 상기 렌더 백엔드 스테이지 중 다른 하나인 것인, 방법.
  8. 타일형 이미지 렌더링에 사용되는 처리 디바이스로서,
    메모리; 및
    프로세서를 포함하고, 상기 프로세서는,
    렌더링될 프레임을 복수의 타일들로 분할하도록;
    상기 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하도록; 그리고
    상기 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하도록 구성된 것인, 처리 디바이스.
  9. 제8항에 있어서, 상기 프로세서에 의해 렌더링된 이미지들을 디스플레이하기 위한 디스플레이 디바이스를 더 포함하는, 처리 디바이스.
  10. 제8항에 있어서, 상기 프로세서는 제1 타일의 이전 순서의 제1 서브패스의 실행과 상기 제1 타일의 후속 순서의 제2 서브패스의 실행 사이에 제2 타일의 이전 순서의 제1 서브패스를 실행함으로써 상기 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하도록 구성된 것인, 처리 디바이스.
  11. 제8항에 있어서, 상기 프로세서는 상기 복수의 서브패스들을 실행하라는 커맨드들이 저장되고 발행된 순서와 상이한 순서로 상기 복수의 서브패스들을 실행함으로써 상기 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하도록 구성된 것인, 처리 디바이스.
  12. 제8항에 있어서, 상기 프로세서는 상기 복수의 서브패스들을 실행하라는 커맨드들이 저장되고 발행된 순서와 동일한 순서로 상기 복수의 서브패스들이 실행되도록 하나 이상의 서브패스를 스킵 동작들로서 실행함으로써 상기 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하도록 구성된 것인, 처리 디바이스.
  13. 제8항에 있어서, 상기 커맨드들은 상기 커맨드들이 실행될 순서로 커맨드 버퍼에 저장된 것인, 처리 디바이스.
  14. 제13항에 있어서, 스케줄러를 더 포함하고, 상기 커맨드들은 상기 커맨드들이 상기 커맨드 버퍼에 저장된 순서로 상기 스케줄러에 발행된 것인, 처리 디바이스.
  15. 제13항에 있어서, 상기 커맨드들은 사용자 모드 드라이버를 통해 상기 커맨드 버퍼에 발행된 것인, 처리 디바이스.
  16. 제8항에 있어서, 인터리빙은 프레임을 렌더링하기 전에 프레임 단위로 결정되는 것인, 처리 디바이스.
  17. 제8항에 있어서, 제1 타일의 이전 순서의 제1 서브패스의 일부분의 실행이 제2 타일의 이전 순서의 서브패스의 일부분의 실행과 시간적으로 중첩되는 것인, 처리 디바이스.
  18. 제14항에 있어서, 상기 이전 순서의 제1 서브패스의 일부분은 상기 이전 순서의 제1 서브패스의 버텍스 셰이더 스테이지, 픽셀 셰이더 스테이지 및 렌더 백엔드 스테이지 중 하나이고, 상기 제2 타일의 이전 순서의 서브패스의 일부분은 상기 버텍스 셰이더 스테이지, 상기 픽셀 셰이더 스테이지 및 상기 렌더 백엔드 스테이지 중 다른 하나인 것인, 처리 디바이스.
  19. 컴퓨터로 하여금 타일형 이미지 렌더링 방법을 실행하게 하기 위한 명령어들을 포함하는 비일시적인 컴퓨터 판독가능 매체로서, 상기 명령어들은:
    렌더링될 프레임을 복수의 타일로 분할하는 명령어;
    상기 타일들의 복수의 서브패스들을 실행하라는 커맨드들을 수신하는 명령어; 및
    상기 프레임의 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 명령어를 포함하는 것인, 컴퓨터 판독가능 매체.
  20. 제19항에 있어서 다수의 타일들의 동일한 서브패스들의 실행을 인터리빙하는 단계는 제1 타일의 이전 순서의 제1 서브패스의 실행과 상기 제1 타일의 후속 순서의 제2 서브패스의 실행 사이에 제2 타일의 이전 순서의 제1 서브패스를 실행하는 단계를 포함하는 것인, 컴퓨터 판독가능 매체.
KR1020237036342A 2021-03-26 2022-03-03 서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝 KR20230162023A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202163166956P 2021-03-26 2021-03-26
US63/166,956 2021-03-26
US17/565,394 US11880924B2 (en) 2021-03-26 2021-12-29 Synchronization free cross pass binning through subpass interleaving
US17/565,394 2021-12-29
PCT/US2022/018794 WO2022203833A1 (en) 2021-03-26 2022-03-03 Synchronization free cross pass binning through subpass interleaving

Publications (1)

Publication Number Publication Date
KR20230162023A true KR20230162023A (ko) 2023-11-28

Family

ID=83363585

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237036342A KR20230162023A (ko) 2021-03-26 2022-03-03 서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝

Country Status (6)

Country Link
US (1) US11880924B2 (ko)
EP (1) EP4315257A1 (ko)
JP (1) JP2024510626A (ko)
KR (1) KR20230162023A (ko)
CN (1) CN117063202A (ko)
WO (1) WO2022203833A1 (ko)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0922126D0 (en) * 2009-12-17 2010-02-03 Advanced Risc Mach Ltd Graphics processing systems
US8902228B2 (en) * 2011-09-19 2014-12-02 Qualcomm Incorporated Optimizing resolve performance with tiling graphics architectures
US9799088B2 (en) * 2014-08-21 2017-10-24 Qualcomm Incorporated Render target command reordering in graphics processing
US10607390B2 (en) * 2016-12-14 2020-03-31 Nvidia Corporation Techniques for tiling compute work with graphics work
US10649524B2 (en) 2017-04-07 2020-05-12 Intel Corporation Apparatus and method for foveated rendering, bin comparison and TBIMR memory-backed storage for virtual reality implementations
US10504272B2 (en) 2017-06-13 2019-12-10 Intel Corporation Apparatus and method for optimizing time/space warp for virtual reality using dynamic tiling and dirty tile marking
GB201713052D0 (en) 2017-08-15 2017-09-27 Imagination Tech Ltd Single pass rendering for head mounted displays
US10699475B1 (en) 2018-12-28 2020-06-30 Intel Corporation Multi-pass apparatus and method for early termination of graphics shading
US20220036632A1 (en) * 2020-08-03 2022-02-03 Samsung Electronics Co., Ltd. Post-processing in a memory-system efficient manner
CN112381918A (zh) * 2020-12-03 2021-02-19 腾讯科技(深圳)有限公司 图像渲染方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
EP4315257A1 (en) 2024-02-07
JP2024510626A (ja) 2024-03-08
US20220309729A1 (en) 2022-09-29
US11880924B2 (en) 2024-01-23
CN117063202A (zh) 2023-11-14
WO2022203833A1 (en) 2022-09-29

Similar Documents

Publication Publication Date Title
KR102510524B1 (ko) 조합된 월드-공간 파이프라인 셰이더 스테이지
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
JP2020506474A (ja) アウトオブオーダのピクセルシェーダのエクスポート
JP2023525725A (ja) データ圧縮の方法及び装置
US11741653B2 (en) Overlapping visibility and render passes for same frame
US11972518B2 (en) Hybrid binning
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
US10832465B2 (en) Use of workgroups in pixel shader
US20240104685A1 (en) Device and method of implementing subpass interleaving of tiled image rendering
US20220319091A1 (en) Post-depth visibility collection with two level binning
US11900499B2 (en) Iterative indirect command buffers
US20210407182A1 (en) Load instruction for multi sample anti-aliasing
US20210398349A1 (en) Fine grained replay control in binning hardware
US20240169641A1 (en) Vertex index routing through culling shader for two level primitive batch binning
US20210304488A1 (en) Sampling for partially resident textures
WO2017127198A1 (en) Bi-directional morphing of two-dimensional screen-space projections