KR20220100877A - 대역폭 테셀레이션 팩터 감소 - Google Patents

대역폭 테셀레이션 팩터 감소 Download PDF

Info

Publication number
KR20220100877A
KR20220100877A KR1020227016239A KR20227016239A KR20220100877A KR 20220100877 A KR20220100877 A KR 20220100877A KR 1020227016239 A KR1020227016239 A KR 1020227016239A KR 20227016239 A KR20227016239 A KR 20227016239A KR 20220100877 A KR20220100877 A KR 20220100877A
Authority
KR
South Korea
Prior art keywords
patches
patch
tessellation factors
graphics
fetcher
Prior art date
Application number
KR1020227016239A
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 KR20220100877A publication Critical patent/KR20220100877A/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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

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

Abstract

그래픽 파이프라인은 그래픽 메모리에 기록되고 그래픽 메모리로부터 판독되는 테셀레이션 팩터들의 수를 감소시킨다. 헐 셰이더 스테이지는 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한지 여부, 그리고 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값 - 이는 복수의 패치들이 컬링될 것임을 표시하지 않거나 복수의 패치들이 그래픽 파이프라인의 테셀레이터 스테이지로 패스될 것임을 표시하지 않음 - 을 갖는지 여부를 검출한다. 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일하다고 검출하는 것에 응답하여, 헐 셰이더 스테이지는 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 서브세트를 그래픽 메모리에 기록하는 것을 바이패스함에 따라, 대역폭을 감소시키고 그래픽 파이프라인의 효율을 증가시킨다.

Description

대역폭 테셀레이션 팩터 감소
그래픽 처리 유닛(graphics processing unit; GPU)은 일련의 프로그램가능한 셰이더들 및 고정 함수 하드웨어 블록들로 형성된 그래픽 파이프라인을 사용하여 3차원(3-D) 그래픽을 처리한다. 예를 들어, 프레임에서 보이는 객체의 3-D 모델은 사용자에게 디스플레이하기 위한 픽셀들의 값들을 생성하도록 그래픽 파이프라인에서 처리되는 삼각형들, 다른 다각형들, 또는 패치들(patches)의 세트에 의해 나타내어질 수 있다. 삼각형들, 다른 다각형들, 또는 패치들은 프리미티브들(primitives)이라고 총칭된다. 처리는 테셀레이션 처리에 의해 생성되는 프리미티브들의 그래뉼러리티(granularity)를 특정하는 테셀레이팅 팩터들에 의해 표시되는 바와 같은 더 미세한 수준들의 디테일을 나타내기 위해 테셀레이팅 팩터들을 프리미티브들에 맵핑하는 것을 포함한다. GPU는 테셀레이션 팩터들이 그래픽 파이프라인에서 처리되고 있는 프리미티브들로의 맵핑에 이용가능하도록 테셀레이션 팩터들을 저장하기 위해 사용되는 전용 메모리를 포함한다. 전용 GPU 메모리에 저장된 테셀레이션 팩터들은 데이터를 절차적으로 생성함으로써 대입된다. 전용 GPU 메모리는 통상적으로 비교적 작은 메모리이며, 이는 전용 GPU 메모리에 저장될 수 있는 테셀레이션 팩터들의 양을 제한한다. 더 나아가, 테셀레이션 팩터들을 메모리에 기록하고 메모리로부터 테셀레이팅 팩터들을 판독하는 데 필요한 오버헤드가 상당할 수 있다.
본 개시는 첨부 도면들을 참조하여 더 잘 이해될 수 있고, 이의 많은 특징 및 이점이 당업자들에게 분명해진다. 상이한 도면들에서의 동일한 참조 부호들의 사용은 유사하거나 동일한 항목들을 나타낸다.
도 1은 일부 실시예들에 따라 디스플레이에 출력을 위해 의도되는 시각적 이미지들을 생성하기 위한 그래픽 처리 유닛(GPU)을 포함하는 처리 시스템의 블록도이다.
도 2는 일부 실시예들에 따라 감소된 양의 테셀레이션 팩터들을 저장하고 메모리로부터 리트리브(retrieve)하면서 3차원(3D) 장면들의 래스터화된 이미지들을 생성하도록 고차 지오메트리 프리미티브들을 처리 가능한 그래픽 파이프라인을 도시한다.
도 3은 일부 실시예들에 따라 도 2의 그래픽 파이프라인의 헐 셰이더가 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링(culling)될 것임을 표시하는 값을 갖는다고 검출하는 것에 응답하여 테셀레이션 팩터들을 메모리에 기록하는 것을 바이패스하고 표시를 그래픽 파이프라인의 패치 페처로 발송하는 것을 도시한다.
도 4은 일부 실시예들에 따라 도 2의 그래픽 파이프라인의 헐 셰이더가 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 그래픽 파이프라인의 테셀레이터 스테이지로 패스될 것임을 표시하는 값을 갖는다고 검출하는 것에 응답하여 테셀레이션 팩터들을 메모리에 기록하는 것을 바이패스하고 표시를 그래픽 파이프라인의 패치 페처로 발송하는 것을 도시한다.
도 5는 일부 실시예들에 따라 도 2의 그래픽 파이프라인의 헐 셰이더가 테셀레이션 팩터의 단일 인스턴스를 메모리에 기록하고, 단일의 테셀레이션 팩터가 패치들에 대한 모든 테셀레이션 팩터들에 적용된다는 표시를 그래픽 파이프라인의 패치 페처로 발송하는 것을 도시한다.
도 6은 일부 실시예들에 따라 단일 워드로 패키징된 패치에 대한 복수의 테셀레이션 팩터들을 도시한다.
도 7은 일부 실시예들에 따라 테셀레이션 팩터들의 적어도 서브세트를 메모리에 기록하는 것을 바이패스하기 위한 방법을 나타내는 흐름도이다.
3차원(3-D) 그래픽을 처리하기 위한 그래픽 파이프라인은 메모리 및 일련의 프로그램가능한 셰이더들에 의해 지원되는 고정 함수 하드웨어 블록 배열들로 형성된다. 이러한 배열들은 일반적으로 Direct 3D 11, Microsoft DX 11/12 또는 Khronos Group OpenGL/Vulkan API들의 규격들에 명시된 것과 같은 그래픽 애플리케이션 프로그래밍 인터페이스(API) 처리 순서에 의해 특정된다. 그래픽 파이프라인의 일 예는 장면의 3-D 모델을 나타내는 패치들과 같은 고차 프리미티브들에 대해 동작하는 버텍스 셰이더 및 헐 셰이더를 사용하여 구현되는 지오메트리 프론트 엔드를 포함한다.
지오메트리 프론트 엔드는 헐 셰이더에 의해 생성된 곡면 패치들 및 테셀레이션 팩터들과 같은 고차 프리미티브들을, 일부 실시예들에서 고정 함수 하드웨어 블록으로서 구현되는 테셀레이터에 제공한다. 테셀레이션은 디테일이 제어 파라미터들에 기초하여 3D 다각형 메시로부터 동적으로 가산 및 감산될 수 있게 한다. 테셀레이터는 3D 다각형 메시의 미세도를 제어하는 테셀레이션 파라미터들(본원에서 테셀레이션 팩터들로도 지칭됨)에 기초하여 입력 고차 프리미티브들로부터 (삼각형들, 선들, 및 점들과 같은) 저차 프리미티브들을 생성한다. 테셀레이션은 원래의 3D 다각형 메시에 의해 생성되는 것보다 더 매끄러운 표면들을 생성할 수 있게 한다. 다각형들과 같은 저차 프리미티브들은 상호연결된 버텍스들로 형성된다. 예를 들어, 메시와 같은 공통 객체들은 세 개의 버텍스들로 형성된 복수의 삼각형들을 포함한다. 저차 프리미티브들은 저차 프리미티브들을 복제, 셰이딩 또는 세분하기 위해 지오메트리 셰이더를 포함하는 지오메트리 백엔드에 제공된다. 예를 들어, 대량의 헤어 생성은 지오메트리 셰이더의 기능을 통해 제공될 수 있다.
객체 공간에서의 기하학적 워크로드를 핸들링하는 그래픽 파이프라인의 부분에 의해 생성되는 프리미티브들의 버텍스들은 예를 들어, 프리미티브, 버텍스, 및 인덱스 버퍼들 뿐만 아니라 캐시 메모리 버퍼들을 통해, 이미지 공간에서의 픽셀 워크로드들을 핸들링하는 부분에 제공된다. 픽셀 부분은 입력 지오메트리 프리미티브들로부터 프래그먼트들 또는 픽셀들을 생성하기 위해 프리미티브들에 대해 컬링, 래스터화, 깊이 테스팅, 컬러 블렌딩 등을 수행하기 위해 프로그램가능 픽셀 셰이더들과 조합되는 고정 함수 하드웨어의 배열들을 포함한다. 프래그먼트들은 일부 경우들에서 개별 픽셀들 또는 서브픽셀들이다. 그 후, 프로그램가능 픽셀 셰이더는 디스플레이를 위해 장면 프레임 이미지와 병합하기 위해 프래그먼트들을 셰이딩한다.
도 1 내지 도 7은 그래픽 처리 파이프라인들의 효율 및 대역폭을 개선하기 위한 시스템들 및 기법들을 개시한다. 일부 실시예들에서, 그래픽 메모리에 테셀레이션 팩터들을 기록하는 것 및 이로부터 테셀레이션 팩터들을 판독하는 것을 바이패스하는 방법은 그래픽 처리 유닛(GPU)의 그래픽 처리 파이프라인의 헐 셰이더에서, 패치에 대한 모든 테셀레이션 팩터들, 또는 스레드 그룹에서의 모든 패치들에 대한 테셀라이션 팩터들의 적어도 임계 백분율이 동일한 값을 갖는지 여부, 그리고 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임 또는 스레드 그룹의 패치들이 테셀레이터로 패스될 것임 중 어느 하나를 나타내는지 여부를 검출하는 단계를 포함한다. 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임을 표시하면(본원에서 테셀레이션 팩터들이 0의 값을 갖는 것으로 지칭됨), 헐 셰이더는 그래픽 메모리에 테셀레이션 팩터들을 기록하는 것을 바이패스하고, 스레드 그룹에 대한 테셀레이트 팩터들이 폐기될 것임을 표시하는 메시지를 패치 페처로 발송한다. 패치 페처는 메시지를 수신하는 것에 응답하여, 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리로부터 판독하는 것을 바이패스하고, 스레드 그룹의 패치들을 폐기한다.
헐 셰이더가 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하면(본원에서 테셀레이션 팩터들이 1의 값을 갖는 것으로 지칭됨), 헐 셰이더는 스레드 그룹에 대한 그래픽 메모리에 테셀레이션 팩터들을 기록하는 것을 바이패스하고, 스레드 그룹에 대한 테셀레이트 팩터들이 스레드 그룹에 대한 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하는 메시지를 패치 페처로 발송한다. 패치 페처는 메시지를 수신하는 것에 응답하여, 테셀레이션 팩터들을 그래픽 메모리로부터 판독하는 것을 바이패스하고, 스레드 그룹의 패치들을 테셀레이터 스테이지로 패스한다.
일부 실시예들에서, 헐 셰이더가 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 서로 동일하지만 0도 아니고 1도 아닌 값들을 갖는다고 결정하면, 헐 셰이더는 테셀레이션 팩터들의 값의 단일 인스턴스를 메모리에 기록하고, 그래픽 메모리에 저장된 테셀레이션 팩터들의 단일 값이 스레드 그룹의 패치들에 대한 테셀레이션 팩터들 모두에 적용됨을 표시하는 메시지를 패치 페처로 발송한다. 패치 페처는 메시지를 수신하는 것에 응답하여, 그래픽 메모리로부터 단일 테셀레이션 팩터를 판독하고, 패치들을 테셀레이터에 제공하기 전에 스레드 그룹에서의 패치들 각각에 단일 테슬레이션 팩터를 적용한다.
스레드 그룹의 패치들에 대한 테셀레이션 팩터들이 서로 동일한 값들을 갖지 않으면, 일부 실시예들에서, 헐 페처는 단일 워드에서의 패치에 대한 하나보다 많은 압축된 테셀레이션 팩터를 그래픽 메모리에 기록하기 위해 정수 압축을 수행한다. 예를 들어, 등치선 패치는 두 개의 테셀레이션 팩터들과 연관된다. 이에 따라, 일부 실시예들에서, 헐 페처는 등치선 패치에 대한 테셀레이션 팩터들 양자를 단일 워드로 그래픽 메모리에 기록한다. 유사하게, 삼각형 패치는 네 개의 테셀레이션 팩터들과 연관된다. 일부 실시예들에서, 헐 페처는 삼각형 패치와 연관된 네 개의 테셀레이션 팩터들 모두를 단일 워드로 그래픽 메모리에 기록한다. 쿼드 패치는 여섯 개의 테셀레이션 팩터들과 연관된다. 일부 실시예들에서, 헐 페처는 쿼드 패치와 연관된 세 개의 제1 테셀레이션 팩터들을 제1 단일 워드로 그래픽 메모리에 기록하고, 쿼드 패치와 연관된 나머지 세 개의 테셀레이션 팩터들을 제2 단일 워드로 그래픽 메모리에 기록한다.
각 패치 프리미티브 유형(예를 들어, 등치선, 삼각형, 및 쿼드)은 두 개, 네 개, 또는 여섯 개의 테셀레이션 팩터들과 연관된다. 특히, 0 또는 1 과 동일한 테셀레이션 팩터들에 대해, 테셀레이션 팩터들을 사용하여 생성되는 테셀레이트된 프리미티브들의 그래뉼러리티의 임의의 감소에 의해 절감되는 것보다 더 많은 대역폭이 테셀레이터 팩터들을 그래픽 메모리에 그리고 이로부터 기록 및 판독하는 데 소비될 수 있다. 그래픽 메모리에 기록되고 이로부터 판독되는 데이터의 양을 감소시킴으로써, 그래픽 처리 파이프라인은 GPU의 대역폭 및 효율을 개선한다.
도 1은 일부 실시 예들에 따라 감소된 대역폭 테셀레이션 팩터들을 구현하기 위한 처리 시스템(100)의 블록도이다. 처리 시스템(100)은 시스템 데이터 버스(112)에 의해 함께 통신가능하게 결합된 중앙 처리 유닛(CPU)(102), 시스템 메모리(104), 그래픽 처리 유닛(GPU)(108)을 포함하는 그래픽 처리 서브시스템(106), 및 디스플레이 디바이스(110)를 포함한다. 도시된 바와 같이, 시스템 데이터 버스(112)는 CPU(102), 시스템 메모리(104), 및 그래픽 처리 서브시스템(106)을 연결한다. 다른 실시예들에서, 시스템 메모리(104)는 CPU(102)에 직접 연결된다. 일부 실시예들에서, CPU(102), 그래픽 처리 서브시스템(106)의 부분들, 시스템 데이터 버스(112), 또는 이들의 임의의 조합은 단일 처리 유닛으로 통합된다. 나아가, 일부 실시예들에서, 그래픽 처리 서브시스템(106)의 기능은 칩셋 또는 일부 다른 유형의 특수 목적 처리 유닛 또는 코프로세서에 포함된다.
CPU(102)는 시스템 메모리(104)에 저장된 프로그래밍 명령어들을 실행하고, 시스템 메모리(104)에 저장된 데이터에 대해 동작하고, 명령어들 및/또는 데이터(예를 들어, 완료할 작업 또는 태스크들)를 완료할 그래픽 처리 유닛(108)에 발송하며, GPU(108)가 작업을 완료하도록 그래픽 처리 서브시스템(106)의 부분들을 구성한다. 일부 실시예들에서, 시스템 메모리(104)는 CPU(102) 및 그래픽 처리 서브시스템(106)에 의한 처리를 위한 프로그래밍 명령어들 및 데이터를 저장하기 위한 동적 랜덤 액세스 메모리(DRAM)를 포함한다.
다양한 실시예들에서, CPU(102)는 GPU(108)에서 처리하도록 의도된 명령어들을 커맨드 버퍼들로 발송한다. 일부 실시예들에서, 커맨드 버퍼는 예를 들어, 시스템 데이터 버스(112)에 결합된 시스템 메모리(104)에 위치된다. 다른 실시예들에서, CPU(102)는 GPU(108)에 대해 의도된 그래픽 커맨드들을 시스템 데이터 버스(112)에 통신가능하게 결합된 별개의 메모리로 발송한다. 커맨드 버퍼는 GPU(108)로의 입력을 포함하는 그래픽 커맨드들의 스트림을 일시적으로 저장한다. 그래픽 커맨드들의 스트림은 예를 들어, 하나 이상의 커맨드 패킷 및/또는 하나 이상의 상태 업데이트 패킷을 포함한다. 일부 실시예들에서, 커맨드 패킷은 디스플레이를 위해 출력될 이미지 데이터에 대한 처리들을 실행할 것을 GPU(108)에 명령하는 드로우 커맨드(draw command)(상호교환가능하게 "드로우 호출(draw call)"이라고도 지칭됨)를 포함한다. 예를 들어, 드로우 커맨드는 GPU(108)에 메모리에 저장된(예를 들어, 버텍스 버퍼에 정의된) 하나 이상의 버텍스의 그룹에 의해 정의되는 픽셀들을 렌더링할 것을 명령한다. 하나 이상의 버텍스의 그룹에 의해 정의되는 지오메트리는 일부 실시예들에서, 렌더링될 복수의 프리미티브들에 대응한다.
GPU(108)는 CPU(102)로부터 송신되는 작업을 수신하고 처리한다. 예를 들어, 다양한 실시예들에서, GPU(108)는 이를테면 하나 이상의 그래픽 파이프라인(114)을 사용함으로써, 디스플레이 디바이스(110) 상에 그래픽 이미지들을 렌더링 및 디스플레이하기 위한 작업을 처리한다. 그래픽 파이프라인(114)은 고정 함수 스테이지들 및 프로그램가능 셰이더 스테이지들을 포함한다. 고정 함수 스테이지들은 GPU의 고정 함수 파이프라인에 포함된 전형적인 하드웨어 스테이지들을 포함한다. 프로그램가능 셰이더 스테이지들은 스트리밍 멀티프로세서들을 포함한다. 스트리밍 멀티프로세서들 각각은 비교적 많은 수의 스레드들을 동시에 실행할 수 있다. 나아가, 스트리밍 멀티프로세서들 각각은 선형 및 비선형 데이터 변환들, 비디오 및/또는 오디오 데이터의 필터링, 모델링 동작들(예를 들어, 객체들의 위치, 속도, 및 다른 속성들을 결정하기 위한 물리학의 적용) 등을 포함하지만 이에 제한되지 않는 매우 다양한 애플리케이션들에 관한 처리 태스크들을 실행하도록 프로그램가능하다. 다른 실시예들에서, 그래픽 처리 서브시스템(106)은 비그래픽 처리에 사용된다.
또한 도시된 바와 같이, 시스템 메모리(104)는 애플리케이션 프로그램(116)(예를 들어, 운영 체제 또는 다른 애플리케이션), 애플리케이션 프로그래밍 인터페이스(API)(118), 및 GPU 드라이버(120)를 포함한다. 애플리케이션 프로그램(116)은 통상적으로 원하는 결과들의 세트를 그래픽 이미지들의 시퀀스의 형태로 생성하기 위한 API(118)에 대한 호출을 생성한다. 그래픽 처리 서브시스템(106)은 GPU(108)를 그래픽 메모리(124)에 통신가능하게 결합시키는 GPU 데이터 버스(122)를 포함한다. 다양한 실시예들에서, GPU는 메모리 동작들을 위해 그래픽 메모리(124) 및 시스템 메모리(104)를 임의의 조합으로 사용한다. CPU(102)는 GPU(108)가 작업을 실행하도록 이들 메모리들의 일부들을 할당한다. 예를 들어, 다양한 실시예들에서, GPU(108)는 CPU(102)로부터 명령어들을 수신하고, 명령어들을 처리하여 그래픽 데이터 및 이미지들을 렌더링하고, 이미지들을 그래픽 메모리(124)에 저장한다. 후속하여, GPU(108)는 그래픽 메모리(124)에 저장된 그래픽 이미지들을 디스플레이 디바이스(110) 상에 디스플레이한다. 그래픽 메모리(124)는 GPU(108)에 의해 사용되는 데이터 및 프로그래밍을 저장한다. 도 1에 도시된 바와 같이, 그래픽 메모리(124)는 디스플레이 디바이스(110)를 구동하기 위한 데이터를 저장하는 프레임 버퍼(126)를 포함한다.
다양한 실시예들에서, GPU(108)는 이를테면, 단일 명령어, 다중 데이터(single-instruction, multiple-data, SIMD) 실행 모델에 따라, 웨이브프론트(wavefront)에서의 다른 스레드들의 실행과 동시에 스레드를 실행하는 하나 이상의 처리 유닛(130)을 포함하는 하나 이상의 처리 코어(128)와 같은 하나 이상의 컴퓨트 유닛을 포함한다. 처리 유닛들(130)은 또한 상호교환가능하게 SIMD 유닛들이라고도 지칭된다. SIMD 실행 모델은 다수의 프로세싱 요소들이 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고, 이에 따라 동일한 프로그램을 실행하지만, 이러한 프로그램을 상이한 데이터로 실행할 수 있는 것이다. GPU(108)의 처리 코어들(128)은 또한 상호교환가능하게 셰이더 코어들 또는 스트리밍 멀티프로세서(SMX)들이라고도 지칭된다. GPU(108)에서 구현되는 처리 코어들(128)의 수는 설계 선택의 문제이다.
하나 이상의 처리 코어(128) 각각은 인입 데이터를 처리하기 위해 특정 작업 항목의 각 인스턴스화를 실행하며, 여기서, 하나 이상의 처리 코어(128)에서의 기본 실행 유닛은 작업 항목(예를 들어, 스레드)이다. 각 작업 항목은 예를 들어, 병렬로 실행될 커맨드에 의해 디바이스 상에서 호출되는 커널의 병렬 실행 집합의 단일 인스턴스화를 나타낸다. 작업 항목은 처리 코어(128)에서 실행되는 스레드 그룹(예를 들어, 작업 그룹)의 일부로서 하나 이상의 처리 요소에 의해 실행된다. 다양한 실시예들에서, GPU(108)는 단일 처리 유닛(130)을 발행하고 실행한다. 다수의 웨이브프론트들은 동일한 프로그램을 실행하도록 지정된 작업 항목 집합을 포함하는 "스레드 그룹"에 포함된다. 스레드 그룹은 스레드 그룹을 구성하는 웨이브프론트들 각각을 실행함으로써 실행된다. 일부 실시예들에서, 웨이브프론트들은 단일 SIMD 유닛(130) 상에서 순차적으로, 또는 상이한 SIMD 유닛들 상에서 부분적으로 또는 전체적으로 병렬로 실행된다. 다른 실시예들에서, 스레드 그룹으로부터의 모든 웨이브프론트들은 동일한 처리 코어(128)에서 처리된다. 웨이브프론트들은 또한 상호교환가능하게 워프(warp)들, 벡터들, 또는 스레드들이라고도 지칭된다. 일부 실시예들에서, 웨이브프론트들은 셰이더 프로그램의 병렬 실행의 인스턴스들을 포함하며, 여기서 각 웨이브프론트는 SIMD 패러다임에 따라 단일 처리 유닛(130)(예를 들어, 다중 데이터를 갖는 동일한 명령어들의 스트림을 실행하는 하나의 명령어 제어 유닛) 상에서 인라인(in line)으로 실행되는 다수의 작업 항목들을 포함한다. 스케줄러(132)는 상이한 처리 코어들(128) 및 처리 유닛들(130) 상에서 다양한 웨이브프론트들을 스케줄링하는 것과 관련된 동작들을 수행할 뿐만 아니라, 그래픽 처리 서브시스템(106) 상에서 다양한 작업들을 편성(orchestrating)하기 위한 다른 동작들을 수행한다.
하나 이상의 처리 코어(128)에 의해 제공되는 병렬 처리는 그래픽 관련 동작들 이를테면 픽셀 값 계산, 버텍스 변환, 테셀레이션, 지오메트리 셰이딩 동작들, 및 다른 그래픽 동작들에 적합하다. 그래픽 파이프라인(114)은 CPU(102)로부터 그래픽 처리 커맨드들을 수용하고, 이에 따라 계산 작업들을 병렬 실행을 위해 하나 이상의 처리 코어(128)에 제공한다. 일부 그래픽 파이프라인 동작들, 이를테면 픽셀 처리 및 다른 병렬 계산 동작들은 동일한 커맨드 스트림 또는 컴퓨트 커널이 입력 데이터 요소들의 스트림들 또는 컬렉션들에 대해 수행될 것을 필요로 한다. 동일한 컴퓨트 커널의 각 인스턴스화는 이러한 데이터 요소들을 병렬로 처리하기 위해 하나 이상의 처리 코어(128)에서의 다수의 처리 유닛들(130) 상에서 동시에 실행된다. 본원에서 지칭될 때, 예를 들어, 컴퓨트 커널은 프로그램에 선언되고 처리 코어(128) 상에서 실행되는 명령어들을 포함하는 함수이다. 이러한 함수는 또한 커널, 셰이더, 셰이더 프로그램, 또는 프로그램으로 지칭된다.
도 2와 관련하여 아래에서 더 상세히 설명되는 바와 같이, GPU(108)는 그래픽 메모리(124)에 기록되고 이로부터 판독되는 테셀레이션 팩터들의 수를 감소시키는 그래픽 파이프라인(114)을 포함한다. 추상적인 패치 유형들은 등치선, 삼각형, 및 쿼드를 포함한다. 등치선 패치는 두 개의 테셀레이션 팩터들에 의해 정의되는 수평 선이다. 삼각형 패치는 총 네 개의 테셀레이션 팩터들에 대해, 세 개의 외측 테셀레이션 팩터들 및 하나의 내측 테셀레이트 팩터에 의해 정의되는 삼각형이다. 쿼드 패치는 총 여섯 개의 테셀레이션 팩터들에 대해, 네 개의 외측 테셀레이션 팩터들 및 두 개의 내측 테셀레이션 팩터들에 의해 정의되는 정사각형이다. 일부 실시예들에서, 각 테셀레이션 팩터는 32 비트들을 포함한다. 이에 따라, 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들 모두를 그래픽 메모리(124)에 기록하는 것 및 그래픽 메모리(124)로부터 스레드 그룹의 패치들에 대한 테셀레이션 팩터들 모두를 판독하는 것은 상당한 대역폭을 소비한다. 그래픽 파이프라인(114)은 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한지 여부, 및 일부 실시예들에서, 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 0인지(즉, 패치들이 컬링될 것임을 표시하는지) 또는 1인지(예를 들어, 패치들이 그래픽 파이프라인(114)의 테셀레이터 스테이지로 패스될 것을 표시하는지)를 검출한다. 일부 실시예들에서, 임계치는 프로그램가능하고, 비교적 높은 값, 이를테면 98%로 설정된다. 스레드 그룹에 대한 테셀레이션 팩터들의 임계 백분율이 동일하다는 것(또는, 추가적으로, 일부 실시예들에서, 테셀레이션 팩터들의 임계 백분율이 0 또는 1 중 어느 하나라는 것)을 검출하는 것에 응답하여, 그래픽 파이프라인(114)은 패치들의 스레드 그룹에 대해 테셀레이션 팩터들의 적어도 서브세트를 그래픽 메모리(124)로 그리고 이로부터 기록 및 판독하는 것을 바이패스함에 따라, 그래픽 파이프라인(114)의 대역폭을 감소시키고 효율을 증가시킨다.
도 2는 일부 실시예들에 따라 감소된 양의 테셀레이션 팩터들을 저장하고 메모리로부터 리트리브(retrieve)하면서 3차원(3D) 장면들의 래스터화된 이미지들을 생성하도록 고차 지오메트리 프리미티브들을 처리 가능한 그래픽 파이프라인을 도시한다. 도 2는 GPU와 연관된 다양한 요소들 및 파이프라인 스테이지들을 도시한다. 일부 실시예들에서, 그래픽 파이프라인은 도 2에 도시되지 않은 다른 요소들 및 스테이지들을 포함한다. 또한, 도 2는 단지 개략적이고, 예를 들어, 일부 실시예들에서, 도시된 기능 유닛들 및 파이프라인 스테이지들은 이들이 도 2에서 별개의 스테이지들로서 개략적으로 도시되지만, 실제로 하드웨어 회로들을 공유한다는 점을 유념해야 한다. 또한, 그래픽 처리 파이프라인(200)의 스테이지들, 요소들 및 유닛들 각각은 원하는 대로 구현되고, 이에 따라, 예를 들어, 연관된 동작 및 기능들을 수행하기 위한 적절한 회로 및/또는 처리 로직을 포함한다는 것이 이해될 것이다.
다양한 실시예들에서, 그래픽 처리 파이프라인(200)은 가상 공간(때때로 본원에서 "월드 스페이스(world space)"이라고 지칭됨)에서의 3차원 지오메트리를 갖지만, 잠재적으로 2차원 지오메트리를 갖는 장면을 묘사하는 이미지들로서 그래픽을 렌더링하도록 구성된다. 그래픽 처리 파이프라인(200)은 통상적으로 3차원 장면의 표현을 수신하고, 표현을 처리하며, 2차원 래스터 이미지를 출력한다. 그래픽 처리 파이프라인(200)의 이들 스테이지들은 기하학적 프리미티브의 종점들(또는 버텍스들)에서의 초기 속성들인 데이터를 처리하며, 여기서 프리미티브는 렌더링되는 객체에 대한 정보를 제공한다. 3차원 그래픽에서의 통상적인 프리미티브들은 삼각형들 및 선들을 포함하며, 여기서 이들 지오메트릭 프리미티브들의 버텍스들은 예를 들어, x-y-z 좌표들, 텍스처, 및 반사율에 대한 정보를 제공한다.
그래픽 처리 파이프라인(200)에 걸쳐, 데이터는 하나 이상의 메모리 유닛 - 도 2에서 개괄적으로 그래픽 메모리(210)라고 표기됨 - 으로부터 판독되고 이에 기록된다. 그래픽 메모리(210)는 버퍼들을 구현하고 테셀레이션 팩터들, 버텍스 데이터, 텍스처 데이터 등을 저장하기 위해 사용되는 하나 이상의 메모리 또는 캐시의 계층 구성을 포함한다. 그래픽 메모리(210)는 도 1에 도시된 시스템 메모리(104)의 일부 실시예들을 사용하여 구현된다.
그래픽 메모리(210)는 렌더링 파이프라인에서 이용되는 다양한 버퍼들 및/또는 그래픽 자원들을 포함하여, 비디오 메모리, 및/또는 하드웨어 상태 메모리를 포함한다. 다양한 실시예들에서, 그래픽 메모리(210)의 하나 이상의 개별 메모리 유닛은 렌더링 시 특정 스테이지에서의 데이터의 특성에 따라, 하나 이상의 비디오 랜덤 액세스 메모리 유닛(들), 하나 이상의 캐시, 하나 이상의 프로세서 레지스터 등으로서 구현된다. 이에 따라, 그래픽 메모리(210)는 그래픽 처리 파이프라인(200)에서 이용되는 임의의 프로세서 액세스가능 메모리를 지칭한다는 것이 이해된다. 특수 GPU와 같은 처리 유닛은 파이프라인에서 다양한 동작들을 수행하고, 이에 따라 그래픽 메모리(210)에 판독/기록하도록 구성된다.
그래픽 처리 파이프라인(200)의 초기 스테이지들은 장면이 래스터화되고 픽셀 디스플레이 디바이스 상의 출력에 적합한 이산적 화상 요소들의 세트로서의 스크린 공간으로 변환되기 전에 월드 스페이스에서 수행되는 동작들을 포함한다. 그래픽 처리 파이프라인(200)에 걸쳐, 그래픽 메모리(210)에 포함된 다양한 자원들이 파이프라인 스테이지들에서 활용되고, 스테이지들에 대한 입력들 및 출력들은 이미지들의 최종 값들이 결정되기 전에 그래픽 메모리(210)에 포함된 버퍼들에 일시적으로 저장된다.
입력 어셈블러 스테이지(220)는 장면의 모델의 부분들을 나타내는 객체들을 정의하기 위해 사용되는 그래픽 메모리(210)로부터의 정보에 액세스하도록 구성된다. 예를 들어, 다양한 실시예들에서, 입력 어셈블러 스테이지(220)는 사용자 충전 버퍼들로부터 프리미티브 데이터(예를 들어, 점들, 선들 및/또는 삼각형들)를 판독하고, 데이터를 그래픽 처리 파이프라인(200)의 다른 파이프라인 스테이지들에 의해 사용될 프리미티브들로 어셈블한다. 본원에서 사용될 때, "사용자"라는 용어는 그래픽 처리 파이프라인(200)에 렌더링하기 위한 셰이더 코드 및 3차원 객체들을 제공하는 애플리케이션 프로그램(116) 또는 다른 엔티티를 지칭한다. 입력 어셈블러 스테이지(220)는 사용자 충전 버퍼들에 포함된 프리미티브 데이터에 기초하여 버텍스들을 여러 상이한 프리미티브 유형들(예를 들어, 선 리스트들, 삼각형 스트립들, 또는 인접성을 갖는 프리미티브들)로 어셈블하고, 어셈블된 프리미티브들을 그래픽 처리 파이프라인(200)의 나머지에 의한 사용을 위해 포맷팅한다.
다양한 실시예들에서, 그래픽 처리 파이프라인(200)은 월드 스페이스에 셋업되고 장면에서의 좌표들에 대해 정의되는 지오메트리를 갖는 버텍스들의 세트에 의해 정의되는 하나 이상의 가상 객체에 대해 동작한다. 예를 들어, 그래픽 처리 파이프라인(200)에서 이용된 입력 데이터는 버텍스들이 본 개시의 양태들에 따라 렌더링 파이프라인에서 처리된 프리미티브들에 대응하는 장면 지오메트리의 다각형 메시 모델을 포함하고, 초기 버텍스 지오메트리는 CPU에 의해 구현되는 애플리케이션 스테이지 동안 그래픽 메모리에서 셋업된다.
버텍스 처리 스테이지(230)는 월드 스페이스 지오메트리에서 객체들의 버텍스들을 처리하기 위한 다양한 계산들을 포함한다. 일부 실시예들에서, 버텍스 처리 스테이지(230)는 버텍스 셰이더 계산들 - 이들은 위치 값들(예를 들어, X-Y 좌표 및 Z 깊이 값들), 컬러 값들, 조명 값들, 텍스처 좌표들 등과 같은 장면에서의 버텍스들의 다양한 파라미터 값들을 조작함 - 을 수행하기 위한 버텍스 셰이더 스테이지(232)를 포함한다. 바람직하게는, 버텍스 셰이더 계산들은 하나 이상의 프로그램가능 버텍스 셰이더(232)에 의해 수행된다. 버텍스 셰이더 계산들은 객체가 오버랩하는 각 구역에 대해 고유하게 수행되고, 객체 구역 인덱스는 객체가 사용하는 렌더링 콘텍스트 및 연관된 파라미터들, 및 이에 따라, 버텍스 값들이 추후 래스터화를 위해 어떻게 조작되어야 하는지를 결정하기 위해 버텍스 셰이딩 동안 이용된다. 다양한 실시예들에서, 버텍스 셰이더 스테이지(232)는 소프트웨어로 구현되고, 입력으로서 프리미티브의 단일 버텍스를 논리적으로 수신하며, 단일 버텍스를 출력한다. 버텍스 셰이더들의 일부 실시예들은 다수의 버텍스들이 동시에 처리되도록 단일 명령어 다중 데이터(SIMD) 처리를 구현한다.
버텍스 처리 스테이지(230)는 또한 프리미티브들을 세분하고 월드 스페이스에서의 새로운 버텍스들 및 새로운 지오메트리들을 생성하는 추가적인 버텍스 처리 계산들을 선택적으로 포함한다. 도시된 실시예에서, 버텍스 처리 스테이지(230)는 버텍스 셰이더 스테이지(232), 헐 셰이더 스테이지(233), 패치 페처(234), 테셀레이터 스테이지(235), 도메인 셰이더 스테이지(236), 및 지오메트리 셰이더 스테이지(237)를 포함한다. 헐 셰이더 스테이지(233)는 입력 패치들을 정의하기 위해 사용되는 입력 고차 패치들 또는 제어 지점들에 대해 동작한다. 헐 셰이더 스테이지(233)는 테셀레이션 팩터들 및 다른 패치 데이터를 출력한다. 헐 셰이더 스테이지(233)에 의해 생성된 프리미티브들은 패치 페처(234)에 의해 테셀레이터 스테이지(235)에 제공될 수 있다. 테셀레이터 스테이지(235)는 헐 셰이더 스테이지(233)로부터 객체들(패치들과 같은)을 수신하고, 예를 들어, 입력 객체들을 헐 셰이더 스테이지(233)에 의해 테셀레이터(235)에 제공되는 테셀레이션 팩터들에 기초하여 테셀레이팅함으로써, 입력 객체에 대응하는 프리미티브들을 식별하는 정보를 생성한다. 테셀레이션은 패치들과 같은 입력 고차 프리미티브들을, 예를 들어, 테셀레이션 처리에 의해 생성되는 프리미티브들의 그래뉼러리티를 특정하는 테셀레이션 팩터들에 의해 표시되는 바에 따라, 더 미세한 수준들의 디테일을 나타내는 보다 저차 출력 프리미티브들의 세트로 세분한다. 이에 따라, 장면의 모델은 (메모리 또는 대역폭을 절감하기 위해) 보다 적은 수의 고차 프리미티브들에 의해 나타내어질 수 있고, 추가적인 디테일들은 보다 고차 프리미티브를 테셀레이팅함으로써 추가될 수 있다.
도메인 셰이더 스테이지(236)는 도메인 위치 및, 일부 구현들에서, 다른 패치 데이터를 입력한다. 도메인 셰이더 스테이지(236)는 제공되는 정보에 대해 동작하고, 입력 도메인 위치 및 다른 정보에 기초하여 출력할 단일 버텍스를 생성한다. 지오메트리 셰이더 스테이지(237)는 입력 프리미티브를 수신하고, 입력 프리미티브에 기초하여 지오메트리 셰이더(237)에 의해 생성되는 네 개 이하의 프리미티브들을 출력한다. 일부 실시예들에서, 지오메트리 셰이더 스테이지(237)는 그래픽 메모리(210)로부터 버텍스 데이터를 리트리브하고, 그래픽 메모리(210)에서의 버텍스 데이터로부터 선들 및 삼각형들과 같은 새로운 그래픽 프리미티브들을 생성한다. 특히, 지오메트리 셰이더 스테이지(237)는 프리미티브에 대한 버텍스 데이터를 전체로서 리트리브하고, 0개 이상의 프리미티브를 생성한다. 예를 들어, 지오메트리 셰이더 스테이지(237)는 세 개의 버텍스들을 갖는 삼각형 프리미티브에 대해 동작할 수 있다.
버텍스 처리 스테이지(230)가 완료되면, 장면은 그래픽 메모리(210)에 저장된 버텍스 파라미터 값들의 세트를 각각 갖는 버텍스들의 세트에 의해 정의된다. 특정 구현들에서, 버텍스 처리 스테이지(230)로부터 출력된 버텍스 파라미터 값들은 상이한 구역들에 대해 상이한 동차 좌표들로 정의되는 위치들을 포함한다.
그 후, 그래픽 처리 파이프라인(200)은 래스터화 처리 스테이지들(240)로 진행한다. 래스터화 처리 스테이지들(240)은 셰이딩 동작들, 및 클립핑(clipping), 원근 분할(perspective dividing), 시저링(scissoring), 및 뷰포트 선택(viewport selection) 등과 같은 다른 동작들을 수행한다. 다양한 실시예들에서, 래스터화 처리 스테이지들(240)은 장면 지오메트리를 스크린 공간 및 이산적 화상 요소들(예를 들어, 그래픽 처리 파이프라인 동안 사용되는 픽셀들)의 세트로 변환한다(그러나, 픽셀이라는 용어는 픽셀이 최종 디스플레이 버퍼 이미지에서의 디스플레이 픽셀 값에 대응한다는 것을 반드시 의미하지는 않음). 가상 공간 지오메트리는 월드 스페이스로부터 래스터라이저에 의해 샘플링된 복수의 이산적 스크린 공간 픽셀들로 구성되는 장면의 뷰잉 윈도우(또는 "뷰포트")로의 객체들 및 버텍스들의 투영을 계산하는 동작들을 통해 스크린 공간 지오메트리로 변환된다. 본 개시의 양태들에 따르면, 스크린 영역은 상이한 렌더링 파라미터들을 갖는 복수의 별개의 구역들을 포함하며, 이들은 상이한 구역들에 대해 상이한 래스터화 파라미터들을 포함한다.
도면에 도시된 래스터화 처리 스테이지(240)는 프리미티브 어셈블리 스테이지(242)를 포함하며, 이는 장면에서의 버텍스들의 각 세트에 의해 정의되는 프리미티브들을 셋업한다. 각 버텍스는 버텍스 인덱스에 의해 정의되고, 각 프리미티브는 이들 버텍스 인덱스들에 대해 정의되고 그래픽 메모리(210) 내의 인덱스 버퍼들에 저장된다. 프리미티브들은 각각 세 개의 버텍스들에 의해 정의되는 적어도 삼각형들을 포함해야 하지만, 또한 지점 프리미티브들, 선 프리미티브들, 및 다른 다각형 형상들을 포함해야 한다. 프리미티브 어셈블리 스테이지(242) 동안, 특정 프리미티브들은 컬링된다. 예를 들어, 버텍스 인덱스들 및 동차 좌표 공간 위치들이 특정 와인딩(winding) 순서를 표시하는 이들 프리미티브들은 뒷면인 것으로 고려되고, 이에 따라 장면으로부터 컬링된다. 프리미티브 어셈블리 스테이지(242)는 또한 프리미티브 버텍스들에 대한 스크린 공간 변환을 포함하며, 이는 스크린 영역의 상이한 구역들에 대한 상이한 스크린 공간 변환 파라미터들을 포함할 수 있다.
래스터화 처리 스테이지(240)는 클립핑, 원근 분할을 수행하여 지점들을 동차 공간으로 변환하고, 버텍스들을 뷰포트에 매핑한다. 래스터 데이터는 정수 위치(integer location)들로 스냅핑(snapping)되며, 이들은 그 후 (최소 픽셀 수를 끌어내기 위해) 컬링되고 클립핑되며, (버텍스당 속성들로부터) 픽셀당 속성들이 보간된다. 이러한 방식으로, 래스터화 처리 스테이지(240)는 어느 픽셀 프리미티브들이 오버랩하는지를 결정하고, 프리미티브들을 클립핑하고 픽셀 셰이더에 대한 프리미티브들을 준비하며, 픽셀 셰이더 스테이지(250)를 어떻게 호출할지를 결정한다.
전통적인 지오메트리 파이프라인들에서, 헐 셰이더 스테이지(233)는 모든 패치들에 대한 모든 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하고, 패치 페처(234)는 그래픽 메모리(210)로부터 모든 패치들에 대한 모든 테셀레이션 팩터들을 판독하며, 이는 컴퓨팅 자원들을 낭비하고 처리 병목을 생성할 수 있다. 예를 들어, 테셀레이션 팩터들 모두 또는 높은 백분율이 동일한 큰 런들이 빈번하게 존재한다. 헐 셰이더 스테이지(233)는 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한지 여부를 검출한다. 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 경우, 일부 실시예들에서, 헐 셰이더 스테이지(233)는 또한, 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임(예를 들어, 0의 값을 가짐)을 또는 스레드 그룹의 패치들이 테셀레이터 스테이지(235)로 패스될 것임(예를 들어, 1의 값을 가짐)을 표시하는 값을 갖는지를 검출한다. 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일하다고 검출하는 것에 응답하여, 헐 셰이더 스테이지(233)는 테셀레이션 팩터들의 적어도 서브세트를 그래픽 메모리(210)에 기록하는 것을 바이패스한다. 예를 들어, 패치들의 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 모두 0 또는 1의 동일한 값을 갖는다고 검출하는 것에 응답하여, 헐 셰이더 스테이지(233)는 패치 페처(234)에 메시지를 발송한다. 헐 셰이더 스테이지(233)는 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스하고, 패치 페처(234)는 메시지를 수신하는 것에 응답하여 그래픽 메모리(210)으로부터 테셀레이션 팩터들을 판독하는 것을 바이패스한다. 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일하지만, 0 또는 1 과 동일하지 않다고 검출하는 것에 응답하여, 헐 셰이더 스테이지(233)는 그래픽 메모리(210)에 테셀레이션 팩터들의 대부분의 값의 단일 인스턴스를 기록하고, 그래픽 메모리(210)에 저장된 테셀레이션 팩터들의 단일 값이 스레드 그룹의 패치들 모두에 적용된다는 것을 나타내는 메시지를 패치 페처(234)로 발송한다.
도 3은 일부 실시예들에 따라 도 2의 그래픽 파이프라인의 헐 셰이더 스테이지(233)가 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스하고 스레드 그룹에 대한 모든 테셀레이션 팩터들이 스레드 그룹의 패치들이 컬링될 것임을 표시하는 값을 갖는다는 표시를 그래픽 파이프라인의 패치 페처(234)로 발송하는 것을 도시한다. 헐 셰이더 스테이지(233)가 스레드 그룹의 패치들에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임을 표시하는 값을 갖는다(예를 들어, 0의 값을 갖는다)고 검출하는 것에 응답하여, 헐 셰이더 스테이지(233)는 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스한다.헐 셰이더 스테이지(233)는 또한, 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들 모두가 스레드 그룹의 패치들이 컬링될 것임을 표시하는(예를 들어, 0과 동일한) 값을 갖는다는 것을 표시하는 메시지(302)를 패치 페처(234)로 발송한다. 패치 페처(234)는 메시지(302)를 수신하는 것에 응답하여, 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리(210)로부터 판독하는 것을 바이패스한다. 패치 페처(234)는 추가적으로, 제로 컬 패치들의 테셀레이션 팩터 때문에, 스레드 그룹의 패치들을 테셀레이터 스테이지(미도시)로 전달하는 것이 아니라 스레드 그룹들의 패치들을 폐기한다.
도 4는 일부 실시예들에 따라 도 2의 그래픽 파이프라인의 헐 셰이더 스테이지(233)가 스레드 그룹에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하는 값을 갖는다고 검출하는 것에 응답하여 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스하고 표시를 그래픽 파이프라인의 패치 페처(234)로 발송하는 것을 도시한다. 헐 셰이더 스테이지(233)가 스레드 그룹의 패치들에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하는 값을 갖는다(예를 들어, 1의 값을 갖는다)고 검출하는 것에 응답하여, 헐 셰이더 스테이지(233)는 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스한다. 헐 셰이더 스테이지(233)는 또한, 스레드 그룹의 패치들에 대한 테셀레이션 팩터들이 스레드 그룹의 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하는(예를 들어, 1과 동일한) 값을 갖는다는 것을 나타내는 메시지(402)를 패치 페처(234)로 발송한다. 패치 페처(234)는 메시지(402)를 수신하는 것에 응답하여, 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리(210)로부터 판독하는 것을 바이패스한다. 패치 페처(234)는 추가적으로, 스레드 그룹의 패치들을 언롤링하고, 그 패치들을 테셀레이터(미도시)로 패스한다.
도 5는 일부 실시예들에 따라 도 2의 그래픽 파이프라인의 헐 셰이더 스테이지(233)가 테셀레이션 팩터의 값의 단일 인스턴스를 그래픽 메모리(210)에 기록하고, 단일의 테셀레이션 팩터 값이 패치들에 대한 모든 테셀레이션 팩터들에 적용된다는 표시를 그래픽 파이프라인의 패치 페처(234)로 발송하는 것을 도시한다. 패치(506)와 연관된 테셀레이션 팩터들 모두가 동일한 값을 갖는다고 검출하는 것에 응답하여, 헐 셰이더 스테이지(233)는 패치에 대한 테셀레이션 팩터들 모두를 그래픽 메모리(210)에 기록하는 것을 바이패스한다. 대신에, 헐 셰이더 스테이지(233)는 테셀레이션 팩터(502)의 단일 인스턴스를 그래픽 메모리(210)에 기록하고, 테셀레이트 팩터 값의 단일 인스턴스가 패치(506)에 대응하는 모든 테셀레이션 팩터들에 적용됨을 표시하는 플래그(504)를 패치 페처(234)로 발송한다. 패치 페처(234)는 플래그(504)를 수신하는 것에 응답하여, 그래픽 메모리(210)로부터 패치(506) 및 테셀레이션 팩터(502)의 단일 인스턴스를 판독한다. 패치 페처(234)는 테셀레이션 팩터(502)에 패치(506)에 대응하는 모든 테셀레이트 팩터들에 적용하고, 패치(506) 및 테셀레이션 팩터(502)를 테셀레이터 스테이지(235)에 제공하며, 이는 테셀레이션 팩터를 사용하여 최종 프리미티브들을 생성한다.
도 6은 일부 실시예들에 따라 단일 워드로 패키징된 패치에 대한 복수의 테셀레이션 팩터들을 도시한다. 일부 실시예들에서, 헐 셰이더 스테이지는 테셀레이션 팩터들을 32-비트 워드들로 그래픽 메모리에 기록한다. 각 테셀레이션 팩터는 0 과 64 사이의 값을 갖는다. 따라서, 각 테셀레이션 팩터는 8 비트를 사용하여 기록될 수 있다. 그래픽 메모리(210)에 기록되고 이로부터 판독되는 워드들의 수를 감소시키기 위해, 일부 실시예들에서, 헐 셰이더 스테이지(미도시)는 복수의 테셀레이션 팩터들을 단일 워드로 패키징한다. 예를 들어, 등치선 패치는 두 개의 테셀레이션 팩터들을 갖는다. 헐 셰이더 스테이지는 등치선 패치에 대응하는 제1 테셀레이션 팩터 TF-1(602) 및 제2 테셀레이션 팩터 TF-2(604)를 포함하는 단일 워드(601)를 그래픽 메모리(미도시)에 기록한다. 또 다른 예로서, 삼각형 패치는 네 개의 테셀레이션 팩터들을 갖는다. 헐 셰이더 스테이지는 삼각형 패치에 대응하는 제1 테셀레이션 팩터 TF-1(612), 제2 테셀레이트 팩터 TF-2(614), 제3 테셀레이션 팩터 TF-3(616), 및 제4 테셀레이터 팩터 TF-4(618)를 포함하는 단일 워드(611)를 그래픽 메모리에 기록한다. 유사하게, 쿼드 패치는 여섯 개의 테셀레이션 팩터들을 갖는다. 모든 여섯 개의 8-비트 테셀레이션 팩터들이 단일 32-비트 워드에 맞을 수 없기 때문에, 헐 셰이더 스테이지는 쿼드 패치에 대응하는 여섯 개의 테셀레이션 팩터들을 두 개의 워드들로 패키징한다. 예를 들어, 헐 셰이더 스테이지는 쿼드 패치에 대응하는 제1 테셀레이션 팩터 TF-1(622), 제2 테셀레이션 팩터 TF-2(624), 및 제3 테셀레이션 팩터 TF-3(626)를 포함하는 제1 워드(621)와, 제4 테셀레이션 팩터 TF-4(628), 제5 테셀레이션 팩터 TF-5(630), 및 제6 테셀레이션 팩터 TF-6(632)를 포함하는 제2 워드(627)를 그래픽 메모리에 기록한다. 이에 따라, 헐 셰이더 스테이지는 그래픽 메모리에 기록되고 이로부터 판독되는 테셀레이션 팩터들의 워드들의 수를 2에서 1로(등치선 패치의 경우), 4에서 1로(삼각형 패치의 경우), 그리고 6에서 2로(쿼드 패치의 경우) 감소시킨다.
도 7은 일부 실시예들에 따라 테셀레이션 팩터들의 적어도 서브세트를 메모리에 기록하는 것을 바이패스하기 위한 방법(700)을 나타내는 흐름도이다. 일부 실시예들에서, 본 방법은 도 1의 그래픽 파이프라인(114) 또는 도 2의 그래픽 처리 파이프라인(200)에 의해 구현된다.
블록 702에서, 헐 셰이더 스테이지(233)는 스레드 그룹의 모든 패치들에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값들을 갖는지 여부를 결정한다. 블록 702에서, 헐 셰이더 스테이지(233)가 스레드 그룹의 모든 패치들에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값들을 갖지 않는다고 결정하면, 방법 흐름은 블록 704로 계속된다. 블록 704에서, 헐 셰이더 스테이지(233)는 스레드 그룹의 패치에 대한 테셀레이션 팩터들 모두가 동일한 값들을 갖는지 여부를 결정한다. 블록 704에서, 헐 셰이더 스테이지(233)가 패치에 대한 테셀레이션 팩터들 모두가 동일한 값들을 갖지 않는다고 결정하면, 방법 흐름은 블록 706으로 계속된다. 블록 706에서, 헐 셰이더 스테이지(233)는 패치에 대한 테셀레이션 팩터들을 그래픽 메모리(210)에 기록한다. 일부 실시예들에서, 헐 셰이더 스테이지(233)는 패치에 대응하는 복수의 테셀레이션 팩터들을 단일 워드로 기록한다. 예를 들어, 두 개의 테셀레이션 팩터들을 갖는 등치선 패치에 대해, 헐 셰이더 스테이지(233)는 등치선 패치에 대한 테셀레이션 팩터들 양자를 단일 워드로 기록한다. 네 개의 테셀레이션 팩터들을 갖는 삼각형 패치에 대해, 헐 셰이더 스테이지(233)는 삼각형에 대한 네 개의 모든 테셀레이션 팩터들을 단일 워드로 기록한다. 여섯 개의 테셀레이션 팩터들을 갖는 쿼드 패치에 대해, 헐 셰이더 스테이지(233)는 예를 들어, 쿼드 패치에 대한 세 개의 제1 테슬레이션 팩터들을 제1 워드로 그리고 쿼드 패치에 대한 세 개의 제2 테슬레이션 팩터들을 제2 워드로 기록한다.
블록 704에서, 헐 셰이더 스테이지(233)가 패치에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값들을 갖지 않는다고 결정하면, 방법 흐름은 블록 708로 계속된다. 블록 708에서, 헐 셰이더 스테이지(233)는 테셀레이션 팩터의 단일 인스턴스를 그래픽 메모리(210)에 기록하고, 테셀레이트 팩터의 단일 인스턴스가 패치에 대응하는 모든 테셀레이션 팩터들에 적용됨을 표시하는 플래그(504)를 패치 페처로 발송한다.
블록 702에서, 헐 셰이더 스테이지(233)가 스레드 그룹의 모든 패치들에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값들을 갖는다고 결정하면, 방법 흐름은 블록 710로 계속된다. 블록 710에서, 헐 셰이더 스테이지(233)는 스레드 그룹의 모든 패치들에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임을 표시하는 값을 갖는지 여부를 결정한다. 블록 710에서, 헐 셰이더 스테이지(233)가 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임을 표시하는 값을 갖는다고 결정하면, 방법 흐름은 블록 712로 계속된다. 블록 712에서, 헐 셰이더 스테이지(233)는 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스하고, 스레드 그룹에 대한 테셀레이션 팩터들이 스레드 그룹의 패치들이 컬링될 것임을 표시하는 값을 가짐을 표시하는 메시지(302)를 패치 페처(234)로 발송한다. 패치 페처(234)는 메시지(302)를 수신하는 것에 응답하여, 스레드 그룹에 대한 테셀레이션 팩터들을 그래픽 메모리(210)로부터 판독하는 것을 바이패스하고, 스레드 그룹의 패치들을 컬링(폐기)한다.
블록 710에서, 헐 셰이더 스테이지(233)가 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 컬링될 것임을 표시하는 값을 갖지 않는다고 결정하면, 방법 흐름은 블록 714로 계속된다. 블록 714에서, 헐 셰이더 스테이지(233)는 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 테셀레이터 스테이지(235)로 패스될 것임을 표시하는 값을 갖는지 여부를 결정한다. 블록 714에서, 헐 셰이더 스테이지가 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 테셀레이터 스테이지(235)로 패스될 것임을 표시하는 값을 갖는다고 결정하면, 방법 흐름은 블록 716로 계속된다. 블록 716에서, 헐 셰이더 스테이지(233)는 스레드 그룹의 패치들에 대한 테셀레이션 팩터들을 그래픽 메모리(210)에 기록하는 것을 바이패스하고, 스레드 그룹의 패치들에 대한 테셀레이션 팩터들 모두가 스레드 그룹의 패치들이 테셀레이터 스테이지(235)로 패스될 것임을 표시하는 값을 가짐을 표시하는 메시지(402)를 패치 페처(234)로 발송한다. 패치 페처(234)는 메시지(402)를 수신하는 것에 응답하여, 그래픽 메모리(210)로부터 패치들을 언롤링하고, 패치들을 테셀레이터 스테이지(235)에 제공한다. 블록 714에서, 헐 셰이더 스테이지(233)가 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 스레드 그룹의 패치들이 테셀레이터 스테이지(235)로 패스될 것임을 표시하는 값을 갖지 않는다고 결정하면, 방법 흐름은 블록 708로 계속된다. 이 경우, 헐 셰이더 스테이지가 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값들을 갖는다고 결정했기 때문에, 블록 706에서, 헐 셰이더는 가장 많은 테셀레이터 팩터 값의 단일 인스턴스를 그래픽 메모리(210)에 기록하고, 그래픽 메모리(210)에 저장된 단일 테셀레이션 팩터가 스레드 그룹의 패치들 모두에 대한 테셀레이션 팩터들 모두에 적용됨을 표시하는 플래그(504)를 패치 페처로 발송한다.
컴퓨터 판독가능 저장 매체는 컴퓨터 시스템에 명령어들 및/또는 데이터를 제공하기 위해 사용 중 컴퓨터 시스템에 의해 액세스가능한 임의의 비일시적 저장 매체, 또는 비일시적 저장 매체들의 조합을 포함한다. 이러한 저장 매체들은 광학 매체들(예를 들어, CD(compact disc), DVD(digital versatile disc), 블루-레이 디스크), 자기 매체들(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 미세 전자 기계 시스템들(MEMS) 기반 저장 매체들을 포함할 수 있으나, 이에 제한되는 것은 아니다. 컴퓨터 판독가능 저장 매체는 일부 실시예들에서 컴퓨팅 시스템에 내장되거나(예를 들어, 시스템 RAM 또는 ROM), 컴퓨팅 시스템에 고정적으로 부착되거나(예를 들어, 자기 하드 드라이브), 컴퓨팅 시스템에 착탈가능하게 부착되거나(예를 들어, 광학 디스크 또는 USB(Universal Serial Bus) 기반 플래시 메모리), 또는 유선 또는 무선 네트워크를 통해 컴퓨터 시스템에 결합될 수 있다(예를 들어, 네트워크 액세스가능한 스토리지(NAS)).
일부 실시예들에서, 상술한 기법들의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현된다. 소프트웨어는 비일시적 컴퓨터 판독가능 저장 매체 상에 저장되거나 또는 달리 유형적으로 구현되는 하나 이상의 실행가능 명령어 집합을 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서를 조작하여 상술된 기술들의 하나 이상의 양태를 수행하는 명령어들 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체는 예를 들어, 자기 또는 광학 디스크 저장 디바이스, 고체 상태 저장 디바이스들 이를테면 플래시 메모리, 캐시, 랜덤 액세스 메모리(RAM) 또는 다른 비휘발성 메모리 디바이스 또는 디바이스들 등을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체 상에 저장된 실행가능한 명령어들은 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 하나 이상의 프로세서에 의해 해석되거나 그 외 다르게 실행가능한 다른 명령어 포맷이다.
일반적인 설명으로 상술된 모든 동작들 또는 요소들이 필수적인 것은 아니라는 것, 특정 동작 또는 디바이스의 일 부분이 요구되지 않을 수 있다는 것, 그리고 설명된 동작들 또는 요소들에 더하여 하나 이상의 추가 동작이 수행되거나 요소들이 포함됨을 유념한다. 더 나아가, 동작들이 나열된 순서는 반드시 이것들이 수행되는 순서는 아니다. 또한, 개념들은 특정 실시예들을 참조하여 설명되었다. 그러나, 당업자는 아래 청구항들에 제시된 바에 따라 본 개시의 범위로부터 벗어나지 않고 다양하게 수정 및 변경될 수 있다는 것을 이해한다. 따라서, 본 명세서 및 도면들은 제한적인 의미가 아닌 예시적인 의미로 여겨져야 하고, 상기한 모든 수정이 본 개시의 범위 내에 포함되는 것으로 의도된다.
혜택들, 다른 이점들 및 문제들에 대한 솔루션들이 구체적인 실시예들과 관련하여 상술되었다. 그러나, 혜택들, 이점들, 문제들에 대한 솔루션들 및 임의의 혜택, 이점, 또는 솔루션을 발생시키거나 더 확연히 드러낼 수 있는 임의의 특징(들)이 임의의 또는 모든 청구항들의 임계적, 필수적 또는 본질적 특징인 것으로 간주되지 않아야 한다. 또한, 위에서 개시된 특정 실시예들은 개시된 주제가 본 명세서에서의 교시 내용의 혜택을 받는 당업자들에게 명백한 상이하지만 균등한 방식들로 수정 및 실시될 수 있음에 따라 단지 예시적인 것일 뿐이다. 아래 청구항들에서 설명되는 것 이외에, 제시되는 본 명세서에서의 구성 또는 설계의 세부 사항들로 제한되도록 의도되지 않는다. 이에 따라 위에서 개시된 특정 실시예들이 대체 또는 수정될 수 있고 모든 그러한 변형 예들은 개시된 주제의 범위 내인 것으로 고려된다는 것이 명백하다. 따라서, 본 명세서에서 추구되는 보호는 아래 청구항들에 제시되는 바에 따른다.

Claims (20)

  1. 방법으로서,
    그래픽 처리 유닛(graphics processing unit, GPU)의 그래픽 파이프라인의 헐 셰이더(hull shader) 스테이지에서, 스레드 그룹을 포함하는 복수의 패치들에 대응하는 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값을 갖는다고 검출하는 것에 응답하여,
    상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들의 적어도 서브세트를 상기 그래픽 파이프라인의 그래픽 메모리에 기록하는 것을 바이패스하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 헐 셰이더 스테이지에서, 테셀레이션 팩터들의 적어도 상기 임계 백분율이 상기 복수의 패치들이 컬링될 것임을 표시한다고 검출하는 것에 응답하여, 상기 복수의 패치들이 컬링될 것임을 표시하는 메시지를 상기 그래픽 파이프라인의 패치 페처로 발송하는 단계;
    상기 패치 페처에서, 상기 메시지를 수신하는 것에 응답하여 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들을 상기 그래픽 메모리로부터 판독하는 것을 바이패스하는 단계; 및
    상기 패치 페처에서, 상기 복수의 패치들을 폐기하는 단계를 더 포함하는, 방법.
  3. 제1항에 있어서,
    상기 헐 셰이더 스테이지에서, 상기 복수의 패치들에 대응하는 테셀레이션 팩터들의 적어도 상기 임계 백분율이 상기 복수의 패치들이 상기 그래픽 파이프라인의 테셀레이터 스테이지로 패스될 것임을 표시한다고 검출하는 것에 응답하여, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들 모두가 상기 복수의 패치들이 상기 그래픽 파이프라인의 테셀레이션 스테이지로 패스될 것임을 표시하는 메시지를 상기 그래픽 파이프라인의 패치 페처로 발송하는 단계;
    상기 테셀레이션 팩터들을 상기 그래픽 메모리에 기록하는 것을 바이패스하는 단계;
    상기 패치 페처에서, 상기 메시지를 수신하는 것에 응답하여 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들을 상기 그래픽 메모리로부터 판독하는 것을 바이패스하는 단계; 및
    상기 복수의 패치들을 상기 테셀레이터 스테이지로 발송하는 단계를 더 포함하는, 방법.
  4. 제1항에 있어서,
    상기 헐 셰이더 스테이지에서, 상기 복수의 패치들 중의 패치에 대응하는 상기 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값을 갖는다 - 이는 상기 복수의 패치들이 컬링될 것임을 표시하거나 또는 상기 복수의 패치들이 상기 그래픽 파이프라인의 테셀레이터 스테이지로 패스될 것임을 표시하지 않음 - 고 검출하는 것에 응답하여, 일단 상기 그래픽 메모리에 상기 테셀레이션 팩터들의 상기 값을 기록하고, 그 값이 상기 패치에 대응하는 모든 테셀레이트 팩터들에 적용됨을 표시하는 플래그를 상기 그래픽 파이프라인의 패치 페처로 발송하는 단계;
    상기 패치 페처에서 상기 플래그를 수신하는 것에 응답하여, 상기 그래픽 메모리로부터 상기 값을 판독하는 단계; 및
    상기 패치에 대응하는 모든 테셀레이션 팩터들에 상기 값을 적용하는 단계를 더 포함하는, 방법.
  5. 제1항에 있어서,
    상기 헐 셰이더 스테이지에서, 상기 복수의 패치들 중의 패치에 대응하는 상기 테셀레이션 팩터들 모두가 동일하지 않다고 검출하는 것에 응답하여, 상기 그래픽 메모리에 적어도 하나의 워드를 기록하는 단계를 더 포함하며, 상기 적어도 하나의 워드는 상기 패치에 대응되는 복수의 상기 테슬레이션 팩터들을, 상기 적어도 하나의 워드가 상기 복수의 상기 테셀레이션 팩터들을 포함한다는 표시와 함께 포함하는 것인, 방법.
  6. 제5항에 있어서, 상기 패치는 등치선(isoline) 패치를 포함하고, 상기 적어도 하나의 워드는 두 개의 테셀레이션 팩터들을 포함하는 것인, 방법.
  7. 제5항에 있어서, 상기 패치는 삼각형 패치를 포함하고, 상기 적어도 하나의 워드는 네 개의 테셀레이션 팩터들을 포함하는 것인, 방법.
  8. 제5항에 있어서, 상기 패치는 쿼드(quad) 패치를 포함하고, 상기 적어도 하나의 워드는 여섯 개의 테셀레이션 팩터들을 포함하는 것인, 방법.
  9. 제5항에 있어서,
    상기 테셀레이션 팩터들에 대해 정수 압축(integer compression)을 수행하여 압축된 테셀레이션 팩터들을 생성하는 단계; 및
    압축된 상기 테셀레이션 팩터들을 상기 그래픽 메모리에 기록하는 단계를 더 포함하는, 방법.
  10. 방법으로서,
    그래픽 처리 유닛(GPU)의 그래픽 파이프라인의 패치 페처에서, 스레드 그룹을 포함하는 복수의 패치들에 대응하는 테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값을 가짐을 표시하는 메시지를 수신하는 것에 응답하여, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들의 적어도 서브세트를 상기 그래픽 파이프라인의 그래픽 메모리로부터 판독하는 것을 바이패스하는 단계를 포함하는, 방법.
  11. 제10항에 있어서,
    상기 패치 페처에서, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들의 적어도 상기 임계 백분율이 상기 복수의 패치들이 컬링될 것임을 표시하는 값을 갖는다는 표시를 수신하는 것에 응답하여, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들을 상기 그래픽 메모리로부터 판독하는 것을 바이패스하는 단계; 및
    상기 패치 페처에서, 상기 복수의 패치들을 폐기하는 단계를 더 포함하는, 방법.
  12. 제10항에 있어서,
    상기 패치 페처에서, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들의 적어도 상기 임계 백분율이 상기 복수의 패치들이 상기 그래픽 파이프라인의 테셀레이터 스테이지로 패스될 것임을 표시하는 값을 갖는다는 표시를 수신하는 것에 응답하여, 상기 복수의 패치들을 상기 테셀레이터 스테이지로 발송하는 단계를 더 포함하는, 방법.
  13. 제10항에 있어서,
    상기 패치 페처에서, 상기 그래픽 메모리에서의 단일 값이 패치에 대응하는 모든 테셀레이션 팩터들에 적용됨을 표시하는 플래그를 수신하는 것에 응답하여, 상기 값을 상기 그래픽 메모리로부터 판독하는 단계; 및
    상기 패치에 대응하는 모든 테셀레이션 팩터들에 상기 값을 적용하는 단계를 더 포함하는, 방법.
  14. 제10항에 있어서,
    상기 패치 페처에서, 상기 그래픽 메모리에 저장된 적어도 하나의 워드가 패치에 대응하는 복수의 테셀레이션 팩터들을 포함한다는 표시를 수신하는 것에 응답하여, 상기 적어도 하나의 워드를 상기 그래픽 메모리로부터 판독하고, 상기 복수의 테슬레이션 팩터들을 상기 패치에 적용하는 단계를 더 포함하는, 방법.
  15. 그래픽 처리 유닛(GPU)으로서,
    그래픽 메모리에 저장된 테셀레이션 팩터들을 판독하도록 구성된 패치 페처; 및
    헐 셰이더 스테이지를 포함하며, 상기 헐 셰이더 스테이지는:
    테셀레이션 팩터들의 적어도 임계 백분율이 동일한 값을 갖는다고 검출하는 것에 응답하여, 스레드 그룹을 포함하는 복수의 패치들에 대응하는 상기 테셀레이션 팩터들의 적어도 서브세트를 상기 그래픽 메모리에 기록하는 것을 바이패스하도록 구성되는 것인, 그래픽 처리 유닛(GPU).
  16. 제15항에 있어서,
    상기 헐 셰이더 스테이지는 또한, 상기 테셀레이션 팩터들의 상기 적어도 임계 백분율이 상기 복수의 패치들이 컬링될 것을 표시하는 값을 갖는다고 검출하는 것에 응답하여, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들 모두가 상기 복수의 패치들이 컬링될 것임을 표시하는 값을 가짐을 상기 패치 페처에 표시하도록 구성되고;
    상기 패치 페처는 또한:
    상기 표시를 수신하는 것에 응답하여 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들을 상기 그래픽 메모리로부터 판독하는 것을 바이패스하도록; 그리고
    상기 복수의 패치들을 폐기하도록 구성되는 것인, 그래픽 처리 유닛(GPU).
  17. 제15항에 있어서,
    테셀레이터 스테이지를 더 포함하며;
    상기 헐 셰이더 스테이지는 또한, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들의 적어도 상기 임계 백분율이 상기 복수의 패치들이 상기 테셀레이터 스테이지로 패스될 것임을 표시하는 값을 갖는다고 검출하는 것에 응답하여, 상기 복수의 패치들에 대응하는 상기 테셀레이션 팩터들 모두가 상기 복수의 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하는 값을 가짐을 상기 패치 페처에 표시하도록 구성되고;
    상기 패치 페처는 또한, 상기 표시를 수신하는 것에 응답하여, 상기 GPU의 상기 테셀레이터 스테이지에 상기 복수의 패치들을 제공하도록 구성되는 것인, 그래픽 처리 유닛(GPU).
  18. 제15항에 있어서,
    상기 헐 셰이더 스테이지는 또한, 상기 복수의 패치들 중의 패치에 대응하는 상기 테셀레이션 팩터들 모두가 동일한 값을 갖는다 - 이는 상기 복수의 패치들이 컬링될 것임을 표시하지 않거나 또는 상기 복수의 패치들이 테셀레이터 스테이지로 패스될 것임을 표시하지 않음 - 고 검출하는 것에 응답하여, 일단 상기 그래픽 메모리에 상기 테셀레이션 팩터들의 상기 값을 기록하고, 그 값이 상기 패치에 대응하는 모든 테셀레이트 팩터들에 적용됨을 표시하는 플래그를 상기 패치 페처로 발송하도록 구성되고;
    상기 패치 페처는 또한, 상기 플래그를 수신하는 것에 응답하여, 상기 값을 상기 그래픽 메모리로부터 판독하고, 상기 패치에 대응하는 모든 테셀레이션 팩터들에 상기 값을 적용하도록 구성되는 것인, 그래픽 처리 유닛(GPU).
  19. 제15항에 있어서,
    상기 헐 셰이더 스테이지는 또한, 상기 복수의 패치들 중의 패치에 대응하는 상기 테셀레이션 팩터들 모두가 동일하지 않다고 검출하는 것에 응답하여, 상기 그래픽 메모리에 적어도 하나의 워드 - 상기 적어도 하나의 워드는 상기 패치에 대응되는 복수의 상기 테슬레이션 팩터들을, 상기 적어도 하나의 워드가 상기 복수의 상기 테셀레이션 팩터들을 포함한다는 표시와 함께 포함함 - 를 기록하도록 구성되는 것인, 그래픽 처리 유닛(GPU).
  20. 제19항에 있어서, 상기 패치는 등치선 패치를 포함하고, 상기 적어도 하나의 워드는 두 개의 테셀레이션 팩터들을 포함하는 것인, 그래픽 처리 유닛(GPU).
KR1020227016239A 2019-11-14 2020-11-13 대역폭 테셀레이션 팩터 감소 KR20220100877A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/683,868 2019-11-14
US16/683,868 US11010862B1 (en) 2019-11-14 2019-11-14 Reduced bandwidth tessellation factors
PCT/US2020/060506 WO2021097279A1 (en) 2019-11-14 2020-11-13 Reduced bandwidth tessellation factors

Publications (1)

Publication Number Publication Date
KR20220100877A true KR20220100877A (ko) 2022-07-18

Family

ID=75910048

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227016239A KR20220100877A (ko) 2019-11-14 2020-11-13 대역폭 테셀레이션 팩터 감소

Country Status (6)

Country Link
US (2) US11010862B1 (ko)
EP (1) EP4058973A4 (ko)
JP (1) JP2023501921A (ko)
KR (1) KR20220100877A (ko)
CN (1) CN114730452A (ko)
WO (1) WO2021097279A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11010862B1 (en) * 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US11055896B1 (en) * 2020-02-25 2021-07-06 Parallels International Gmbh Hardware-assisted emulation of graphics pipeline
US11500692B2 (en) * 2020-09-15 2022-11-15 Apple Inc. Dynamic buffering control for compute work distribution
US11908079B2 (en) * 2022-04-08 2024-02-20 Qualcomm Incorporated Variable rate tessellation

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
GB2464292A (en) 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
EP2596470A1 (en) * 2010-07-19 2013-05-29 Advanced Micro Devices, Inc. Data processing using on-chip memory in multiple processing units
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
US10089774B2 (en) 2011-11-16 2018-10-02 Qualcomm Incorporated Tessellation in tile-based rendering
US9390554B2 (en) * 2011-12-29 2016-07-12 Advanced Micro Devices, Inc. Off chip memory for distributed tessellation
US9449419B2 (en) * 2012-03-30 2016-09-20 Intel Corporation Post tessellation edge cache
GB2500284B (en) * 2012-09-12 2014-04-30 Imagination Tech Ltd Tile based computer graphics
US8982124B2 (en) * 2012-09-29 2015-03-17 Intel Corporation Load balancing and merging of tessellation thread workloads
US9305397B2 (en) * 2012-10-24 2016-04-05 Qualcomm Incorporated Vertex order in a tessellation unit
GB2544679B (en) * 2012-12-20 2017-08-16 Imagination Tech Ltd Tessellating patches of surface data in tile based computer graphics rendering
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
KR102104057B1 (ko) * 2013-07-09 2020-04-23 삼성전자 주식회사 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들
KR102072656B1 (ko) * 2013-07-16 2020-02-03 삼성전자 주식회사 캐시를 포함하는 테셀레이션 장치, 그의 동작 방법, 및 상기 장치를 포함하는 시스템
US9424039B2 (en) 2014-07-09 2016-08-23 Intel Corporation Instruction for implementing vector loops of iterations having an iteration dependent condition
KR102327144B1 (ko) 2014-11-26 2021-11-16 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
GB2539042B (en) * 2015-06-05 2019-08-21 Imagination Tech Ltd Tessellation method using displacement factors
GB2552260B (en) * 2015-06-05 2019-04-10 Imagination Tech Ltd Tessellation method
US10497440B2 (en) 2015-08-07 2019-12-03 Hewlett Packard Enterprise Development Lp Crossbar arrays for calculating matrix multiplication
KR102381945B1 (ko) 2015-11-18 2022-04-01 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
US20170358132A1 (en) * 2016-06-12 2017-12-14 Apple Inc. System And Method For Tessellation In An Improved Graphics Pipeline
US9953395B2 (en) * 2016-08-29 2018-04-24 Intel Corporation On-die tessellation distribution
US10037625B2 (en) * 2016-09-15 2018-07-31 Intel Corporation Load-balanced tessellation distribution for parallel architectures
GB2560709B (en) * 2017-03-14 2021-02-24 Imagination Tech Ltd Graphics processing method and system for processing sub-primitives
US10262388B2 (en) * 2017-04-10 2019-04-16 Intel Corporation Frequent data value compression for graphics processing units
US10580209B2 (en) * 2018-03-06 2020-03-03 Qualcomm Incorporated Removal of degenerated sub-primitives in tessellation
GB2572619B (en) 2018-04-05 2020-06-17 Imagination Tech Ltd Hardware Tessellation Units
GB2575503B (en) * 2018-07-13 2020-07-01 Imagination Tech Ltd Scalable parallel tessellation
AU2019384645A1 (en) * 2018-11-20 2021-06-10 Nflection Therapeutics, Inc. Thienyl-aniline compounds for treatment of dermal disorders
US11080928B2 (en) * 2019-04-01 2021-08-03 Qualcomm Incorporated Methods and apparatus for visibility stream management
US11010862B1 (en) * 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors

Also Published As

Publication number Publication date
US20210150658A1 (en) 2021-05-20
WO2021097279A1 (en) 2021-05-20
US11532066B2 (en) 2022-12-20
US20210374898A1 (en) 2021-12-02
JP2023501921A (ja) 2023-01-20
US11010862B1 (en) 2021-05-18
EP4058973A4 (en) 2023-10-18
CN114730452A (zh) 2022-07-08
EP4058973A1 (en) 2022-09-21

Similar Documents

Publication Publication Date Title
US11532066B2 (en) Reduced bandwidth tessellation factors
US9754407B2 (en) System, method, and computer program product for shading using a dynamic object-space grid
US9747718B2 (en) System, method, and computer program product for performing object-space shading
US8730253B2 (en) Decomposing cubic Bezier segments for tessellation-free stencil filling
TWI645371B (zh) 在上游著色器內設定下游著色狀態
US9558573B2 (en) Optimizing triangle topology for path rendering
US20210287418A1 (en) Graphics processing unit render mode selection system
KR102442080B1 (ko) 동적 리소스 할당으로 웨이브 생성 제어 방법
US11720499B2 (en) Selective generation of miss requests for cache lines
US11948251B2 (en) Throttling hull shaders based on tessellation factors in a graphics pipeline
KR20200084000A (ko) 처리 유닛에서 작업로드의 정확한 일시 중지 및 재개
US11715262B2 (en) Optimizing primitive shaders
US11620788B2 (en) Graphics texture footprint discovery
JP2023530309A (ja) ビニングハードウェアにおけるきめ細かなリプレイ制御