KR20230058460A - 깊이 컬링을 지연호출하기 위한 셰이더 코어 명령 - Google Patents

깊이 컬링을 지연호출하기 위한 셰이더 코어 명령 Download PDF

Info

Publication number
KR20230058460A
KR20230058460A KR1020237010670A KR20237010670A KR20230058460A KR 20230058460 A KR20230058460 A KR 20230058460A KR 1020237010670 A KR1020237010670 A KR 1020237010670A KR 20237010670 A KR20237010670 A KR 20237010670A KR 20230058460 A KR20230058460 A KR 20230058460A
Authority
KR
South Korea
Prior art keywords
culling
shader core
shader
unit
function
Prior art date
Application number
KR1020237010670A
Other languages
English (en)
Other versions
KR102675870B1 (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 KR20230058460A publication Critical patent/KR20230058460A/ko
Application granted granted Critical
Publication of KR102675870B1 publication Critical patent/KR102675870B1/ko

Links

Images

Classifications

    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal

Landscapes

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

Abstract

셰이더 코어 명령을 실행하여 깊이 컬링을 지연 호출하는 시스템들, 장치들 및 방법들이 개시된다. 셰이더 코어는 명령을 실행하여 대응하는 드로우 호출을 완료하기 전에 하나 이상의 엔티티용 깊이 컬링 유닛에 대한 컬링 함수를 지연호출한다. 셰이더 코어는 명령을 실행한 결과로서 깊이 컬링 유닛에게 모드 및 좌표를 제공한다. 깊이 컬링 유닛은 컬링 함수를 구현하여 엔티티들에 대응하는 하나 이상의 프리미티브들이 폐색되는지 여부를 결정하기 위해 라이브 깊이 버퍼에 액세스한다. 컬링 유닛은 하나 이상의 프리미티브들을 처리하는 결과(들)에 관한 표시(들)을 셰이더 코어에 리턴한다. 예를 들어, 그 결과가 프리미티브가 폐색된 것을 나타내는 경우, 셰이더 코어는 프리미티브에 대한 드로우 호출을 취소한다.

Description

깊이 컬링을 지연호출하기 위한 셰이더 코어 명령
그래픽 프로세서들은 종종 컴퓨터 그래픽 처리 시스템들 내에서 사용되어 기하학적 모델로부터 컴퓨터 생성 이미지를 생성한다. 기하학적 모델은 가상 장면의 다양한 객체, 세부 사항, 조명 소스, 및 다른 요소를 정의한다. 계산 시스템은 기하학적 모델 및 소프트웨어 애플리케이션으로부터의 다른 입력에 기초하여 주어진 장면을 렌더링하는 방법을 결정한다. 이러한 입력들은 점, 선, 다각형, 메쉬렛(meshlet), 3차원 입체 객체, 및 다른 객체와 같은 그래픽 객체를 포함한다. 이러한 객체들은 보다 일반적으로 "프리미티브(primitive)"로 지칭될 수 있다.
그래픽 처리 유닛(GPU) 또는 다른 유형의 프로세서는 입력과 기하학적 모델을 처리하여 원하는 이미지 또는 비디오 프레임을 나타내는 픽셀 컬러 값의 2차원 또는 3차원 어레이를 생성한다. 프레임의 각 픽셀은 색상 및 텍스처를 포함한, 그와 연관된 다수의 속성을 갖는다. 보통, 셰이더는 각 픽셀의 속성에 대한 산술 및 논리 동작을 수행하는 데 사용되어 픽셀을 나타내는 최종 값을 달성한다. 셰이더는 프로그램, 고정 기능 하드웨어, 제어 로직, 또는 이들 및/또는 다른 처리 요소들의 임의의 조합일 수 있다. 최종 값은 프레임 버퍼에 배치되고 픽셀이 디스플레이 장치로 구동될 때 사용된다.
다수의 프리미티브들이 렌더링되고 스크린 상의 동일한 픽셀들에 투영될 때, 렌더링 엔진은 어떤 프리미티브가 가시적인지 그리고 어떤 프리미티브들이 숨겨지는지를 결정할 필요가 있다. 폐색(occlusion) 문제를 해결하기 위한 하나의 기법은 깊이 버퍼로 깊이 테스트를 수행하는 것을 포함한다. 스크린 상의 각각의 픽셀에 대해, 시점(viewpoint)의 관점에서 가장 가까운 물체까지의 거리가 깊이 버퍼에 저장된다. 프리미티브가 스크린 공간의 주어진 픽셀에 투영될 때, 렌더링된 프리미티브가 가장 가깝고 이전에 렌더링된 프리미티브보다 스크린(즉, 시점)에 더 가까운지를 결정하기 위해 깊이 테스트가 수행된다. 프리미티브가 이전에 렌더링된 프리미티브들보다 시점에 더 가까운 경우, 프리미티브는 테스트를 통과한다. 그렇지 않으면, 프리미티브가 임의의 이전에 렌더링된 프리미티브보다 시점에서 더 멀리 떨어져 있는 경우, 프리미티브는 테스트에 실패한다. 시점은 사용자의 시점 또는 관점을 나타내는 가상 카메라에 의해 정의된다.
다음의 개시내용은 상술한 문맥에 관한 것이지만, 본 명세서에 설명된 방법 및 메커니즘은 또한 처리량을 증가시키고, 성능을 개선하고, 전력 소비를 감소시키고, 다른 이점을 달성하기 위해 다른 상황에서 사용될 수 있다는 것을 이해해야 한다.
본 명세서에 설명된 방법 및 메커니즘의 장점은 첨부 도면을 조합하여 이하의 설명을 참조함으로써 더 잘 이해될 수 있다.
도 1은 계산 시스템의 일 구현의 블록도이다.
도 2는 계산 시스템의 다른 구현의 블록도이다.
도 3은 계산 시스템의 다른 구현의 블록도이다.
도 4는 셰이더 코어 명령어를 실행하여 깊이 컬링을 지연호출하는(invoke) 방법의 일 구현을 도시하는 일반화된 흐름도이다.
도 5는 셰이더 코어 명령어를 실행하여 깊이 컬링을 지연호출하는 방법의 일 구현을 도시하는 일반화된 흐름도이다.
도 6은 드로우 호출(draw call)을 컬링 함수 쿼리(query)로 변환하는 방법의 일 구현을 도시하는 일반화된 흐름도이다.
도 7은 컬링 유닛에 대한 쿼리를 생성할 때 엔티티를 합성하는 방법의 일 구현을 도시하는 일반화된 흐름도이다.
아래의 설명에서, 본 명세서에 제시된 방법 및 메커니즘에 대한 완전한 이해를 제공하기 위해 다양한 구체적인 세부 사항이 제시된다. 그러나, 당업자는 이러한 구체적인 세부 사항 없이 다양한 구현을 실시할 수 있음을 인식해야 한다. 일부 실례에서, 잘 알려진 구조, 구성 요소, 신호, 컴퓨터 프로그램 명령 및 기술은 본 명세서에 설명된 방법을 모호하게 하는 것을 피하기 위해 상세히 설명하지 않는다. 첨부 도면의 단순성과 명확성을 위해, 도면에 도시된 요소는 반드시 축척대로 그려진 것은 아니라는 것을 이해할 것이다. 예를 들어, 일부 요소의 크기는 다른 요소에 비해 과장될 수 있다.
셰이더 코어 명령을 실행하여 깊이 컬링을 지연호출하는 다양한 시스템들, 장치들 및 방법들이 본 명세서에 개시된다. 일 구현에서, 셰이더 코어는 명령을 실행하여 대응하는 드로우 호출을 완료하기 전에 하나 이상의 엔티티들(예를 들어, 프리미티브들, 스크린-공간 직사각형)용 깊이 컬링 유닛에서 컬링 함수를 지연호출한다. 셰이더 코어는 명령을 실행한 결과로서 깊이 컬링 유닛에게 모드 및 좌표를 제공한다. 일 구현에서, 깊이 컬링 유닛은 컬링 함수를 구현하여 라이브 깊이 버퍼에 액세스하여 하나 이상의 프리미티브가 폐색되는지 여부를 결정한다. 컬링 유닛은 하나 이상의 엔티티들을 처리한 결과(들)에 관한 표시(들)을 셰이더 코어에 리턴한다. 컬링 함수 결과(들)에 관한 표시(들)을 수신한 것에 응답하여, 셰이더 코어는 드로우 호출을 수정, 취소, 또는 계속할지 여부를 결정한다. 예를 들어, 일 구현에서, 컬링 유닛으로부터의 결과들이 프리미티브가 폐색됨을 나타내는 경우, 셰이더 코어는 프리미티브에 대한 드로우 호출을 취소한다. 컬링 유닛에 의해 생성된 결과에 따라 셰이더 코어에 의해 다른 유형의 동작이 취해질 수 있다. 따라서, 그래픽 처리 파이프라인은 드로우 호출과 연관된 임의의 불필요한 처리 작업들을 회피하여, 그래픽 처리 파이프라인의 성능을 증가시킨다.
여기서, 도 1을 참조하면, 계산 시스템(100)의 일 구현의 블록도가 도시되어 있다. 일 구현에서, 계산 시스템(100)은 적어도 프로세서(105A 내지 105N), 입력/출력(I/O) 인터페이스(120), 버스(125), 메모리 제어기(들)(130), 네트워크 인터페이스(135), 메모리 장치(들)(140), 디스플레이 제어기(150) 및 디스플레이(155)를 포함한다. 다른 구현에서, 계산 시스템(100)은 다른 구성 요소를 포함하고, 및/또는 계산 시스템(100)은 상이하게 배열된다. 프로세서(105A 내지 105N)는 시스템(100)에 포함된 임의의 수의 프로세서를 나타낸다.
일 구현에서, 프로세서(105A)는 중앙처리장치(CPU)와 같은 범용 프로세서이다. 이 구현에서, 프로세서(105A)는 시스템(100) 내의 다른 프로세서 중 하나 이상의 동작과 통신 및/또는 제어하기 위한 드라이버(110)(예를 들어, 그래픽 드라이버)를 실행한다. 상기 구현에 따라, 드라이버(110)는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 적합한 조합으로 구현될 수 있다는 점에 유의한다. 일 구현에서, 프로세서(105N)는 고도로 평행한 아키텍처를 갖는 데이터 병렬 프로세서이다. 데이터 병렬 프로세서는 그래픽 처리 유닛(GPU), 디지털신호 프로세서(DSP), 필드 프로그래밍 가능한 게이트 어레이(FPGA), 주문형 집적회로(ASIC) 등을 포함한다. 일부 구현에서, 프로세서(105A 내지 105N)는 복수의 데이터 병렬 프로세서를 포함한다. 일 구현에서, 프로세서(105N)는 디스플레이 제어기(150)에 픽셀을 제공하여 디스플레이(155)에 의해 구동되는 GPU이다.
메모리 제어기(들)(130)는 프로세서(105A 내지 105N)에 의해 액세스 가능한 임의의 수 및 유형의 메모리 제어기를 나타낸다. 메모리 제어기(들)(130)는 프로세서(105A 내지 105N)로부터 분리된 것으로 도시되어 있으며, 이는 단지 하나의 가능한 구현을 나타낸다는 것을 이해해야 한다. 다른 구현에서, 메모리 제어기(들)(130)는 하나 이상의 프로세서(105A 내지 105N)에 내장될 수 있으며 및/또는 메모리 제어기(130)는 하나 이상의 프로세서(105A 내지 105N)와 같은 동일한 반도체 코어에 위치할 수 있다. 메모리 제어기(들)(130)는 임의의 수 및 유형의 메모리 장치(140)에 결합된다. 메모리 장치(들)(140)은 임의의 수 및 유형의 메모리 장치를 나타낸다. 예를 들어, 메모리 장치(들)(140)에 있는 메모리의 유형은 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), NAND 플래시 메모리, NOR 플래시 메모리, 강유전체 랜덤 액세스 메모리(FeRAM) 또는 다른 것을 포함한다.
I/O 인터페이스(120)는 임의의 수 및 유형의 I/O 인터페이스(예를 들어, 주변 구성 요소 상호연결(PCI) 버스, PCI-확장(PCI-X), PCIE(PCI Express) 버스, 기가비트 이더넷(GBE) 버스 및 범용 직렬 버스(USB))를 나타낸다. 다양한 유형의 주변 장치(도시되지 않음)가 I/O 인터페이스(120)에 결합된다. 이러한 주변 장치는 디스플레이, 키보드, 마우스, 프린터, 스캐너, 조이스틱 또는 다른 유형의 게임 제어기, 매체 기록 장치, 외부 저장 장치, 네트워크 인터페이스 카드 등을 포함한다(그러나 이것에 국한되지 않는다). 네트워크 인터페이스(135)는 네트워크를 통해 네트워크 메시지를 수신 및 전송할 수 있다.
다양한 구현에서, 계산 시스템(100)은 컴퓨터, 랩톱, 모바일 장치, 게임기, 서버, 스트리밍 장치, 웨어러블 장치 또는 임의의 다양한 다른 유형의 계산 시스템 또는 장치이다. 계산 시스템(100)의 구성 요소 수는 구현에 따라 달라진다는 점에 유의한다. 예를 들어, 다른 구현에서, 각 구성 요소는 도 1에 도시된 수보다 더 많거나 적다. 다른 구현에서, 계산 시스템(100)은 도 1에 도시되지 않은 다른 구성 요소를 포함한다는 점에 또한 유의한다. 추가적으로, 다른 구현에서, 계산 시스템(100)은 도 1에 도시된 것과 다른 방식으로 구조화된다.
여기서, 도 2를 참조하면, 계산 시스템(200)의 다른 구현의 블록도가 도시되어 있다. 일 구현에서, 시스템(200)은 GPU(205), 시스템 메모리(225), 및 로컬 메모리(230)를 포함한다. 시스템(200)은 또한 도면을 모호하게 하는 것을 피하기 위해 도시되지 않은 다른 구성요소들을 포함할 수 있다. GPU(205)는 적어도 명령 프로세서(235), 제어 로직(240), 디스패치 유닛(250), 계산 유닛들(255A 내지 255N), 메모리 제어기(220), 글로벌 데이터 공유(270), 레벨 1(L1) 캐시(265), 및 레벨 2(L2) 캐시(260)를 포함한다. 다른 구현들에서, GPU(205)는 다른 구성요소들을 포함하고, 예시된 구성요소들 중 하나 이상을 생략하고, 단지 하나의 인스턴스만이 도 2에 도시되더라도 구성요소의 다수의 인스턴스들을 가지며, 및/또는 다른 적합한 방식들로 구성된다. 일 구현에서, GPU(205) 회로는 (도 1의) 프로세서(105N)에 포함된다.
다양한 구현에서, 계산 시스템(200)은 임의의 다양한 유형의 소프트웨어 애플리케이션을 실행한다. 주어진 소프트웨어 애플리케이션을 실행하는 것의 일부로서, 계산 시스템(200)의 호스트 CPU(미도시)는 GPU(205)에서 수행될 작업을 시작한다. 일 실시예에서, 명령 프로세서(235)는 호스트 CPU로부터 드로우 호출을 수신하고, 명령 프로세서(235)는 연산 유닛(255A 내지 255N)에 드로우 호출을 발행하기 위해 디스패치 유닛(250)을 사용한다. 주어진 메시렛에 대한 드로우 호출을 개시하는 것에 응답하여, 계산 유닛들(255A 내지 255N)은 깊이 컬링 함수를 지연호출하여 주어진 메시렛에 대한 드로우 호출을 취소, 수정 또는 실행할지 여부를 결정한다. 주어진 메시렛은 임의의 수의 정점들을 포함할 수 있다. 이들 및 다른 기술에 대한 더 많은 세부사항이 본 개시의 나머지 전반에 걸쳐 제공될 것이다.
여기서, 도 3을 참조하면, 계산 시스템(300)의 다른 구현의 블록도가 도시되어 있다. 일 구현에서, 계산 시스템(300)은 적어도 제어 유닛(305), 캐시/메모리 서브시스템(310), 셰이더 코어(320), 래스터화기(330), 컬링 유닛(340), 및 깊이 버퍼(345)를 포함한다. 제어 유닛(305)은 하나 이상의 프레임들 또는 프레임의 하나 이상의 부분들을 렌더링하는 것의 일부로서 시스템(300)의 다양한 유닛들에 의해 수행되는 처리를 조정한다. 제어 유닛(305)은 소프트웨어 및/또는 하드웨어의 임의의 적합한 조합을 사용하여 구현될 수 있다. 제어 유닛(305)은 제어 로직(305)으로도 지칭될 수 있다는 것에 유의한다. 또한, 제어 유닛(305)의 일부분들은 셰이더 코어(320) 및 컬링 유닛(340) 내에 위치할 수 있고, 제어 유닛(305)의 일부분들은 셰이더 코어(320) 및 컬링 유닛(340)의 외부에 위치할 수 있다. 시스템(300) 전체에 걸쳐 펼쳐진 임의의 적절한 제어 유닛(305) 로직의 배열이 구현될 수 있다. 계산 시스템(300)은 도면을 모호하게 하는 것을 피하기 위해 도시되지 않은 임의의 수의 다른 구성요소들(예를 들어, 메모리 디바이스, 프레임 버퍼, 디스플레이)을 포함할 수 있다.
셰이더 코어(320)는 1 내지 N 개의 임의의 수의 셰이더 유닛들(325A 내지 325N)을 포함하고, 여기서 N은 1보다 큰 양의 정수이다. 셰이더 유닛들(325A 내지 325N)은 또한 셰이더 스테이지들(325A 내지 325N)로도 지칭될 수 있다. 셰이더 유닛들(325A 내지 325N)은 정점 셰이더, 헐(hull) 셰이더, 테셀레이터(tesselator), 광 셰이더, 픽셀 셰이더, 기하구조 셰이더, 메시 셰이더, 증폭 셰이더, 도메인 셰이더, 프래그먼트 셰이더, 계산 셰이더 등과 같은 임의의 수 및 유형의 셰이더들을 포함할 수 있다는 것에 유의한다. 상이한 구현들에서 상이한 셰이더 코어들(320)은 개별 셰이더 유닛들(325A 내지 325N)의 상이한 조합들 및 배열들을 가질 수 있다. 셰이더 코어(320)는 본 명세서에서 셰이더 파이프라인(320)으로 지칭될 수 있다. 추가적으로, 컬링 유닛(340)은 또한 본 명세서에서 깊이 컬링 유닛(340)으로 지칭될 수 있다.
일 구현에서, 제어 유닛(305)은 하나 이상의 프리미티브용 셰이더 코어(320)에게 드로우 호출을 발행한다. 드로우 호출을 수신하는 것에 응답하여, 셰이더 코어(320)는 캐시/메모리 서브시스템(310)으로부터 대응 프리미티브들을 검색한다. 일 구현에서, 셰이더 코어(320)는 드로우 호출을 하는 동안 명령을 실행하여 컬링 유닛(340)에 액세스한다. 일 구현에서, 명령은 주어진 인터페이스(322A 내지 322N)에 셰이더 코어(320)의 대응 셰이더(325A 내지 325N)로부터 액세스한다. 다수의 인터페이스들(322A 내지 322N)이 도시되어 있지만, 이들은 컬링 유닛(340)이 임의의 셰이더(325A 내지 325N)로부터 액세스가능하다는 것을 나타내도록 의도된다. 즉, 인터페이스들(322A 내지 322N)은 실제로 일부 구현들에서 단일 인터페이스로 구성될 수 있다. 또한, 컬링 유닛(340)은 인터페이스(342)를 포함하여 셰이더 코어(320)로부터 명령어 및 대응 파라미터들을 수신한다
셰이더 코어(320)에 의해 실행되는 명령은 셰이더 코어(320)가 컬링 유닛(340)에 요청(query)하여 셰이딩 처리를 하는 동안 컬링 테스트를 수행하게 한다. 일 구현에서, 쿼리는 하나 이상의 프리미티브들과 연관된 하나 이상의 파라미터들을 포함한다. 다른 구현에서, 쿼리는 크기가 있는 스크린-공간 직사각형을 정의하는 파라미터들을 포함한다. 일 구현에서, 쿼리를 수신한 것에 응답하여, 컬링 유닛(340)은 깊이 버퍼(345)에 액세스함으로써 컬링 함수를 실행한다. 셰이더 코어(320)에 의해 실행되는 명령(들)에 응답하여 액세스되는 깊이 버퍼(345)는 실제 깊이 버퍼의 사본이 아닌 라이브 깊이 버퍼(345)인 것에 유의한다. 깊이 버퍼(345)는 캐시 내, 메모리 내 또는 다른 위치에 저장될 수 있다.
일 구현에서, 컬링 유닛(340)은 컬링 함수의 결과를 셰이더 코어(320)에 리턴하고, 셰이더 코어(320)는 컬링 함수의 결과에 기초하여 드로우 호출을 진행할지 여부 및/또는 진행 방법을 결정한다. 예를 들어, 일 구현에서, 프리미티브가 컬링되지 않아야 하는 셰이더 코어(320)에 컬링 유닛(340)이 표시자(indicator)를 리턴하면, 셰이더 코어(320)는 프리미티브에 대한 드로우 호출을 계속한다. 프리미티브에 대한 드로우 호출을 완료한 후, 셰이더 코어(320)는 프레임 버퍼(미도시)에 대한 셰이딩 픽셀들을 생성하는 래스터화기(330)에 기하구조를 내보낸다(export). 다른 구현에서, 래스터화기(330)는 추가 처리를 위해 픽셀들을 셰이더 코어(320)에 다시 이송한다. 컬링 유닛(340)이 주어진 프리미티브가 폐색되는 셰이더 코어(320)에 표시자를 리턴하면, 셰이더 코어(320)는 주어진 프리미티브에 대한 드로우 호출을 취소한다. 셰이더 코어(320)는 중첩된 컬링 요청들을 컬링 유닛(340)에게 발행할 수 있고, 다수의 보류 컬링 요청들을 갖는 것에 유의한다. 셰이더 코어(320)는 이러한 요청들에 대한 응답들을 수신하기 전에, 깊이 컬링 유닛으로 전송되었던 복수의 미결(outstanding) 컬링 요청들을 추적한다. 주어진 컬링 요청에 대해 응답이 수신되면, 주어진 컬링 요청은 셰이더 코어(320)에 의해 제거된다.
여기서, 도 4를 참조하면, 셰이더 코어 명령을 실행하여 깊이 컬링을 지연호출하는 방법(400)의 일 구현이 도시되어 있다. 논의를 위해, 본 구현의 단계들 및 도 5 내지 도 7의 단계들이 순차적으로 도시되어 있다. 그러나, 설명된 방법의 다양한 구현에서, 설명된 요소 중 하나 이상이 동시에 수행되거나, 도시된 것과 다른 순서로 수행되거나 전체적으로 생략될 수 있다는 점에 유의해야 한다. 또한, 다른 추가 요소가 원하는 대로 수행된다. 본 명세서에 설명된 임의의 다양한 시스템 또는 장치들은 방법(400)을 구현하도록 구성된다.
드로우 호출이 셰이더 코어에 의해 수신된다(405 블록). 일 구현에서, 드로우 호출은 하나 이상의 프리미티브들, 또는 그 일부들에 대한 것이다. 드로우 호출을 수신한 후, 셰이더 코어는 명령을 실행하여 깊이 컬링 유닛에서 컬링 함수를 지연호출한다(410 블록). 다음으로, 깊이 컬링 유닛은 셰이더 코어 명령에 의해 지연호출된 컬링 함수를 실행한다(415 블록). 일 구현에서, 컬링 함수는 프리미티브의 픽셀들, 서브-픽셀들, 조각들, 또는 다른 부분들이 관찰자에게 가장 가까워지는지 또는 다른 프리미티브의 이전에 렌더링된 픽셀들에 의해 숨겨지는지 여부를 결정한다. "컬링 함수" 는 또한 "깊이 테스트"또는 "폐색 컬링 함수"로도 지칭될 수 있다는 것에 유의한다. 다른 구현에서, 절두체(frustum) 컬링, 배면(backface) 컬링, 작은 프리미티브 컬링, 깊이 경계(bound) 컬링, 또는 다른 유형의 컬링 동작을 실행하기 위한 함수와 같은 다른 컬링 함수들이 채용될 수 있다. 일반적으로 말해, "컬링 함수"는, 프리미티브가 사용자에게 제시되는 최종 이미지에 효과를 갖지 않거나, (예를 들어, 보이지 않을) 상대적으로 작은 효과를 갖는다고 판단되는 경우, 후속 셰이딩 동작들에서 프리미티브를 제거하거나 드롭하기 위한 프로세스로 정의된다.
다음으로, 깊이 컬링 유닛은 컬링 함수의 결과를 셰이더 코어로 다시 전송한다(420 블록). 각 쿼리에 대해, 깊이 컬링 유닛이 컬링이 발생해야 함을 나타내는 경우(조건 블록(425)에서, "예"인 경우), 셰이더 코어는 드로우 호출을 수정하거나 취소한다(430 블록). 셰이더 코어는 또한 430 블록에서 드로우 호출과 연관된 임의의 프리미티브들을 폐기할 수 있다. 이는 셰이더 코어를 통해 이동하고 처리된 프리미티브들의 수를 감소시킨다. 그렇지 않으면, 깊이 컬링 유닛이 컬링이 발생하지 않아야 함을 나타내는 경우(조건 블록(430)에서 "예"인 경우), 셰이더 코어는 드로우 호출을 계속한다(435 블록). 깊이 컬링 유닛은 임의의 가시적 프리미티브들에 기초하여 새로운 깊이 값들을 갖는 스크린 픽셀들에 대한 깊이 버퍼를 업데이트할 수 있다는 점에 유의한다. 430 및 435 블록 이후, 방법(400)은 종료된다.
여기서, 도 5를 참조하면, 셰이더 코어 명령을 실행하여 깊이 컬링을 지연호출하는 방법(500)의 일 구현이 도시되어 있다. 셰이더 코어는 명령을 실행하여 깊이 컬링 유닛에 의한 깊이 컬링을, 하나 이상의 엔티티(예를 들어, 프리미티브, 스크린-공간 직사각형)에 대해 지연호출한다(505 블록). 명령 실행의 일부로서, 셰이더 코어는 하나 이상의 엔티티에 대한 적어도 모드 및 좌표를 깊이 컬링 유닛에 전송한다(510 블록). 예를 들어, 일 구현에서, 셰이더 코어 명령은 깊이 컬링 유닛으로 전달되는 다음의 파라미터들: geometry_cull_quad <output>, <screen min XY>, <screen max XY>, <depth min>, <depth max>를 포함한다. 다른 구현에서, 셰이더 코어 명령은 깊이 컬링 유닛 으로 전달되는 다음의 파라미터들을 포함한다; geometry_cull_triangle <output>, <vertex 0 XYZ>, <vertex 1 XYZ>, <vertex 2 XYZ>. 다른 구현들에서, 셰이더 코어 명령은 다른 파라미터들을 포함하고/하거나 다른 적합한 방식들로 포맷된다.
다음으로, 깊이 컬링 유닛은 라이브 깊이 버퍼에 액세스하여 엔티티들에 대응하는 하나 이상의 프리미티브가 폐색되었는지 여부를 결정한다(515 블록). 다음으로, 깊이 컬링 유닛은, 각 프리미티브별로, 프리미티브가 컬링되어야 하는지 여부를 나타내는 셰이더 코어에 결과(예를 들어, 부울 결과(Boolean result), 커버리지 결과)를 리턴한다(520 블록). 일 구현에서, 깊이 컬링 유닛은 상이한 상세 수준(level-of-detail)을 선택하는 데 유용한, 부분적으로 커버된 값을 리턴한다. 이는, 예를 들어, 프리미티브가 대부분 숨겨진 경우 발생할 수 있다. 520 블록 이후, 방법(500)은 종료된다. 일 구현에서, 셰이더 코어는 깊이 컬링 유닛에 의해 제공된 결과(들)을 사용하여, 하나 이상의 프리미티브들에 대한 드로우 호출들을 수정, 취소 또는 계속할지 여부를 결정할 것이다.
여기서, 도 6을 참조하면, 드로우 호출을 컬링 함수 쿼리로 변환하는 방법(600)의 일 구현이 도시되어 있다. 드로우 호출은 제어 유닛(예를 들어, 도 3의 제어 유닛(305))에 의해 수신된다(605 블록). 제어 유닛은 하드웨어 및/또는 소프트웨어의 임의의 적합한 조합을 사용하여 구현될 수 있다. 드로우 호출을 수신한 것에 응답하여, 제어 유닛은 드로우 호출의 일부로서 컬링 함수 쿼리를 발행한다(610 블록). 다음으로, 컬링 함수는 컬링 유닛(예를 들어, 도 3의 컬링 유닛(340))에서 실행된다(615 블록). 쿼리의 결과에 기초하여, 드로우 호출 또는 드로우 호출의 일부분들은 파이프라인의 나머지 부분에 걸쳐 상이하게 폐기되거나 처리될 수 있다(620 블록). 다시 말해서, 컬링 함수의 결과가 하나 이상의 프리미티브들(또는 그의 일부들)이 상이하게 컬링되거나 처리되어야 함을 나타내는 경우, 그에 따라 셰이더 코어는 하나 이상의 프리미티브들에 대해 드로우 호출을 수정한다. 예를 들어, 증폭 셰이더는 컬링 쿼리 결과에 기초하여 드로우 호출의 일부분을 취소할 수 있다. 다른 예에서, 메시 셰이더는 컬링 쿼리의 결과에 기초하여 개별 프리미티브들을 폐기할 수 있다. 그렇지 않으면, 컬링 쿼리의 결과가 프리미티브(들)이 컬링되지 않아야 함을 나타내는 경우, 드로우 호출은 프리미티브(들)에 대해 셰이더 코어에 의해 수정되지 않은 형태로 실행된다. 620 블록 이후, 방법(600)은 종료된다.
여기서, 도 7을 참조하면, 컬링 유닛에 대한 쿼리를 생성할 때 엔티티를 합성하는 방법(700)의 일 구현이 도시되어 있다. 드로우 호출은 그래픽 드라이버에서 셰이더 코어로 이송된다(705 블록). 일 실시예에서, "드로우 호출"은 하나 이상의 프리미티브들을 렌더링하는 요청으로 정의되며, 그 요청은 그래픽 애플리케이션 프로그래밍 인터페이스(API)와 호환된다. 다음으로, 셰이더 코어는 컬링 유닛에 질의하기 위해 엔티티를 합성한다(즉, 계산한다)(710 블록). 일 실시예에서, 엔티티는 크기가 있는 스크린-공간 직사각형이다. 예를 들어, 일 실시예에서, 증폭 셰이더는 드로우 호출에 의해 참조된 하나 이상의 프리미티브를 캡슐화하는 스크린-공간 경계 박스를 합성한다. 다음으로, 셰이더 코어는 컬링 유닛에 쿼리를 전송하고, 여기서 쿼리는 셰이더 코어에 의해 합성된 엔티티를 포함하거나 참조한다(715 블록). 일 구현에서, 엔티티가 스크린-공간 경계 박스인 경우, 쿼리는 스크린-공간 경계 박스의 최소 및 최대 값들을 특정한다.
컬링 유닛은 쿼리를 수신한 것에 응답하여 엔티티에 대한 하나 이상의 테스트를 수행한다(720 블록). 예를 들어, 일 구현에서, 쿼리에 의해 정의된 엔티티가 프리미티브일 때, 컬링 유닛은 Z-평면(즉, 깊이 평면)에 대해 프리미티브를 체크한다. 다른 구현에서, 쿼리에 의해 정의된 엔티티가 스크린-공간 직사각형인 경우, 컬링 유닛은 직사각형을 계층적 타일(HTile) 에 대해 체크한다. HTile은 픽셀 블록(예를 들어, 8 x 8 픽셀 블록)에 대한 깊이 정보를 저장한다. 다음으로, 컬링 유닛은 하나 이상의 테스트의 결과를 셰이더 코어에 전송한다(725 블록). 다음으로, 셰이더 코어는 하나 이상의 테스트의 결과에 기초하여 컬링을 결정한다(730 블록). 예를 들어, 일 구현에서, 셰이더 코어는 컬링 유닛으로부터 수신된 결과들에 기초하여 드로우 호출의 일부 또는 전체를 수정할지 여부에 대한 결정을 한다. 일 구현에서, 계산 셰이더는 그 결과에 기초하여 간접적인 드로우를 수행할 때 전체 드로우 호출을 중지하도록 결정할 수 있다. 다른 구현에서, 기하구조, 헐, 증폭, 또는 계산 셰이더는 개별 프리미티브들을 컬링할 수 있다. 추가 구현에서, 기하구조, 헐, 또는 증폭 셰이더는 프리미티브를 보다 적거나 전혀 생성하지 않도록 결정할 수 있다. 예를 들어, 이 구현에서, 셰이더가 임계량(예를 들어, 90%)에 의해 커버되는 것으로 식별되는 지형(terrain) 타일을 렌더링하는 경우, 전체 메시를 생성하는 대신 비교적 적은 수의 삼각형을 사용하여 근사가 수행된다. 다른 구현들에서, 컬링 유닛 결과들에 응답하는 다른 방식들이 가능하고 고려된다. 730 블록 이후, 방법(700)은 종료된다.
다양한 구현에서, 소프트웨어 애플리케이션의 프로그램 명령은 본 명세서에 설명된 방법 및/또는 메커니즘을 구현하기 위해 사용된다. 예를 들어, 일반적인 프로세서 또는 특수 목적 프로세서에 의해 실행 가능한 프로그램 명령이 고려된다. 다양한 구현에서, 이러한 프로그램 명령은 높은 레벨의 프로그래밍 언어에 의해 표현된다. 다른 구현에서, 프로그램 명령은 높은 레벨의 프로그래밍 언어에서 이진법, 중간체 또는 다른 형태로 컴파일된다. 또한, 프로그램 명령은 하드웨어의 동작이나 설계를 설명하도록 작성된다. 이러한 프로그램 명령은 C 언어와 같은 높은 레벨 프로그래밍 언어에 의해 표현된다. 또한, Verilog와 같은 하드웨어 설계 언어(HDL)가 사용된다. 다양한 구현에서, 프로그램 명령은 임의의 다양한 비일시적 컴퓨터 판독가능한 저장 매체에 저장된다. 저장 매체는 사용과정에 계산 시스템에 의해 액세스가능하여 프로그램을 실행하기 위해 계산 시스템에 프로그램 명령을 제공할 수 있다. 일반적으로 말하면, 이러한 계산 시스템은 적어도 하나 이상의 메모리 및 프로그램 명령을 실행하도록 구성된 하나 이상의 프로세서를 포함한다.
전술한 구현은 구현의 비제한적인 예일뿐이라는 것이 강조되어야 한다. 상기 개시 내용이 완전히 이해되면, 당업자는 복수의 변형 및 수정이 명백해질 것이다. 이하의 특허청구범위는 이러한 모든 변형 및 수정을 포함하도록 해석되는 것으로 의도된다.

Claims (20)

  1. 장치로서,
    인터페이스; 및
    셰이더 코어를 포함하되,
    상기 장치는
    상기 셰이더 코어가 드로우 호출을 수신하고;
    상기 셰이더 코어가 명령을 실행하여 상기 드로우 호출용 컬링 유닛에서 컬링 함수를 지연호출하고; 및
    상기 인터페이스를 통해 수신된 표시자에 기초하여 상기 드로우 호출을 취소, 계속 또는 수정할지 여부를 결정하도록 구성되는, 장치.
  2. 제1항에 있어서, 상기 컬링 유닛은 상기 컬링 함수를 실행하여 라이브 깊이 버퍼에 액세스하도록 구성되는, 장치.
  3. 제2항에 있어서, 상기 컬링 유닛은 상기 셰이더 코어에 의해 합성된 엔티티 상에서 상기 컬링 함수를 실행하도록 구성되는, 장치.
  4. 제1항에 있어서, 상기 표시는 부울 값 또는 커버리지 값인, 장치.
  5. 제1항에 있어서, 상기 셰이더 코어는 상기 명령을 실행한 결과로서 모드 및 좌표를 상기 컬링 유닛에 제공하도록 더 구성되는, 장치.
  6. 제1항에 있어서, 상기 셰이더 코어는 상기 명령을 실행하는 메시 셰이더를 포함하는, 시스템.
  7. 제1항에 있어서, 상기 셰이더 코어는 상기 컬링 유닛으로 전송되었던 복수의 미결(outstanding) 컬링 요청들을 추적하도록 더 구성되는, 장치.
  8. 방법으로서,
    셰이더 코어가, 드로우 호출을 수신하는 단계;
    셰이더 코어가 명령을 실행하여 드로우 호출용 컬링 유닛에서 컬링 함수를 지연호출하는 단계; 및
    인터페이스를 통해 수신된 표시에 기초하여 상기 드로우 호출을 취소, 계속 또는 수정할지 여부를 결정하는 단계를 포함하는, 방법.
  9. 제8항에 있어서, 상기 컬링 유닛이 상기 컬링 함수를 실행하여 라이브 깊이 버퍼에 액세스하는 단계를 더 포함하는, 방법.
  10. 제9항에 있어서, 상기 컬링 유닛이 상기 셰이더 코어에 의해 합성된 엔티티 상에서 상기 컬링 함수를 실행하는 단계를 더 포함하는, 방법.
  11. 제8항에 있어서, 상기 표시는 부울 값 또는 커버리지 값인, 방법.
  12. 제8항에 있어서, 상기 셰이더 코어가 상기 명령을 실행한 결과로서 모드 및 좌표를 상기 컬링 유닛에 제공하는 단계를 더 포함하는, 방법.
  13. 제8항에 있어서, 메시 셰이더가 상기 명령을 실행하는 단계를 더 포함하는, 방법.
  14. 제8항에 있어서, 상기 셰이더 코어가, 상기 컬링 유닛으로 전송되었던 복수의 미결 컬링 요청을 추적하는 단계를 더 포함하는, 방법.
  15. 시스템으로서,
    깊이 버퍼를 저장하는 메모리;
    컬링 유닛; 및
    셰이더 코어를 포함하되, 상기 셰이더 코어는,
    메시렛용 드로우 호출을 수신하고;
    명령을 실행하여 상기 메시렛용 상기 컬링 유닛에서 컬링 함수를 지연호출하고; 및
    인터페이스를 통해 수신된 표시에 기초하여 상기 드로우 호출을 취소, 계속 또는 수정할지 여부를 결정하도록 구성되는, 시스템.
  16. 제15항에 있어서, 상기 컬링 유닛은 상기 컬링 함수를 실행하여 상기 깊이 버퍼에 액세스하도록 구성되는, 시스템.
  17. 제16항에 있어서, 상기 컬링 유닛은 상기 셰이더 코어에 의해 합성된 엔티티에서 상기 컬링 함수를 실행하도록 구성되는, 시스템.
  18. 제15항에 있어서, 상기 표시는 부울 값 또는 커버리지 값인, 시스템.
  19. 제15항에 있어서, 상기 셰이더 코어는 상기 명령을 실행한 결과로서 모드 및 좌표를 상기 컬링 유닛에 제공하도록 더 구성되는, 시스템.
  20. 제15항에 있어서, 상기 셰이더 코어는 상기 컬링 유닛으로 전송되었던 복수의 미결 컬링 요청들을 추적하도록 더 구성되는, 시스템.
KR1020237010670A 2020-08-31 2021-08-27 깊이 컬링을 지연호출하기 위한 셰이더 코어 명령 KR102675870B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/007,935 US11481967B2 (en) 2020-08-31 2020-08-31 Shader core instruction to invoke depth culling
US17/007,935 2020-08-31
PCT/US2021/047914 WO2022047136A1 (en) 2020-08-31 2021-08-27 Shader core instruction to invoke depth culling

Publications (2)

Publication Number Publication Date
KR20230058460A true KR20230058460A (ko) 2023-05-03
KR102675870B1 KR102675870B1 (ko) 2024-06-17

Family

ID=77897751

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237010670A KR102675870B1 (ko) 2020-08-31 2021-08-27 깊이 컬링을 지연호출하기 위한 셰이더 코어 명령

Country Status (6)

Country Link
US (1) US11481967B2 (ko)
EP (1) EP4205082A1 (ko)
JP (1) JP7515008B2 (ko)
KR (1) KR102675870B1 (ko)
CN (1) CN116018620A (ko)
WO (1) WO2022047136A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116188243A (zh) * 2023-03-02 2023-05-30 格兰菲智能科技有限公司 图形绘制流水线管理方法和图形处理器

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5729672A (en) 1993-07-30 1998-03-17 Videologic Limited Ray tracing method and apparatus for projecting rays through an object represented by a set of infinite surfaces
US7746355B1 (en) * 2007-01-24 2010-06-29 Vivante Corporation Method for distributed clipping outside of view volume
US9214006B2 (en) * 2013-06-04 2015-12-15 Arm Limited Hidden surface removal in graphics processing systems
US9123168B2 (en) * 2013-01-30 2015-09-01 Qualcomm Incorporated Output ordering of domain coordinates for tessellation
US9189883B1 (en) 2014-02-27 2015-11-17 Pixar Rendering of multiple volumes
US10083541B2 (en) 2014-03-13 2018-09-25 Imagination Technologies Limited Object illumination in hybrid rasterization and ray traced 3-D rendering
US10089779B2 (en) * 2016-04-01 2018-10-02 Intel Corporation Apparatus and method for conservative rasterization of polygons
US10068307B2 (en) * 2016-05-20 2018-09-04 Intel Corporation Command processing for graphics tile-based rendering
GB2551388B (en) 2016-06-17 2021-01-27 Geomerics Ltd Graphics processing systems
US20180082464A1 (en) * 2016-09-16 2018-03-22 Tomas G. Akenine-Moller Apparatus and method for an efficient 3d graphics pipeline
US11379941B2 (en) * 2016-09-22 2022-07-05 Advanced Micro Devices, Inc. Primitive shader
US10943389B2 (en) * 2016-12-09 2021-03-09 Advanced Micro Devices, Inc. Removing or identifying overlapping fragments after z-culling
US10417815B2 (en) 2017-01-27 2019-09-17 Advanced Micro Devices, Inc. Out of order pixel shader exports
US10417787B2 (en) * 2017-02-15 2019-09-17 Microsoft Technology Licensing, Llc Index buffer block compression
US10636201B2 (en) 2017-05-05 2020-04-28 Disney Enterprises, Inc. Real-time rendering with compressed animated light fields
US10311016B2 (en) 2017-05-30 2019-06-04 Arm Limited Hidden surface removal in graphics processing systems
US10692270B2 (en) 2017-08-18 2020-06-23 Microsoft Technology Licensing, Llc Non-divergent parallel traversal of a bounding volume hierarchy
US10573055B2 (en) * 2017-08-31 2020-02-25 Intel Corporation Apparatus and method for a programmable depth stencil graphics pipeline stage
US10878611B2 (en) * 2018-01-26 2020-12-29 Nvidia Corporation Techniques for pre-processing index buffers for a graphics processing pipeline
US10846915B2 (en) * 2018-03-21 2020-11-24 Intel Corporation Method and apparatus for masked occlusion culling
US10789675B2 (en) 2018-12-28 2020-09-29 Intel Corporation Apparatus and method for correcting image regions following upsampling or frame interpolation
US10981059B2 (en) * 2019-07-03 2021-04-20 Sony Interactive Entertainment LLC Asset aware computing architecture for graphics processing
US11551398B2 (en) 2019-11-15 2023-01-10 Advanced Micro Devices, Inc. Light volume rendering

Also Published As

Publication number Publication date
US20220068012A1 (en) 2022-03-03
KR102675870B1 (ko) 2024-06-17
EP4205082A1 (en) 2023-07-05
US11481967B2 (en) 2022-10-25
WO2022047136A1 (en) 2022-03-03
JP7515008B2 (ja) 2024-07-11
JP2023539808A (ja) 2023-09-20
CN116018620A (zh) 2023-04-25

Similar Documents

Publication Publication Date Title
EP3008701B1 (en) Using compute shaders as front end for vertex shaders
JP6377842B2 (ja) 位置限定シェーディングパイプライン
JP6073533B1 (ja) タイルベースのアーキテクチャ上での最適化されたマルチパスレンダリング
US20170004647A1 (en) Rendering graphics data on demand
EP3353746B1 (en) Dynamically switching between late depth testing and conservative depth testing
WO2016025113A1 (en) Bandwidth reduction using texture lookup by adaptive shading
US10068366B2 (en) Stereo multi-projection implemented using a graphics processing pipeline
US11631187B2 (en) Depth buffer pre-pass
KR20110016938A (ko) 기하 셰이더를 사용하는 테셀레이션 엔진을 위한 시스템, 방법, 및 컴퓨터 프로그램 제품
KR102675870B1 (ko) 깊이 컬링을 지연호출하기 위한 셰이더 코어 명령
JP2023501692A (ja) ライトボリュームレンダリング
US11887245B2 (en) Techniques for rendering signed distance functions
US20240087078A1 (en) Two-level primitive batch binning with hardware state compression
JP2023530309A (ja) ビニングハードウェアにおけるきめ細かなリプレイ制御

Legal Events

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