KR20220112710A - 픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치 - Google Patents

픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치 Download PDF

Info

Publication number
KR20220112710A
KR20220112710A KR1020220015131A KR20220015131A KR20220112710A KR 20220112710 A KR20220112710 A KR 20220112710A KR 1020220015131 A KR1020220015131 A KR 1020220015131A KR 20220015131 A KR20220015131 A KR 20220015131A KR 20220112710 A KR20220112710 A KR 20220112710A
Authority
KR
South Korea
Prior art keywords
coverage
quad
primitive
image
packing
Prior art date
Application number
KR1020220015131A
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
Priority claimed from US17/168,168 external-priority patent/US11748933B2/en
Priority claimed from US17/503,259 external-priority patent/US11798218B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20220112710A publication Critical patent/KR20220112710A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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/50Lighting effects
    • G06T15/80Shading
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

본 명세서에 개시된 본 발명에 따라 대형 디스플레이 스크린을 채우기 위해 다수의 캐스팅 장치들이 함께 동작하도록 하는 시스템 및 방법이 개시된다. 상기 시스템은 둘 이상의 스크린-캐스트 수신기들 및 컨트롤러를 포함하는 수신 장치를 포함한다. 각 스크린-캐스트 수신기는 해당 캐스팅 장치의 기본 해상도로 생성된 해당 캐스팅 장치의 오리지날 콘텐츠의 프레임의 적어도 부분을 해당 캐스팅 장치로부터 수신한다. 상기 컨트롤러는 상기 수신 디스플레이에 의해 얻어진 임의의 내부적으로 생성된 콘텐츠에 추가하여, 상기 대응하는 캐스팅 장치의 상기 오리지날 콘텐츠의 상기 프레임의 각각의 수신된 부분을 동기화하여 각각의 수신된 부분의 조합을 포함하는 비디오 출력 신호를 형성한다. 캐스팅 장치는 스마트폰, 태블릿 또는 랩톱 컴퓨터와 같은 컴퓨팅 장치일 수 있다.

Description

픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치{METHODS AND APPARATUS FOR PIXEL PACKING RELATED APPLICATION DATA}
본 개시는 GPU(Graphics Processing Unit)에 관한 것으로, 보다 상세하게는 소형 프리미티브에 대한 셰이더 점유를 수행하는 방법, 및 픽셀 패킹을 위한 방법 및 장치에 관한 것이다.
프로그래밍가능한 고도의 병렬 계산 엔진 세트와 다양한 고정 기능 유닛들의 컬렉션을 포함한다. 고정 기능 유닛들은 텍스처 주소 생성 및 필터링 유닛, 프리미티브 클리핑 유닛, 컬링 유닛(culling unit), 뷰포트 변환 유닛, 비닝 유닛(binning unit), 래스터화 설정 및 래스터화 유닛, 깊이 비교 유닛, 블렌딩 유닛, 및/또는 기타 유닛들을 포함할 수 있다. GPU는 그래픽 집약적 작업 및/또는 컴퓨팅 집약적 워크로드에 사용될 수 있다.
그래픽 데이터는 오픈지엘(OpenGL)-ES, 벌컨(Vulkan), DirectX 등과 같은 하나 이상의 API(Application Programming Interface)에서 아웃라인된 단계들을 수행하는 GPU를 통해 파이프라인 방식으로 흐를 수 있다. 따라서, GPU는 텍스처 좌표 및 텍스처 주소 생성에 관한 지정된 표준을 따를 수 있다. 보다 구체적으로, 파이프라인의 픽셀 셰이딩 스테이지 동안, 셰이더 프로그램은 텍스처 요청을 하고, 필터링된 텍스처 데이터를 수신할 수 있다.
일부 모드에서, 각 픽셀에 대해, X 및 Y 차원 각각에서 방향 도함수 계산이 수행되어 커버리지의 픽셀(또는 샘플) 간격(spacing)과 관련하여 액세스되는 텍스처의 축소 또는 확대를 결정할 수 있다. 본 개시의 맥락에서, 용어 "샘플" 및 용어 "픽셀"은 동일한 동작이 픽셀 레벨 또는 서브-픽셀 샘플 레벨 중 어느 하나에서 수행되는 것으로 이해되는 한 상호교환가능하게 사용될 수 있다. 일반적으로, 샘플보다는 픽셀에 대한 언급이 여기에서 이루어질 것이다.
방향 도함수를 계산하는 것은 2개의 차원들의 각 차원에서 적어도 2개의 데이터 값들을 사용할 수 있다. 따라서, 픽셀 셰이더는 최소 작업량으로 2x2 쿼드(즉, 4개 픽셀들의 블록)에 대해 작동할 수 있다. 입력 프리미티브는 2차원(2D) 이미지 공간에 대한 3차원(3D) 프리미티브의 투영일 수 있으며, 픽셀 커버리지를 결정하기 위해 래스터화될 수 있다. 프리미티브는 (x,y) 좌표 쌍들의 삼중항(triplet)에 의해 정의되는 삼각형일 수 있다. 주어진 입력 프리미티브에 의해 형성된 실제 커버리지에 관계없이, 병렬 프로세서 셰이더 서브시스템에 제공되는 작업은 이들 2x2 쿼드들의 컬렉션일 수 있으며, 이로 인해 많은 쿼드들이 부분적으로만 채워진다면(즉, 부분적으로 커버된다면) 매우 비효율적이게 된다.
이 비효율성을 줄이기 위한 한 가지 방식은 부분 커버리지의 경우를 인식하고 상기 커버리지를 하나의 인접한 프리미티브에서 다른 프리미티브의 쿼드로 이송하는 것을 포함할 수 있다. 이 방식은 셰이더로 전송되는 쿼드들의 총 개수를 줄여 총 에너지 소비를 줄이는 데 도움이 될 수 있지만 이러한 방식은 일부 이미지 품질을 잃는 대가를 치르게 된다. 쿼드 병합은 그 애플리케이션을 제어하기 위해 적용되고 설정된 특정 휴리스틱 임계값을 사용할 수 있으며, 이에 따라 커버리지를 하나의 프리미티브에서 인접한 프리미티브에 속하는 것으로 하고 인접 프리미티브의 속성 데이터를 근사값으로서 사용하여 원치 않는 시각적 아티팩트를 방지하려고 시도할 수 있다. 그럼에도 불구하고 이러한 쿼드 병합 방식은 여전히 손실이 있다.
본 개시의 실시예들은 소형 프리미티브에 대한 셰이더 점유를 수행하는 방법, 및 픽셀 패킹을 위한 방법 및 장치를 제공하는 것을 목적으로 한다.
본 개시의 다양한 실시예는 하나 이상의 셰이더 코어(shader core) 및 셰이더 워프 패커 유닛(shader warp packer unit)을 포함하는 GPU를 포함한다. 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드와 연관된 제 1 프리미티브, 및 제 2 부분적으로 커버된 쿼드와 연관된 제 2 프리미티브를 수신하도록 구성될 수 있다. 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드가 비중첩 커버리지를 갖는다고 결정하도록 구성될 수 있다. 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 패킹된 쿼드로 패킹하도록 구성될 수 있다. 셰이더 워프 패커 유닛은 패킹된 쿼드를 하나 이상의 셰이더 코어로 전송하도록 구성될 수 있다. 일부 실시예에서, 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드는 공간적으로 서로 디스조인트되어 있다. 디스조인트(disjoint)라는 용어는 비중첩(non-overlapping)을 의미할 수 있다. 하나 이상의 셰이더 코어는 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 개별적으로 처리하는 하나 이상의 셰이더 코어에 대한 정보의 손실 없이 패킹된 쿼드를 수신하고 처리하도록 구성될 수 있다.
GPU를 사용하여 작은 프리미티브에 대한 셰이더 점유를 수행하는 방법이 개시된다. 상기 방법은 셰이더 워프 패커 유닛이 제 1 부분적으로 커버된 쿼드와 연관된 제 1 프리미티브, 및 제 2 부분적으로 커버된 쿼드와 연관된 제 2 프리미티브를 수신하는 단계를 포함할 수 있다. 상기 방법은 상기 셰이더 워프 패커 유닛이 상기 제 1 부분적으로 커버된 쿼드 및 상기 제 2 부분적으로 커버된 쿼드가 비중첩 커버리지를 갖는 것으로 결정하는 단계를 포함할 수 있다. 상기 방법은 셰이더 워프 패커 유닛이 상기 제 1 부분적으로 커버된 쿼드 및 상기 제 2 부분적으로 커버된 쿼드를 패킹된 쿼드로 패킹하는 단계를 포함할 수 있다. 상기 방법은 상기 셰이더 워프 패커 유닛이 상기 패킹된 쿼드를 하나 이상의 셰이더 코어로 전송하는 단계를 포함할 수 있다. 일부 실시예에서, 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드는 공간적으로 서로 디스조인트되어 있다. 디스조인트(disjoint)라는 용어는 비중첩(non-overlapping)을 의미할 수 있다. 상기 방법은 하나 이상의 셰이더 코어가 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 개별적으로 처리하는 하나 이상의 셰이더 코어에 대한 정보의 손실 없이 패킹된 쿼드를 수신하고 처리하는 단계를 포함한다.
그래픽 처리 장치(GPU)에서 커버리지를 패킹하는 방법은 이미지의 부분에 대한 인디케이션을 수신하는 단계, 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 패킹 기술을 결정하는 단계, 및 상기 이미지의 부분에 대한 커버리지를 패킹하는 단계를 포함할 수 있다. 상기 인디케이션은 중요도, 품질, 관심 레벨, 디테일 레벨, 또는 VRS(variable-rate shading) 레벨 중 하나 이상을 포함할 수 있다. 인디케이션은 애플리케이션으로부터 수신될 수 있다. 패킹 기술은 어레이 병합(array merging)을 포함할 수 있다. 어레이 병합은 쿼드 병합을 포함할 수 있다. 패킹 기술은 픽셀 파일링(pixel piling)을 포함할 수 있다. 패킹 기술은 이미지의 부분에 대한 커버리지를 수신하는 것, 및 실질적으로 수신된 커버리지를 GPU의 스테이지에 전달하는 것을 포함할 수 있다. 패킹 기술은 어레이의 제 1 프리미티브로부터의 커버리지 및 제 2 프리미티브로부터의 커버리지를 패킹할 수 있다. 패킹 기술은 커버리지를 제 1 프리미티브에서 제 2 프리미티브로 시프트할 수 있다. 결정하는 단계는 인디케이션에 기초하여 패킹 기술에 대한 기준 세트(set of criteria)를 선택하는 단계 및 상기 기준 세트에 기초하여 패킹 기술을 선택하는 단계를 포함할 수 있다. 패킹 기술은 병합 기술(merge technique)을 포함할 수 있고, 기준 세트는 깊이 임계치(depth threshold)를 포함할 수 있다. 상기 이미지의 부분은 상기 이미지의 제 1 부분을 포함할 수 있고, 결정하는 단계는 이미지의 제 1 부분을 이미지의 제 2 부분과 비교하는 단계를 포함할 수 있다. 상기 이미지의 제 2 부분은 기준 부분을 포함할 수 있다. 상기 이미지의 제 1 부분을 이미지의 제 2 부분과 비교하는 단계는 상기 이미지의 제 1 부분의 제 1 품질을 상기 이미지의 제 2 부분의 제 2 품질과 비교하는 단계를 포함할 수 있다. 상기 이미지의 제 1 부분을 이미지의 제 2 부분과 비교하는 단계는 상기 이미지의 제 1 부분의 제 1 전력 소비량(power consumption)과 상기 이미지의 제 2 부분의 제 2 전력 소비량과 비교하는 단계를 포함할 수 있다. 비교하는 단계는 의사 실행 상태(pseudo running state)에서 비교하는 단계를 포함할 수 있다. 결정하는 단계는 드로우콜(draw call)을 위한 패킹 기술을 결정하는 단계를 포함할 수 있고, 상기 이미지의 부분에 대한 커버리지는 드로우콜을 위한 패킹 기술에 기초하여 패킹될 수 있다. 결정하는 단계는 이미지 공간에 대한 패킹 기술을 결정하는 단계를 포함할 수 있고, 상기 이미지의 부분에 대한 커버리지는 상기 이미지 공간에 대한 패킹 기술에 기초하여 패킹될 수 있다. 상기 패킹 기술은 제 1 패킹 기술을 포함할 수 있고, 상기 방법은 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 제 2 패킹 기술을 결정하는 단계 및 상기 제 2 패킹 기술에 기초하여 상기 이미지의 부분에 대한 커버리지를 패킹하는 단계를 더 포함할 수 있다. 상기 제 1 패킹 기술은 메모리에 데이터를 저장하고, 상기 제 2 패킹 기술은 상기 메모리에 저장된 데이터를 사용할 수 있다. 결정하는 단계는 상기 인디케이션에 기초하여 상기 제 1 패킹 기술에 대한 제 1 기준 세트를 선택하는 단계, 상기 제 1 기준 세트에 기초하여 상기 제 1 패킹 기술을 선택하는 단계, 상기 인디케이션에 기초하여 상기 제 2 패킹 기술에 대한 제 2 기준 세트를 선택하는 단계, 및 상기 제 2 기준 세트에 기초하여 상기 제 2 패킹 기술을 선택하는 단계를 포함할 수 있다. 상기 제 1 기준 세트는 상기 이미지의 부분의 제 1 부분에 대한 것일 수 있고, 상기 제 2 기준 세트는 상기 이미지의 부분의 제 2 부분에 대한 것일 수 있다. 상기 제 1 패킹 기술에 기초하여 상기 이미지의 부분에 대한 커버리지를 패킹하는 단계는 어레이에 2개의 프리미티브들에 대한 커버리지를 배치하는 단계를 포함할 수 있다. 상기 제 2 패킹 기술에 기초하여 상기 이미지의 부분에 대한 커버리지를 패킹하는 단계는 이미지 엘리먼트를 제 1 프리미티브에서 제 2 프리미티브로 시프트하는 단계, 및 상기 이미지 엘리먼트를 상기 어레이에 배치하는 단계를 포함할 수 있다.
장치는 이미지의 부분에 대한 인디케이션을 수신하고 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 패킹 기술을 결정하도록 구성된 평가 스테이지, 및 상기 이미지의 부분에 대한 커버리지를 수신하고 상기 패킹 기술에 기초하여 상기 커버리지를 패킹하도록 구성된 커버리지 패킹 스테이지를 포함하는 그래픽 처리 파이프라인(graphics processing pipeline)을 포함할 수 있다. 상기 패킹 기술은 제 1 패킹 기술을 포함할 수 있고, 상기 평가 스테이지는 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 제 2 패킹 기술을 결정하도록 구성될 수 있고, 상기 커버리지 패킹 스테이지는 상기 제 2 패킹 기술에 기초하여 상기 커버리지를 패킹하도록 구성될 수 있다. 상기 장치는 상기 제 1 패킹 기술에 의해 사용되는 데이터를 저장하도록 구성된 메모리를 더 포함할 수 있고, 상기 제 1 패킹 기술에 의해 사용되는 상기 데이터의 적어도 일부는 상기 제 2 패킹 기술에 의해 사용될 수 있다.
그래픽 처리 장치(GPU)에서 커버리지를 패킹하는 방법은 이미지 엘리먼트들의 어레이에서 커버리지를 갖는 제 1 프리미티브를 수신하는 단계, 어레이의 제 1 위치에 상기 제 1 프리미티브의 제 1 이미지 엘리먼트를 배치하는 단계, 상기 어레이에서 커버리지를 갖는 제 2 프리미티브를 수신하는데, 상기 제 2 프리미티브는 상기 어레이의 상기 제 1 위치에 있는 제 1 이미지 엘리먼트와 중첩하는 제 2 이미지 엘리먼트를 가지는 단계, 및 상기 어레이의 제 2 위치에 상기 제 2 프리미티브의 제 3 이미지 엘리먼트를 배치하는 단계를 포함한다. 제 3 이미지 엘리먼트를 배치하는 단계는 상기 제 1 프리미티브 및 상기 제 2 프리미티브를 포함하는 이미지의 부분에 대한 인디케이션을 수신하는 것에 기초할 수 있다. 상기 인디케이션은 VRS(Variable-Rate Shading) 레벨을 포함할 수 있다. 상기 방법은 상기 제 2 프리미티브의 상기 제 2 이미지 엘리먼트를 폐기하는 단계를 더 포함할 수 있다.
그래픽 처리 장치(GPU)에서 커버리지를 처리하는 방법은 제 1 프리미티브의 적어도 일부에 대한 제 1 커버리지를 수신하는 단계, 제 2 프리미티브의 적어도 일부에 대한 제 2 커버리지를 수신하는데 상기 제 1 프리미티브의 일부 및 상기 제 2 프리미티브의 일부는 이미지의 부분과 연관되어 있는 단계, 상기 이미지의 부분에 대한 인디케이션을 수신하는 단계, 상기 인디케이션에 기초하여 상기 제 1 커버리지와 상기 제 2 커버리지를 결합하는 기술을 결정하는 단계, 및 상기 기술에 기초하여 어레이에서 상기 제 1 커버리지와 상기 제 2 커버리지를 결합하는 단계를 포함할 수 있다. 상기 기술은 어레이 병합을 포함할 수 있다. 상기 기술은 픽셀 파일링을 포함할 수 있다. 상기 제 1 프리미티브와 상기 제 2 프리미티브는 동일한 드로우콜에 속할 수 있다. 상기 제 1 프리미티브와 상기 제 2 프리미티브는 서로 다른 호환 가능한 드로우콜들에 속할 수 있다. 상기 기술은 커버리지를 상기 제 1 프리미티브에서 상기 제 2 프리미티브로 시프트할 수 있다. 결정하는 단계는 인디케이션에 기초하여 상기 기술에 대한 기준 세트(set of criteria)를 선택하는 단계 및 상기 기준 세트에 기초하여 상기 기술을 선택하는 단계를 포함할 수 있다. 상기 이미지의 부분은 상기 이미지의 제 1 부분을 포함할 수 있고, 결정하는 단계는 이미지의 제 1 부분을 이미지의 제 2 부분과 비교하는 단계를 포함할 수 있다. 상기 이미지의 제 2 부분은 기준 부분을 포함할 수 있다. 상기 이미지의 제 1 부분을 이미지의 제 2 부분과 비교하는 단계는 상기 이미지의 제 1 부분의 제 1 품질을 상기 이미지의 제 2 부분의 제 2 품질과 비교하는 단계를 포함할 수 있다. 상기 이미지의 제 1 부분을 이미지의 제 2 부분과 비교하는 단계는 상기 이미지의 제 1 부분의 제 1 전력 소비량(power consumption)과 상기 이미지의 제 2 부분의 제 2 전력 소비량과 비교하는 단계를 포함할 수 있다. 비교하는 단계는 의사 실행 상태(pseudo running state)에서 비교하는 단계를 포함할 수 있다. 상기 기술은 제 1 기술을 포함할 수 있고, 상기 방법은 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 제 2 패킹 기술을 결정하는 단계 및 상기 제 2 기술에 기초하여 상기 어레이에서 상기 이미지의 부분에 대한 커버리지를 결합하는 단계를 더 포함할 수 있다. 상기 제 1 기술은 메모리에 데이터를 저장하고, 상기 제 2 기술은 상기 메모리에 저장된 데이터를 사용할 수 있다. 결정하는 단계는 상기 인디케이션에 기초하여 상기 제 1 기술에 대한 제 1 기준 세트를 선택하는 단계, 상기 제 1 기준 세트에 기초하여 상기 제 1 기술을 선택하는 단계, 상기 인디케이션에 기초하여 상기 제 2 기술에 대한 제 2 기준 세트를 선택하는 단계, 및 상기 제 2 기준 세트에 기초하여 상기 제 2 기술을 선택하는 단계를 포함할 수 있다. 상기 제 1 기준 세트는 상기 이미지의 부분의 제 1 부분에 대한 것일 수 있고, 상기 제 2 기준 세트는 상기 이미지의 부분의 제 2 부분에 대한 것일 수 있다. 상기 제 2 기술에 기초하여 상기 이미지의 부분에 대한 커버리지를 결합하는 단계는 2개의 프리미티브들 사이에서 이미지 엘리먼트를 시프트하는 단계를 포함할 수 있다.
장치는 이미지의 부분에 대한 인디케이션을 수신하고 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 패킹 기술을 결정하도록 구성된 평가 스테이지, 및 상기 이미지의 부분에 대한 커버리지를 수신하고 상기 패킹 기술에 기초하여 상기 커버리지를 패킹하도록 구성된 커버리지 패킹 스테이지를 포함하는 그래픽 처리 파이프라인(graphics processing pipeline)을 포함할 수 있다. 상기 패킹 기술은 제 1 패킹 기술을 포함할 수 있고, 상기 평가 스테이지는 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 제 2 패킹 기술을 결정하도록 구성될 수 있고, 상기 커버리지 패킹 스테이지는 상기 제 2 패킹 기술에 기초하여 상기 커버리지를 패킹하도록 구성될 수 있다.
그래픽 처리 장치(GPU)에서 커버리지를 결합하는 방법은 이미지 엘리먼트들의 어레이에서 커버리지를 갖는 제 1 프리미티브를 수신하는 단계, 어레이의 제 1 위치에 상기 제 1 프리미티브의 제 1 이미지 엘리먼트를 배치하는 단계, 상기 어레이에서 커버리지를 갖는 제 2 프리미티브를 수신하는데, 상기 제 2 프리미티브는 상기 어레이의 상기 제 1 위치에 있는 제 1 이미지 엘리먼트와 중첩하는 제 2 이미지 엘리먼트를 가지는 단계, 및 상기 어레이의 제 2 위치에 상기 제 2 프리미티브의 제 3 이미지 엘리먼트를 배치하는 단계를 포함한다. 제 3 이미지 엘리먼트를 배치하는 단계는 상기 제 1 프리미티브 및 상기 제 2 프리미티브를 포함하는 이미지의 부분에 대한 인디케이션을 수신하는 것에 기초할 수 있다.
GPU(Graphics Processing Unit)에서 커버리지를 처리하는 방법은 GPU 파이프라인의 제 1 스테이지로부터 이미지의 부분에 대한 커버리지를 수신하는 단계, GPU 파이프라인에 대한 인터페이스를 통해 상기 이미지의 부분에 대한 인디케이션을 수신하는 단계, 상기 인디케이션에 기초하여, 상기 이미지의 부분에 대한 패킹 기술을 결정하는 단계, 상기 패킹 기술에 기반하여 상기 이미지의 부분에 대한 커버리지를 어레이로 패킹하는 단계, 및 상기 어레이를 GPU 파이프라인의 제 2 스테이지로 전송하는 단계를 포함할 수 있다.
그래픽 처리 장치(GPU)에서 커버리지를 처리하는 방법은 제 1 프리미티브의 적어도 일부에 대한 제 1 커버리지 및 제 2 프리미티브의 적어도 일부에 대한 제 2 커버리지를 GPU 파이프라인의 제 1 스테이지로부터 수신하는데, 상기 제 1 프리미티브의 일부 및 상기 제 2 프리미티브의 일부는 이미지의 부분과 연관되어 있는 단계, 상기 이미지의 부분에 대한 인디케이션을 수신하는 단계, 상기 인디케이션에 기초하여 상기 제 1 커버리지와 상기 제 2 커버리지를 결합하는 기술을 결정하는 단계, 상기 기술에 기초하여 어레이에서 상기 제 1 커버리지와 상기 제 2 커버리지를 결합하는 단계, 및 상기 GPU 파이프라인의 제 2 스테이지로 상기 어레이를 전송하는 단계를 포함할 수 있다.
본 발명의 실시예들에 따라, GPU 내의 그래픽 집약적 동작의 효율성을 개선할 수 있다.
본 개시의 전술한 그리고 추가적인 특징 및 이점들은 첨부된 도면을 참조한 다음의 상세한 설명으로부터 보다 용이하게 명백해질 것이다.
도 1a는 일부 실시예에 따른 동적 분기 픽셀 셰이더 워프 패커 유닛(dynamic branching pixel shader warp packer unit)을 포함하는 GPU의 블록도를 도시한다.
도 1b는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 포함하는 GPU를 도시한다.
도 1c는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 모바일 퍼스널 컴퓨터를 도시한다.
도 1d는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 타블렛 컴퓨터를 도시한다.
도 1e는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 스마트폰을 도시한다.
도 2는 일부 실시예에 따른 2x2 쿼드를 도시하는 블록도이다.
도 3은 일부 실시예에 따른 부분적으로-커버된 2x2 쿼드의 프리미티브를 나타내는 블록도이다.
도 4는 일부 실시예에 따른 부분적으로-커버된 다른 2x2 쿼드의 다른 프리미티브를 나타내는 블록도이다.
도 5는 일부 실시예에 따른 패킹된 2x2 쿼드를 도시하는 블록도이다.
도 6은 일부 실시예에 따른 다른 패킹된 2x2 쿼드를 도시하는 블록도이다.
도 7은 (x,y)에서 픽셀에 대해 표현된 주변 픽셀들의 무게중심 팩터(barycentric factor) 계산과 관련된 도면이다.
도 8은 일부 실시예에 따른 작은 프리미티브들에 대한 셰이더 점유(shader occupancy)를 수행하는 기술을 도시하는 흐름도이다.
도 8은 일부 실시예에 따른 작은 프리미티브들에 대한 셰이더 점유를 수행하는 다른 기술을 도시하는 흐름도이다.
도 10은 일부 실시예에 따른 패킹 기술 선택을 갖는 GPU 파이프라인의 예시적인 실시예를 도시한다.
도 11은 일부 실시예에 따른 커버리지를 패킹하는 방법의 예시적인 실시예의 흐름도를 도시한다.
도 12는 일부 실시예에 따른 쿼드 커버리지에서 중첩 커버리지를 갖는 프리미티브들에 대한 병합 동작의 예를 도시한다.
도 13a 내지 도 13c는 일부 실시예에 따른 하이브리드 픽셀 패킹 기술의 실시예를 도시한다.
도 14는 일부 실시예에 따른 커버리지를 처리하는 하나 이상의 픽셀 패킹 기술들을 선택하고 구현하는 방법의 실시예를 도시한다.
도 15는 일부 실시예에 따른 커버리지를 처리하는 하나 이상의 픽셀 패킹 기술들을 선택하고 구현하는 방법의 실시예를 도시한다.
도 16은 일부 실시예에 따라 패킹 기술 선택을 구현할 수 있는 GPU를 포함하는 시스템 온 칩(SOC) 장치의 실시예를 도시한다.
도 17은 본 개시에서 설명된 방법 또는 장치 중 임의의 것이 통합될 수 있는 이미지 디스플레이 장치의 실시예를 도시한다.
도 18은 일부 실시예에 따른 GPU에서 커버리지를 패킹하는 방법의 일 실시예를 도시한다.
이하 본 개시는 실시예들을 참조하여 상세히 이루어질 것이며, 상기 실시예들의 예들은 첨부 도면에 도시되어 있다. 이하의 상세한 설명에서, 발명적 개념의 완전한 이해를 가능하게 하기 위해 다수의 특정 세부항들이 설명된다. 그러나, 당업자는 이러한 특정 세부사항 없이 본 발명을 실시할 수 있음을 이해해야 한다. 다른 예로서, 공지된 방법, 절차, 구성요소, 회로 및 네트워크는 실시예들의 측면을 불필요하게 모호하게 하지 않도록 상세하게 기술되지 않는다.
비록 "제 1", "제 2" 등의 용어가 본 명세서에서 다양한 엘리먼트들을 설명하기 위해 사용될 수 있지만, 이들 엘리먼트들은 이들 용어에 의해 제한되지 않음을 이해할 것이다. 이들 용어들은 하나의 엘리먼트를 다른 엘리먼트와 구별하기 위해서만 사용된다. 예를 들어, 본 발명의 범위를 벗어나지 않으면서 제 1 픽셀은 제 2 픽셀로 명명될 수 있고, 유사하게 제 2 픽셀은 제 1 픽셀로 명명될 수 있다.
본 발명의 설명에서 사용된 용어는 특정 실시예를 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 발명의 설명 및 첨부된 특허청구범위에서 사용된 바와 같이, 단수 형태 "a", "an" 및 "the"는 문맥상 명백하게 달리 나타내지 않는 한 복수 형태도 포함하도록 의도된다. 본 명세서에서 사용된 용어 "및/또는"은 하나 이상의 관련되어 열거된 아이템들의 임의의 및 모든 가능한 조합을 지칭하고 포함하는 것으로 또한 이해될 것이다. 본 명세서에서 사용될 때 "포함한다" 및/또는 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 동작, 소자 및/또는 구성요소의 존재를 특정하지만 하나 이상의 다른 특징, 정수, 단계, 동작, 소자, 구성요소 및/또는 그 그룹의 존재 또는 추가를 배제하지는 않는다는 것이 또한 이해될 것이다. 도면의 구성요소와 특징은 반드시 축척 방식에 따라 그려진 것은 아니다.
본 명세서에 개시된 일부 실시예는 비교적 작은 프리미티브에 대한 셰이더 점유를 수행하기 위한 기술을 포함할 수 있다. 다수의 프리미티브들의 커버리지가 동일한 2x2 쿼드에 배치되는 경우 추가 정보가 쿼드의 각 픽셀과 함께 패키징될 수 있으므로 방향 도함수 계산에 필요할 수 있는 계산을 고려할 수 있다. 이 기술은 보조 정보와 함께 잠재적으로 구분된 프리미티브들로부터의 2x2 쿼드들의 전체 패킹(pull packing)을 포함할 수 있으며, 상기 보조 정보는 그렇지 않다면 2x2 쿼드들에서 "헬퍼" 픽셀 또는 "H" 픽셀을 누락시킴으로써 생성되었을 정보를 생성하는 데 사용될 수 있으며, 그에 따라 처리 효율성을 향상시킬 수 있다.
여기에 개시된 일부 실시예는 GPU 내의 프로그램밍가능 유닛 및/또는 고정-기능 유닛의 사용을 수반할 수 있는 GPU 내의 그래픽 집약적 동작의 효율성을 개선한다. 여기에 개시된 실시예는 하나의 프리미티브에서 다른 프리미티브로 커버리지를 이송하지 않을 수 있지만, 대신에 둘 이상의 프리미티브들로부터의 커버리지가 정밀도를 잃지 않으면서 동일한 2×2 쿼드에 존재할 수 있는 메커니즘을 제공할 수 있다. 또한 이미지 품질을 유지하기 위해 관련된 휴리스틱 임계값이 필요하지 않는다. 하나 이상의 인커밍 프리미티브로부터의 커버리지를 갖는 쿼드 내 픽셀들에 대해, 추가 정보가 존재할 수 있고 계산이 발생할 수 있다. 따라서, 작은 프리미티브 처리 효율이 향상될 수 있다. 더욱이, 작은 및 마이크로-다각형의 사용이 증가할 수 있으며, 이에 따라, 예컨대, 그래픽 집약적 게임 애플리케이션과 함께 사용될 때 기하학적 복잡성과 충실도가 더 높아지게 된다.
도 1a는 일부 실시예에 따른 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 포함하는 GPU(100)의 블록도를 예시한다. 도 1b는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 포함하는 GPU를 도시한다. 도 1c는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 모바일 퍼스널 컴퓨터를 도시한다. 도 1d는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 타블렛 컴퓨터를 도시한다. 도 1e는 일부 실시예에 따른 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 갖는 GPU(100)를 포함하는 스마트폰(180c)을 도시한다. 이하 도 1a 내지 1e를 참조하여 설명된다.
동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 비교적 작은 프리미티브들(예를 들어, 130, 135)에 대한 셰이더 점유를 수행할 수 있다. 일부 실시예에서, 쿼드(115) 및 쿼드(120)와 같은 2x2 쿼드는 각각 단지 부분적으로만 채워질 수 있다(즉, 부분적으로 커버될 수 있다). 여기에서는 일반적으로 2×2 쿼드가 참조되지만, 설명된 본 발명의 개념을 벗어나지 않으면서 다른 크기의 쿼드가 사용될 수 있음이 이해될 것이다. 작은 프리미티브(130)는 2x2 쿼드(115)를 부분적으로만 채운다. 작은 프리미티브(135)는 2x2 쿼드(120)를 부분적으로만 채운다. 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 2개 이상의 프리미티브들(예를 들어, 130, 135)을 동일한 2x2 쿼드(140)로 패킹할 수 있다. 다수의 프리미티브들의 커버리지가 동일한 2x2 쿼드(140)에 배치되는 경우, 추가 속성(attribute) 정보(예: 145)가 2x2 쿼드(140)의 각 픽셀(예: 150)과 함께 패키징 및/또는 저장될 수 있으며, 그에 따라 방향 도함수(directional derivatives)(예: 160, 165, 192)를 계산하는 데 필요할 수 있는 정보를 고려할 수 있다. 이 기술은 속성 정보(예: 145)와 함께 잠재적으로 구분된 프리미티브들(예: 130, 135)로부터의 2x2 쿼드들의 전체 패킹을 포함할 수 있으며, 이 속성 정보는 그렇지 않다면 2x2 쿼드들에서 H 픽셀을 누락시킴으로써 생성되었을 정보를 생성하는 데 사용될 수 있으며, 그에 따라 처리 효율성을 향상시킬 수 있다.
여기에 개시된 일부 실시예는 GPU(100) 내의 하나 이상의 셰이더 코어(들)(110)와 같은 프로그램밍가능 유닛 및/또는 고정-기능 유닛의 사용을 수반할 수 있는 GPU(100) 내의 그래픽 집약적 동작의 효율성을 개선한다. 여기에 개시된 실시예는 하나의 프리미티브(예를 들어, 130)에서 다른 프리미티브(예를 들어, 135)로 커버리지를 이전하지 않을 수 있지만, 대신에 둘 이상의 프리미티브들(예를 들어, 130, 135)로부터의 커버리지가 정밀도를 잃지 않으면서 동일한 2×2 쿼드(140)에 존재할 수 있는 메커니즘을 제공할 수 있다. 추가 속성 정보(예를 들어, 145)가 존재할 수 있고 하나 이상의 인커밍 프리미티브(예를 들어, 130, 135)로부터의 커버리지를 가질 수 있는 2x2 쿼드(140) 내의 픽셀들(예를 들어, 150)에 대해, 연산들이 발생할 수 있다. 따라서, 작은 프리미티브 처리 효율이 향상될 수 있다. 더욱이, 작은 및 마이크로-다각형의 사용이 증가할 수 있으며, 이에 따라, 예컨대, 그래픽 집약적 게임 애플리케이션과 함께 사용될 때 기하학적 복잡성과 충실도가 더 높아지게 된다.
2개의 프리미티브들(예를 들어, 130, 135)로부터의 2×2 쿼드들(예를 들어, 115, 120)이 중첩 커버리지를 갖지 않을 때, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 2개의 서로 다른 프리미티브들(예: 130, 135)로부터의 2×2 쿼드들(예를 들어, 115, 120)을 병합하고, 이들 쿼드들을 동일한 2x2 쿼드(140) 내에 배치할 수 있다. 이에 따라, 더 바람직한 워프 점유가 가능하게 된다. 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 다양한 프리미티브들(예를 들어, 130, 135)로부터 비중첩 쿼드들(non-overlapping quads)(예를 들어, 115, 120)을 수집할 수 있는 히스테리시스 윈도우(155)를 포함할 수 있다. 예를 들어, 히스테리시스 윈도우(155) 내에서, 마주치는 다양한 프리미티브들(예를 들어, 130, 135)은 이하 추가로 설명되는 바와 같이 하나 이상의 셰이더 코어들(110)에서 처리하기 위해 단일의 동일한 2x2 쿼드(140)로 기회적으로 결합될 수 있다. 공유 쿼드 처리의 후보들이 될 수 있지만 히스테리시스 윈도우(155)를 벗어나는 프리미티브들은 종래의 기술을 사용하여 처리될 수 있지만, 개선된 셰이더 효율의 이점을 얻지 못할 것이다. 비중첩 커버리지 품질이 요구되지 않을 수 있다. 다시 말해서, 픽셀들이 하나 이상의 셰이더 코어들(110)에서 처리되는 동안 데이터의 일부 추가 버퍼링을 희생하더라도, 제 1 부분적으로-커버된 쿼드(115) 및 제 2 부분적으로-커버된 쿼드(120)는 중첩 커버리지(overlapping coverage)를 가질 수 있다.
동적 분기 셰이더 워프 패커 유닛(105)은 하나 이상의 프리미티브들(예를 들어, 130, 135)를 수신하고 적어도 2개의 부분적으로 커버된 2x2 쿼드들(예를 들어, 115, 120)이 중첩 커버리지를 갖지 않는지의 여부를 결정할 수 있다. 여기에 개시된 실시예들에 따르면, 적어도 2개의 부분적으로 덮인 2x2 쿼드들(예를 들어, 115, 120)은 동일한 위치 또는 다른 위치에 있을 수 있다. 공간적 근접성(Spatial proximity)은 요구되지 않는다. 즉, 부분적으로 커버된 2x2 쿼드들(예: 115, 120)은 서로 인접할 필요가 없으며, 여기에 개시된 실시예는 부분적으로 커버된 2x2 쿼드들(예: 115, 120)이 동일하거나 유사한 위치에 있지 않더라도 마찬가지로 효과적일 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 적어도 2개의 부분적으로 커버된 2×2 쿼드들(예를 들어, 115, 120)을 패킹된 2×2 쿼드(예를 들어, 140)로 패킹할 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 상기 패킹된 2x2 쿼드(예를 들어, 140)를 프로세싱을 위해 하나 이상의 셰이더 코어(110)로 전송할 수 있다.
또한, 컴파일러는 동적 분기 하이브리드 모드(dynamic branching hybrid mode)를 지원하기 위해 코드 시퀀스(170)를 생성하도록 변경될 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 하나 이상의 레인(lane)(125)을 사용하여 코드 시퀀스(170)에 기초하여 방향 도함수(예를 들어, 160, 165, 192)를 계산할 수 있다. 하나 이상의 레인(125)은 예를 들어, 하나 이상의 연산 스레드일 수 있다. 하나 이상의 레인(125)은, 예를 들어, 멀티-스레드 및/또는 멀티-코어 마이크로프로세서에 의해 처리될 수 있다. 컴파일러는 교차-레인 방향 도함수 계산(예를 들어, 160) 및/또는 동일-레인 방향 도함수 계산(예를 들어, 165)을 지원하기 위해 코드 시퀀스(170)를 생성할 수 있다.
다수의 픽셀들이 동일한 레인에 쌓일 수 있다. 예를 들어, H 픽셀과 관련된 작업은 커버된 픽셀과 동일한 레인으로 매핑될 수 있다. 일부 실시예에서, H 픽셀 데이터는 유효 픽셀들(alive pixels)로 쌓일 수 있다. 예를 들어, 하나(1) 또는 세개의(3) H 픽셀들이 유효 픽셀들에 쌓일 수 있다. 컴파일러는 교차-레인 계산을 위한 코드와 나란히, 동일한 레인 내 방향 도함수를 계산하기 위해 코드를 생성할 수 있다. 방향 도함수(예: 160, 165, 192)는 교차-레인 연산 또는 동일-레인 연산에서 계산될 수 있다. 컴파일러는 두 방식 모두에 대한 코드를 생성할 수 있다. 특정 동작 모드(즉, 동일-레인 또는 교차-레인)는 하나 이상의 플래그(114)를 사용하여 런타임에 선택될 수 있으며, 상기 플래그는 웨이브 패킹의 일부로서 동적 분기 셰이더 워프 패커 유닛(105)에 의해 생성 및 전송될 수 있다. 하나 이상의 플래그(114)는 예를 들어 이진 플래그일 수 있다.
동적 분기 쉐이더 워프 패커 유닛(105)은 워프의 2x2 쿼드들(예를 들어, 140) 각각에 대한 커버리지를 갖는 커버리지 맵(190)을 포함하는 패킹된 워프(191)를 하나 이상의 쉐이더 코어들(110)로 전달할 수 있다. 워프(warp)는 16, 32, 64 등과 같은 2의 거듭제곱의 너비를 가질 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 하나 이상의 셰이더 코어(110)에 하나 이상의 플래그(114)를 제공할 수 있다. 하나 이상의 플래그(114)는 하나 이상의 셰이더 코어(110)에서 주어진 픽셀(예를 들어, 150)에 대한 코드를 제어(예를 들어, 동적 분기를 위해 제공)하여 따라서 주어진 2×2 쿼드(예: 140)에 대해 집합적으로 4개의 스레드에 걸쳐 제어하기 위해 사용될 수 있다. 쿼드의 커버리지 및 존재하는(또는 존재하지 않는) H 픽셀에 따라, 하나 이상의 플래그(114)는 방향 도함수(예를 들어, 160, 165, 192)의 계산과 관련하여 취해진 분기(branch)를 제어하는 데 사용될 수 있다. 다시 말해서, 컴파일러는 각 픽셀에서 또는 픽셀에 걸쳐 방향 도함수(예: 160, 165, 192)를 계산하는 다양한 시나리오에 대한 코드 세그먼트(170)를 생성할 수 있으며, 동적 분기 셰이더 워프 패커 유닛(105)으로부터 2x2 쿼드(예를 들어, 140)와 함께 전달될 수 있는 추가 속성 정보(145)에 의해 지시된 바와 같은 분기를 이러한 경우들 중에서 동적으로 선택할 수 있다.
동적 분기 셰이더 워프 패커 유닛(105)에 의해 제공되는 제어에 응답하여, 하나 이상의 셰이더 코어(예를 들어, 110) 및/또는 레인(125) 각각은 수평 방향 도함수 또는 수직 방향 도함수, 또는 둘 모두가 동일 레인(예: 165) 또는 교차 레인(예: 160)에서 계산되는 지를 결정할 수 있다. 이 결정은 2x2 쿼드(140)에 수평 또는 수직 픽셀 이웃들이 존재하는지의 여부에 기초하며 및/또는 동적 분기 픽셀 셰이더 워프 패커 유닛(105)에 이용가능한 정보에 기초할 수 있다. 따라서, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 각 방향에 대해 하나씩, 2개의 비트마스크들(예를 들어, 175, 180)을 생성할 수 있다. 다시 말해, 동적 분기 픽셀 쉐이더 워프 패커 유닛(105)은 수직 방향에 대해 비트마스크(175)를 생성하고 수평 방향에 대해 비트마스크(180)를 생성할 수 있다. 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 이러한 결정을 내리기 위해 프리미티브로부터의 쿼드 커버리지의 지식을 사용할 수 있다. 비트마스크(예를 들어, 175, 180) 각각은 픽셀당 1비트를 포함할 수 있다.
프리미티브는 2x2 쿼드의 배수로 래스터화될 수 있다. 하나 이상의 2x2 쿼드들은 픽셀 셰이더 워프로 함께 패킹될 수 있고, 실행을 위해 하나 이상의 셰이더 코어들(110)로 전송될 수 있다. 방향 도함수(예: 160, 165, 192)를 계산하는 것은 2차원의 각 차원에서 적어도 2개의 데이터 값들을 사용할 수 있다. 따라서, 2x2 쿼드의 픽셀들은 방향 도함수를 계산하는 데 사용될 수 있다. 이 방향 도함수는 텍스처의 맵-레벨을 결정하는 것을 포함하여 다양한 방식으로 사용될 수 있는 특정 LOD(level-of-detail)를 계산하는 데 유용할 수 있다.
일부 실시예에서, 2x2 쿼드들은 또한 2x2 쿼드에서 픽셀들 사이의 공간적 지역성(spatial locality)을 활용함으로써 텍스처 트래픽을 줄이는 데 도움이 될 수 있다. 따라서, GPU(100)는 2x2 쿼드 내 모든 픽셀들이 점유되지 않은 경우에도 하나 이상의 픽셀 셰이더 코어들(110)로 2x2 쿼드를 스케줄링할 수 있다. 보이지 않지만 방향 도함수(예: 160, 165, 192)를 계산할 목적으로만 사용되는 픽셀들은 H 픽셀로 지칭될 수 있다. 대부분의 프리미티브들이 크면 완전히 채워진 2x2 쿼드들의 대부분도 마찬가지이다. 달리 말하면, 여기에 개시된 실시예는 대부분의 프리미티브가 크지 않을 때 더 중요하다 일부 실시예에서, 큰 프리미티브는 2x2 쿼드들의 10개 또는 100개를 커버하는 것으로 정의될 수 있다. 프리미티브가 클수록 (해당 프리미티브에 의해) 완전히 커버된 2x2 쿼드들에 비해 부분적으로-커버된 2x2 쿼드들의 비율은 작아진다.
그러나, 프레임이 마이크로-다각형에 의해 지배되는 경우(예컨대, 프리미티브가 픽셀들의 2x2 쿼드 미만을 차지하는 경우) 2x2 쿼드에서 전체 커버리지의 부족은 비효율적인 GPU 셰이더 코드 사용을 초래할 수 있다. 이것은 작은(마이크로는 아님) 다각형에 대해서도 진실일 수 있다. 일반적으로 삼각형인 프리미티브들이 2개 또는 여러 개의 2x2 쿼드들을 커버하더라도 직사각형 프리미티브가 아닌 삼각형 프리미티브이기 때문에, 상당한 비율의 부분적으로-커버된 2x2 쿼드들이 여전히 존재할 수 있다. 여기에 개시된 실시예들은 소형 및 마이크로 프리미티브 모두에 유리하다.
이러한 성능 문제를 해결하기 위해, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 픽셀을 독립적으로 스케줄링할 수 있다. 이는 X 및 Y 방향으로 인접한 픽셀들의 속성을 동일한 픽셀에 할당함으로써 가능해질 수 있다. 방향 도함수(예: 160, 165, 192)는 교차-레인 연산 대신 동일-레인 연산에서 완전히 계산될 수 있다. (예를 들어, 매 샘플마다) 속성을 보간하는 무게중심 팩터를 사용하는 아키텍처에서, 이것은 2x2 쿼드의 수평 및 수직 방향으로 인접 픽셀들의 무게중심 팩터들(185)을 카피함으로써 달성될 수 있다. 다시 말해서, 각 픽셀은 이제, 3개의 무게중심 팩터들(185); i) 그 자신의 무게중심 팩터, ii) 수평 방향을 따라 이웃하는 픽셀에 대한 무게중심 팩터; 및 iii) 수직 방향을 따라 이웃하는 픽셀에 대한 무게중심 팩터의 세트들을 포함할 수 있다. 무게중심 팩터들(185)은 방향 도함수(예를 들어, 160, 165, 192)에 대한 속성들을 계산하는 데 사용될 수 있다. 이 기술은 레인당 4개의 추가 값들이 저장될 수 있기 때문에 레지스터 압박(pressure)을 증가시킬 수 있다. 그러나, 무게중심 팩터들(185)의 각 세트에 대해, 그 중 2개의 무게중심 팩터들만 저장하는 것으로 충분하며, 세 번째 값은 1에서 2개의 무게중심 팩터들(185)의 합을 빼서 계산할 수 있다.
방향 도함수(예: 160, 165, 192)를 계산하는 데 사용되는 픽셀(예: 150)이 프리미티브의 커버리지의 일부인 경우 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 무게중심 팩터(예: 185)를 카피할 필요가 없으며, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 방향 도함수(예를 들어, 160)를 계산하기 위해 교차-레인 연산을 사용할 수 있다. 방향 도함수를 계산하는 데 사용되는 픽셀(예: 150)이 프리미티브의 커버리지의 일부가 아닌 경우 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 방향 도함수(예: 165)를 계산하기 위해 단일-레인 연산을 사용할 수 있다. 이 경우, 무게중심 팩터들(185), 하나 이상의 플래그(114) 및/또는 2×2 쿼드(140)의 커버리지 맵(190)을 갖는 패킹된 워프(191)가 하나 이상의 쉐이더 코어(110)로 전송될 수 있다. 하나 이상의 셰이더 코어(110)는 수평 및/또는 수직 도함수가 동일-레인 연산 또는 교차-레인 연산에서 계산되는지의 여부를 결정하기 위해 커버리지 맵(190)을 사용할 수 있다. 하나 이상의 셰이더 코어(110)는 이러한 경로들 중 어느 하나를 사용하기 위해 동적 분기(dynamic branching)를 사용할 수 있다. 대안적으로 또는 추가로, 셰이더 프로그램(shader program)에 대한 별도의 코드 진입점(entry point)가 제공될 수 있으며, 이는 동적 분기 명령어(dynamic branch instruction)를 실행하는 것과 관련된 대기시간(latency) 및 에너지를 절약한다면 바람직할 수 있다. 다시 말해서, 동적 분기는 커버리지 맵(190) 및/또는 다른 파라미터들에 응답하여 프로그램이 서로 다른 진입점들으로부터 시작하게 함으로써 셰이더 프로그램 외부에서 "수행"될 수 있다.
무게중심 팩터들(185)을 전송하는 대신에, 부분 차분(partial differential)(192)이 이하 더 설명되는 바와 같이 하나 이상의 셰이더 코어(110)로 전송될 수 있다. GPU(100)는 방향 도함수를 저장하는 메모리(116)를 포함할 수 있다. 메모리(116)는 휘발성 또는 비휘발성 메모리 또는 다른 적절한 저장 장치일 수 있다.
GPU(100)는 하나 이상의 텍스처 유닛(195)을 포함할 수 있다. LOD의 계산은 하나 이상의 셰이더 코어(110) 또는 하나 이상의 텍스처 유닛(195)에서 수행될 수 있다. LOD가 하나 이상의 셰이더 코어(110) 외부에서 구현되고 하나 이상의 텍스처 유닛(195)에서 수행될 때, 추가 속성 데이터(예를 들어, 145)는 하나 이상의 셰이더 코어(110)에서 하나 이상의 텍스처 유닛(195)으로 전송될 수 있으며 및/또는 약간의 변형이 하나 이상의 텍스처 유닛(195)에 대해 이루어질 수 있다. 하나 이상의 셰이더 코어(110)는 발생할 수 있는 샘플 명령어 및/또는 텍스처 동작을 인식할 수 있고, 따라서 하나 이상의 텍스처 유닛(195)에 제공하기 위해 다른 텍스처 좌표 정보에 액세스할 수 있다.
GPU(100)는 하나 이상의 보간 유닛(interpolation unit)(198)을 포함할 수 있다. 속성(예를 들어, 145)의 보간은 무게중심 팩터(185)를 사용하여 수행될 수 있으며 및/또는198 평면 방정식(interpolation unit)을 사용하여 하나 이상의 보간 유닛(198)에 의해 수행될 수 있다. 그러한 경우에, 하나 이상의 보간 유닛(198)에 대한 추가 변형은 H 픽셀에 대한 속성 보간을 수행할 수 있다. 또한, 어떤 H 픽셀이 존재할 수 있고 어떤 속성이 각각의 H 픽셀과 연관될 수 있는지를 나타내는 맵(199)이 하나 이상의 보간 유닛(198)에 의해 사용될 수 있다.
도 2는 일부 실시예에 따른 2x2 쿼드(200)를 도시하는 블록도이다. 2×2 쿼드(200)는 4개의 픽셀들(205a, 205b, 205c, 205d)을 포함할 수 있다. 각 픽셀은 중심점(center point)(예: 215)을 가질 수 있다. 각 픽셀은 픽셀 번호(예: 210)를 가질 수 있다.
도 3은 일부 실시예에 따른 부분적으로-커버된 2x2 쿼드(115)의 프리미티브(130)를 나타내는 블록도이다. 도 4는 일부 실시예에 따른 부분적으로-커버된 다른 2x2 쿼드(120)의 프리미티브(135)를 나타내는 블록도이다. 도 1a, 도 3 및 도 4를 참조하여 설명이 제공된다.
2×2 쿼드(115)는 도착하는 프리미티브들의 커버리지에 기초하여 채워질 수 있다. 프리미티브들(130 및 135)은 각각 동일한 2x2 쿼드(140)에 커버리지를 기부할 수 있다. 프리미티브들(130, 135)은 각각 3개의 정점(예를 들어, 305, 405)을 포함할 수 있다. 통상적으로, 2×2 쿼드(115) 및 2×2 쿼드(120)는 모두 하나 이상의 셰이더 코어(110)에 개별적으로 전송될 필요가 있을 것이다. 프리미티브(130)에 의해 커버되는 2개의 상위 픽셀들, 및 방향 도함수 계산에 사용되는 2개의 H 픽셀들(예를 들어, 310)을 갖는 2x2 쿼드(115)는 전송될 것이다. 프리미티브(135)에 의해 커버되는 1개의 하위 픽셀, 및 방향 도함수 계산에 사용되는 3개의 H 픽셀들(예를 들어, 410)을 갖는 2x2 쿼드(120)는 전송될 것이다. 따라서, 2x2 쿼드(115 및 120)에서 3개의 픽셀들만이 커버되지만, 총 8개의 스레드들이 하나 이상의 셰이더 코어(110)에서 각 2x2 쿼드의 각 픽셀에 대해 하나씩 할당될 것이다.
도 5는 일부 실시예에 따른 패킹된 2x2 쿼드(140)를 도시하는 블록도이다. 여기에 개시된 실시예들에 따르면, 커버리지가 다른 인접 프리미티브(예를 들어, 130, 135)에 속하는 경우 H 픽셀들이 사용될 필요가 없다. 예를 들어, 도 5에 도시된 바와 같이, 프리미티브들(130 및 135)은 2x2 쿼드(140)에 존재하고, 따라서 프리미티브(130)만이 방향 도함수 계산을 위해 제공하기 위해 연관된 H 픽셀(310)과 함께 충분한 커버리지를 가질 수 있다. 그러나, 프리미티브(135)는 2x2 쿼드(140)에서 커버리지의 단일 픽셀(즉, 205d)만을 갖고 연관된 H 픽셀은 가지지 않는다. 프리미티브(135)의 커버리지에 대응하는 픽셀(205d)은 추가 속성 정보(예를 들어, 145)의 2개의 H 픽셀의 가치 및/또는 하나 이상의 셰이더 코어(110)에 의한 속성 평가를 필요로 하는 것으로 마킹될 수 있다.
통상적으로, 프리미티브들(예를 들어, 130, 135) 각각은 총 8개의 픽셀들에 대해 하나 이상의 셰이더 코어들(110)로 전송될 4개의 픽셀들을 요구할 수 있다. 여기에 개시된 실시예들을 사용하여, 여전히 완전히 무손실 결과를 달성하면서, 8개 픽셀들이 아닌 3개 또는 4개의 픽셀들만이 하나 이상의 셰이더 코어(110)로 전송될 수 있다.
도 6은 일부 실시예에 따른 다른 패킹된 2x2 쿼드(600)를 도시하는 블록도이다. 이 예시적인 실시예에서, 동일한 2×2 쿼드(600)에 커버리지를 갖는 3개의 프리미티브들(예를 들어, 130, 135, 615)이 있고, 프리미티브들(예를 들어, 130, 135, 615)은 레인들(lanes)에 걸쳐 수행될 방향 도함수 계산을 위해 2x2 쿼드(600)의 충분한 픽셀들을 가지지 못할 수 있다. 결과적으로, 2x2 쿼드(600)의 각 픽셀과 연관된 속성 정보(145)에 기초한 적어도 일부 추가 속성 계산이 하나 이상의 인접 픽셀들에 대해 수행될 수 있다. 비트마스크(bitmask)들(예를 들어, 175, 180)은 주어진 프리미티브(예를 들어, 130, 135 및 615)에 대해 어떤 이웃 픽셀이 존재하거나 존재하지 않는 지를 나타내기 위해 2x2 쿼드(600)의 픽셀들 각각에 대해 사용될 수 있다. 이것은 하나 이상의 셰이더 코어(110) 및/또는 하나 이상의 텍스처 유닛(195)이 비트마스크(예를 들어, 175, 180) 및/또는 추가 속성 정보(예를 들어, 145)에 기반하여 방향 도함수를 계산하는 것을 가능하게 한다.
따라서, 2×2 쿼드(600)에서 수평으로 인접한 커버리지를 갖는 프리미티브(130)에 대해, 수평 방향 도함수 계산은 종래 기술을 사용하여 계산될 수 있는 반면 수직 방향 도함수는 여기에 개시된 실시예를 사용하여 계산될 수 있다. 결과는 전술한 바와 같이 더 조밀한 패킹(denser packing)이며, 방향 도함수 계산에 사용할 수 있는 동일한 프리미티브의 이웃 픽셀이 있는 경우 불필요한 추가 작업이 주어진 픽셀에 대해 수행되지 않는다. 추가 작업의 오버로딩(overloading)은 커버된 픽셀 또는 헬퍼 픽셀(helper pixel)을 사용할 수 없는 경우에 오직 존재할 수 있는데, 후자는 특정 픽셀 위치가 동일한 2x2 쿼드에서 커버리지를 갖는 다른 프리미티브에 의해 점유되기 때문이다.
통상적으로, 프리미티브들(예를 들어, 130, 135 및 615) 각각은 총 12개의 픽셀들에 대해 하나 이상의 셰이더 코어들(110)로 전송될 4개의 픽셀들을 요구할 수 있다. 여기에 개시된 실시예들을 사용하여, 여전히 완전히 무손실 결과를 달성하면서, 12개 픽셀들이 아닌 4개의 픽셀들만이 하나 이상의 셰이더 코어(110)로 전송될 수 있다.
GPU의 일부 API들(응용 프로그래밍 인터페이스)은 완전한 프리미티브 커버리지를 가지지 않는 쿼드에 존재할 수 있는 H 픽셀들에 대해 수행해야 하는 동작 및 수행하지 않아야 하는 동작에 대한 특정 룰들(specific rules)을 갖는다. 특히, 예를 들어 API들은 H 픽셀이 메모리에 대한 읽기, 쓰기 또는 원자적 액세스(atomic access)와 같은 어떠한 부작용도 수행하지 않도록 지정할 수 있다. API들은 H 픽셀이 타겟들을 렌더링하기 위해 어떠한 데이터도 쓰지 않도록 지정할 수도 있는데, 일부 API에서는 "첨부(attachments)"로 지칭된다. 여기에 개시된 실시예에 따르면, 이러한 API 제약들(restrictions)이 문제가 되지 않고 심지어 편리할 수도 있는데, 왜냐하면 이러한 제약들이 수직 및/또는 수평 H 픽셀 또는 실제 픽셀이 존재하지 않는 쿼드의 픽셀들에 필요한 추가 코드와 관련하여 컴파일러의 부담을 줄일 수 있기 때문이다.
속성에 대한 무게중심 평가가 제공될 수 있다. 여기에 개시된 실시예가 호출되는지 여부에 관계없이, 프로세싱을 위해 하나 이상의 셰이더 코어(110)들로 전송된 각각의 픽셀에 대해, 프론트-엔드 변환 후, 애플리케이션-제공된 속성이 픽셀의 위치로 보간될 수 있다. 이것은 무게중심 좌표 쌍을 보간하고 픽셀 위치들 각각에서 프리미티브들의 속성들 각각을 평가하기 위한 기초(basis)로 사용하는 형태를 취할 수 있다. 일부 실시예에서, 속성의 이러한 평가는 방향성 파생 텍스처 입력(directional derivative texture input)으로서 역할을 하기 위해 픽셀의 속성 및 또한 하나 또는 2개의 바로 인접한 픽셀의 평가를 포함하도록 증대될 수 있다.
이하 도 1a 내지 도 7을 참조하여 설명된다.
무게중심 팩터들(185)을 전송하는 대신에, 부분 차분(partial differential)(192)이 하나 이상의 셰이더 코어(110)로 전송되어 방향 도함수(예를 들어, 160, 165, 192)를 계산하는 데 사용될 수 있다. 예를 들어, 방향 도함수들(예: 160, 165, 192)은 다음과 같이 결정될 수 있다.
Figure pat00001
,
Figure pat00002
,
Figure pat00003
는 스크린 공간에서 프리미티브의 3개의 정점들(예: 305, 405,...)일 수 있다. A는 프리미티브의 전체 영역(예: 130, 135)일 수 있다.
u, v, w는 프리미티브(예: 130, 135) 내 포인트의 3개의 무게중심 팩터들(185)이며, 그에 따라 u+v+w=1.0이 된다.
하나 이상의 셰이더 코어(110) 및/또는 하나 이상의 텍스처 유닛(195)은 다음 관계식을 사용하여 수평 및 수직 픽셀 이웃들의 무게중심 팩터들(185)을 계산할 수 있다.
Figure pat00004
Figure pat00005
Figure pat00006
Figure pat00007
Figure pat00008
Figure pat00009
Figure pat00010
Figure pat00011
부분 차분들(192)은 하나 이상의 셰이더 코어(110)에 공급될 수 있고, 하나 이상의 셰이더 코어(110) 및/또는 하나 이상의 텍스처 유닛(195)은 방향 도함수(예: 160, 165, 192)를 계산하기 위해 이웃 픽셀들의 무게중심 팩터들(185)를 계산할 수 있다.
대안적으로, 부분 차분들(192)은 방향성 도함수(예를 들어, 160, 165, 192)를 직접 계산하는데 사용될 수 있다. 예를 들어 하나의 값에 대한 계산은 다음과 같다. 동일한 기술이 모든 속성에 적용될 수 있다. 아래 유도에서 명백한 바와 같이 방향 도함수(예: 160, 165, 192)는 두 개의 곱셈과 한 번의 덧셈을 사용하여 계산될 수 있으며
Figure pat00012
Figure pat00013
은 이미 계산되었다고 가정한다.
Figure pat00014
Figure pat00015
Figure pat00016
Figure pat00017
무게중심 팩터(185) 및 부분 차분(192)을 전송하는 것은 레지스터들, 예를 들어 4개의 레지스터들의 측면에서 동일한 비용을 초래할 수 있다. 전자의 경우 방향 도함수(예: 160, 165, 192)의 계산은 이미
Figure pat00018
Figure pat00019
는 계산되었다고 가정하고 2개의 뺄셈, 2개의 곱셈 및 1개의 덧셈의 비용을 초래할 수 있다. 후자는 부분 차분(192)이 이미 이용가능할 수 있기 때문에 단지 2개의 곱셈 및 1개의 덧셈을 포함할 수 있다.
도 7은 (x,y)에서 픽셀에 대해 표현된 주변 픽셀들의 무게중심 팩터(barycentric factor) 연산과 관련된 도면이다. 수치들은 다음과 같이 방정식으로 표현될 수 있다.
Figure pat00020
Figure pat00021
일부 실시예에서, 다음 표 1은 (x,y)에서 픽셀에 대해 표현된 이웃 픽셀들의 무게중심 팩터 계산을 보여준다.
위치 U V
Figure pat00022
Figure pat00023
Figure pat00024
Figure pat00025
Figure pat00026
Figure pat00027
Figure pat00028
Figure pat00029
Figure pat00030
Figure pat00031
Figure pat00032
Figure pat00033
Figure pat00034
Figure pat00035
Figure pat00036
Figure pat00037
을 보간을 요구하는 속성으로 한다. 일부 픽셀 위치에서 이러한 속성들을 보간하기 위해 3개의 정점들 각각에서
Figure pat00038
,
Figure pat00039
,
Figure pat00040
로 주어진 각 속성의 값은 다음과 같이 이 픽셀에 대한 무게중심 팩터와 결합될 수 있다.
Figure pat00041
Figure pat00042
위의 방정식을 표 1의 식과 결합하면 이웃 픽셀들의 속성 계산은 다음과 같이 표현될 수 있다.
Figure pat00043
Figure pat00044
Figure pat00045
Figure pat00046
일부 실시예에서, 다음 표 2는 삼각형(즉, 프리미티브)의 3개의 모서리들에서 값이 주어지면 방향 도함수 계산을 보여준다.
방향 방향 도함수 계산
X
Figure pat00047
Y
Figure pat00048
상기 값들
Figure pat00049
,
Figure pat00050
,
Figure pat00051
,
Figure pat00052
은 GPU의 BCI(Barycentric Interpolation) 유닛와 함께 이미 사용 가능할 수 있다. 이러한 기존 데이터는 벡터 레지스터 파일로 카피되며, 그런 다음 상기 계산들은 4개의 곱셈과 4개의 덧셈(또는 뺄셈)으로 감소될 수 있다.
상기 언급한 4개의 값들이 이용가능하지 않더라도 BCI는
Figure pat00053
의 값을 레지스터에 카피하며, 그런 다음 연산의 개수를 4개의 곱셈과 8개의 덧셈(또는 뺄셈)으로 줄일 수 있다. 두 가지 대안들 모두는 추가 값을 저장하기 위해 4개의 추가적인 레지스터들을 할당하는 것을 포함할 수 있다.
다수의 작은 삼각형이 있는 경우, 여기에 개시된 실시예의 구현에 기초하여 상당한 성능 개선이 달성될 수 있다. 마이크로-다각형들(즉, 단일 샘플만 커버하는 것들)의 경우 여기에 개시된 실시예는 셰이더 속도를 프리미티브 설정 속도와 더 일치시킬 수 있다. 여기에 개시된 실시예는 GPU 파이프라인의 대규모 재설계를 필요로 하지 않는다. 일부 변경이 픽셀 패킹 로직에서 이루어질 수 있으며, 일부 추가적인 소프트웨어-액세스가능 데이터가 픽셀 셰이더용 셰이더 코어에 제공될 수 있다. 여기에 개시된 기술은 완전히 무손실이다. 기존 기술과 달리, 시각적 또는 수치적 결과에 변화가 없으며, 그에 따라, 이들 기술을 적용하는 것이 미학적으로 수용가능할 때 휴리스틱이 필요하지 않다. 또한, 여기에 개시된 실시예는 애플리케이션에 완전히 투명할 수 있다. 다시 말해서, GPU(100)에서 실행되는 애플리케이션은 여기에 개시된 실시예의 이점을 받기 위해 변경될 필요가 없다. 다수의 프리미티브들의 커버리지가 동일한 쿼드에 패킹되어 있는 경우 주어진 워프에 대한 총 대기시간이 증가할 수 있지만 이는 다른 절약으로 상쇄되는 것 이상이 된다.
H 픽셀의 계산이 명시적 스레드를 사용하여 가장 잘 계산되는 손익분기점(break-even point)이 있을 수 있다. 여기에 개시된 실시예를 디스에이블하는 데 영향을 줄 수 있는 몇 개의 팩터들이 있다. 상기 팩터들중 일부는 다음을 포함한다. 먼저, 속성을 보간하기 위해 사용되는 추가 명령어들의 합은 하나 이상의 셰이더 코어(110)에 의해 실행되는 명령어들의 총 개수의 임계값보다 많다. 필수적으로, 추가 속성을 보간하는 비용은 상대적으로 높아서 더 많은 스레드를 패킹하는 것은 전체 성능에 도움이 되지 않을 수 있다. 둘째, 방향 도함수에 필요한 텍스처 액세스들의 개수가 특정 임계값 이상일 수 있다. 이러한 경우, 여기에 개시된 실시예를 디스에이블하고, 대신에 기존 기술을 사용하여 계산을 수행하는 것이 더 나을 수 있다. 그러나, 추세는 더 복잡한 픽셀 셰이더로 향하고 있어 스레드당 더 많은 계산이 필요하다. 컴파일러는 셰이더 프로그램을 정적으로 분석하여 다수의 프리미티브들을 쿼드로 패킹할 가치가 있는지 결정하고, 만약 그렇다면, 여기에 개시된 실시예를 인에이블하기 위해 플래그 또는 일부 다른 상태 변수를 설정할 수 있다. 다시 말해, 개시된 기술들의 오버헤드가 이점을 초과할 때 개시된 기술들을 오프하는 것이 유리할 수 있다. 픽셀은 H 픽셀로 마킹될 수 있으며, 이 H 픽셀은 비생산적인 작업을 피하기 위해 이들 레인들이 스위치 온되어야 하는 위치와 이들 레인들이 스위치 오프되어야 하는 위치를 나타내는 데 사용될 수 있다.
도 8은 일부 실시예에 따른 작은 프리미티브들에 대한 셰이더 점유(shader occupancy)를 수행하는 기술을 도시하는 흐름도(800)이다. 805에서, 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드와 연관된 제 1 프리미티브, 및 제 2 부분적으로 커버된 쿼드와 연관된 제 2 프리미티브를 수신할 수 있다. 810에서, 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드가 비중첩 커버리지를 갖는다고 결정할 수 있다. 815에서, 상기 제 1 부분적으로 커버된 쿼드 및 상기 제 2 부분적으로 커버된 쿼드가 공간적으로 디스조인트인 경우에도 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 패킹된 쿼드로 패킹할 수 있다. 디스조인트(disjoint)라는 용어는 비중첩(non-overlapping)을 의미할 수 있다. 820에서, 셰이더 워프 패커 유닛은 상기 패킹된 쿼드를 하나 이상의 셰이더 코어로 전송할 수 있다.
일부 실시예에 따른 작은 프리미티브들에 대한 셰이더 점유를 수행하는 다른 기술을 도시하는 흐름도(900)이다. 905에서, 셰이더 워프 패커 유닛 또는 하나 이상의 셰이더 코어는 적어도 하나의 런타임 플래그에 기초하여 제 1 동작 모드 또는 제 2 동작 모드 중에서 선택할 수 있다. 910에서, 셰이더 워프 패커 유닛 또는 하나 이상의 셰이더 코어는 패킹된 쿼드의 적어도 하나의 픽셀과 연관된 속성 정보를 저장할 수 있다. 915에서, 제 1 동작 모드에서, 방향 도함수가 저장된 속성 정보에 기초하여 단일-레인 연산에서 계산될 수 있다. 920에서, 제 2 동작 모드에서, 방향 도함수가 저장된 속성 정보에 기초하여 교차-레인 연산에서 계산될 수 있다.
도 8 및 도 9의 단계들은 도시된 순서대로 수행될 필요가 없으며 중간 단계들이 존재할 수 있음을 이해할 것이다.
일부 실시예에서, GPU는 하나 이상의 셰이더 코어를 포함한다. GPU는 제 1 부분적으로 커버된 쿼드와 연관된 제 1 프리미티브, 및 제 2 부분적으로 커버된 쿼드와 연관된 제 2 프리미티브를 수신하도록 구성된 셰이더 워프 패커 유닛을 포함할 수 있다. 일부 실시예에서, 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드가 비중첩 커버리지를 갖는다고 결정하도록 구성된다. 일부 실시예에서, 셰이더 워프 패커 유닛은 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 패킹된 쿼드로 패킹하도록 구성된다. 일부 실시예에서, 셰이더 워프 패커 유닛은 패킹된 쿼드를 하나 이상의 셰이더 코어로 전송하도록 구성된다. 일부 실시예에서, 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드는 공간적으로 서로 디스조인트되어 있다. 디스조인트(disjoint)라는 용어는 비중첩(non-overlapping)을 의미할 수 있다.
일부 실시예에서, 하나 이상의 셰이더 코어는 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 개별적으로 처리하는 하나 이상의 셰이더 코어에 대한 정보의 손실 없이 패킹된 쿼드를 수신하고 처리하도록 구성된다. 일부 실시예에서, 셰이더 워프 패커 유닛은 단일-레인 연산을 위해 패킹된 쿼드로부터 단일 레인으로 0개 이상의 픽셀을 할당하도록 구성된다. 예를 들어, 단일 "커버리지" 픽셀은 레인에 할당될 수 있고, 0개, 1개 또는 2개의 H 픽셀들이 동일한 레인으로 할당될 수 있다. 일부 실시예에서, 셰이더 워프 패커 유닛은 셰이더 코어(들)가 단일-레인 연산에서 방향 도함수를 계산하게 하도록 구성된다. 일부 실시예에서, 하나 이상의 셰이더 코어는 단일-레인 연산에서 방향 도함수를 계산하도록 구성된다.
GPU는 i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가 단일-레인 연산에서 방향 도함수를 계산하도록 구성되는 제 1 동작 모드를 포함할 수 있다. GPU는 i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가 교차-레인 연산에서 제 2 방향 도함수를 계산하도록 구성되는 제 2 동작 모드를 포함할 수 있다.
일부 실시예에서, i) 셰이더 워프 패커 유닛 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나는 적어도 하나의 런타임 플래그에 기초하여 제 1 동작 모드 또는 제 2 동작 모드 중 적어도 하나를 선택하도록 구성된다. 일부 실시예에서, 셰이더 워프 패커 유닛은 패킹된 쿼드의 적어도 하나의 픽셀과 연관된 속성 정보를 저장하도록 구성된다. 일부 실시예에서, i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나는 속성 정보에 기초하여 방향 도함수를 계산하도록 구성된다. 일부 실시예에서, i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나는 하나 이상의 무게중심 팩터에 기초하여 방향 도함수를 계산하도록 구성된다. 일부 실시예에서, i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나는 하나 이상의 부분 차분에 기초하여 방향 도함수를 계산하도록 구성된다.
[0001] 일부 실시예에서, i) 하나 이상의 텍스처 유닛 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나는
Figure pat00054
에 따라 X 방향의 제 1 방향 도함수를 계산하도록 구성되며, i) 하나 이상의 텍스처 유닛 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나는
Figure pat00055
에 따라 Y 방향의 제 2 방향 도함수를 계산하도록 구성된다. 일부 실시예에서,
Figure pat00056
Figure pat00057
는 제 1 프리미티브 또는 제 2 프리미티브 중 적어도 하나의 프리미티브의 영역이다. 일부 실시예에서, x0, y0, x1, y1, x2, 및 y2는 제 1 프리미티브 또는 제 2 프리미티브 중 적어도 하나의 프리미티브의 정점들의 좌표이다. 일부 실시예에서, t0, t1, 및 t2는 3개의 정점들 (x0, y0), (x1, y1) 및 (x2, y2) 각각에서 "t" 속성의 값들이다. 래스터라이저와 패커에 도착하는 각 프리미티브에 대해 프리미티브에 걸쳐 보간할 속성이 0개 이상 있을 수 있다. 상기 값들 "s" 및 "t"는 이러한 2개의 프리미티브 속성들을 나타낼 수 있으며, 상기 3개의 정점들 각각에서 (s,t) 값들로부터 보간되어진 프리미티브에서 일부 특정 픽셀에서 텍스처 좌표를 나타내기 위해 (s,t)로서 쓰여질 수 있다. GPU(100)는 제 1 방향 도함수 및 제 2 방향 도함수를 저장하도록 구성된 메모리를 포함할 수 있다.
일부 실시예는 GPU를 사용하여 작은 프리미티브에 대한 셰이더 점유를 수행하는 방법을 포함한다. 상기 방법은 셰이더 워프 패커 유닛이 제 1 부분적으로 커버된 쿼드와 연관된 제 1 프리미티브, 및 제 2 부분적으로 커버된 쿼드와 연관된 제 2 프리미티브를 수신하는 단계를 포함할 수 있다. 상기 방법은 상기 셰이더 워프 패커 유닛이 상기 제 1 부분적으로 커버된 쿼드 및 상기 제 2 부분적으로 커버된 쿼드가 비중첩 커버리지를 갖는 것으로 결정하는 단계를 포함할 수 있다. 비중첩 커버리지 품질이 요구되지 않을 수 있다. 다시 말해, 픽셀들이 하나 이상의 셰이더 코어에서 처리되는 동안 데이터의 일부 추가 버퍼링의 비용을 지불하더라도 상기 제 1 부분적으로 커버된 쿼드 및 상기 제 2 부분적으로 커버된 쿼드는 중첩하는 커버리지를 가질 수 있다. 상기 방법은 셰이더 워프 패커 유닛이 상기 제 1 부분적으로 커버된 쿼드 및 상기 제 2 부분적으로 커버된 쿼드를 패킹된 쿼드로 패킹하는 단계를 포함할 수 있다. 상기 방법은 상기 셰이더 워프 패커 유닛이 상기 패킹된 쿼드를 하나 이상의 셰이더 코어로 전송하는 단계를 포함할 수 있다. 일부 실시예에서, 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드는 공간적으로 서로 디스조인트되어 있다.
상기 방법은 하나 이상의 셰이더 코어가 제 1 부분적으로 커버된 쿼드 및 제 2 부분적으로 커버된 쿼드를 개별적으로 처리하는 하나 이상의 셰이더 코어에 대한 정보의 손실 없이 패킹된 쿼드를 수신하고 처리하는 단계를 포함한다. 상기 방법은 단일-레인 연산을 위해 패킹된 쿼드로부터 0개 이상의 픽셀을 단일 레인에 할당하는 단계를 포함할 수 있다. 예를 들어, 단일 "커버리지" 픽셀은 레인에 할당될 수 있고, 0개, 1개 또는 2개의 H 픽셀들이 동일한 레인으로 할당될 수 있다. 상기 방법은 단일-레인 연산에서 방향 도함수를 계산하는 단계를 포함할 수 있다. 상기 방법은 제 1 동작 모드에서 i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가 단일-레인 연산에서 방향 도함수를 계산하는 단계를 포함할 수 있다. 상기 방법은 제 2 동작 모드에서 i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가 교차-레인 연산에서 제 2 방향 도함수를 계산하는 단계를 포함할 수 있다. 상기 방법은 i) 하나 이상의 텍스처 유닛 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가 적어도 하나의 런타임 플래그에 기초하여 제 1 동작 모드 또는 제 2 동작 모드 중 적어도 하나를 선택하는 단계를 포함할 수 있다.
상기 방법은 상기 쉐이더 워프 패커 유닛이 패킹된 쿼드의 적어도 하나의 픽셀과 연관된 속성 정보를 저장하는 단계를 포함할 수 있다. 상기 방법은 i) 하나 이상의 텍스처 유닛, 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가 상기 속성 정보에 기초하여 방향 도함수를 계산하는 단계를 포함할 수 있다.
상기 방법은 i) 하나 이상의 텍스처 유닛 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가
Figure pat00058
에 따라 X 방향의 제 1 방향 도함수를 계산하는 단계, i) 하나 이상의 텍스처 유닛 또는 ii) 하나 이상의 셰이더 코어 중 적어도 하나가
Figure pat00059
에 따라 Y 방향의 제 2 방향 도함수를 계산하는 단계를 포함할 수 있다. 일부 실시예에서, A는 제 1 프리미티브 또는 제 2 프리미티브 중 적어도 하나의 총 면적이다. 일부 실시예에서, x0, y0, x1, y1, x2, 및 y2는 제 1 프리미티브 또는 제 2 프리미티브 중 적어도 하나의 프리미티브의 정점들의 좌표이다.
개시된 실시예들과 관련하여 설명된 방법 또는 알고리즘 및 기능의 블록들 또는 단계들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이들의 조합으로 직접 구현될 수 있다. 모듈들은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 포함할 수 있다. 소프트웨어로 구현되는 경우, 기능들은 유형의 비-일시적 컴퓨터 판독가능한 매체에 하나 이상의 명령어 또는 코드로 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터, 하드 디스크, 이동식 디스크, CD ROM 또는 당업계에 공지된 임의의 다른 형태의 저장 매체에 상주할 수 있다.
이하의 기술은 본 발명의 개념의 특정 측면이 구현될 수 있는 적합한 기계 또는 기계들에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 일반적으로, 머신 또는 머신들은 프로세서, 메모리, 예를 들어 RAM, ROM 또는 기타 상태 보존 매체(state preserving medium), 저장 장치, 비디오 인터페이스 및 입력/출력 인터페이스 포트가 연결된 시스템 버스를 포함한다. 상기 기계 또는 기계들은 키보드, 마우스 등과 같은 통상적인 입력 장치로부터의 입력에 의해서 뿐만 아니라, 다른 기계로부터 수신된 지시(directives), 가상 현실(VR) 환경과의 상호 작용, 생체 피드백(biometric feedback) 또는 기타 입력 신호에 의해 적어도 부분적으로 제어될 수 있다. 여기에서 사용되는 바와 같이, "머신(machine)"라는 용어는 단일 머신, 가상 머신 또는 통신으로 결합된 머신, 가상 머신 또는 함께 작동하는 장치의 시스템을 광범위하게 포괄하도록 의도된다. 예시적인 머신들은 퍼스널 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 핸드헬드 장치, 전화, 태블릿 등과 같은 컴퓨팅 장치 뿐만 아니라 개인 또는 대중 교통 수단, 예컨대, 자동차, 기차, 택시 등과 같은 운송 장치를 포함한다.
머신 또는 머신들은 프로그래밍 가능하거나 프로그래밍 불가능한 로직 장치 또는 어레이, ASIC, 임베디드 컴퓨터, 카드 등과 같은 임베디드 컨트롤러를 포함할 수 있다. 머신 또는 머신들은 네트워크 인터페이스, 모뎀 또는 기타 통신 결합을 통해 하나 이상의 원격 머신에 대한 하나 이상의 연결을 활용할 수 있다. 머신들은 인트라넷, 인터넷, 근거리 통신망, 광역 네트워크 등과 같은 물리적 및/또는 논리적 네트워크를 통해 상호 연결될 수 있다. 당업자는 네트워크 통신이, 무선 주파수(RF), 위성, 마이크로파, IEEE(Institute of Electrical and Electronics Engineers) 545.11, Bluetooth®광학, 적외선, 케이블, 레이저 등을 포함하는 다양한 유선 및/또는 무선 단거리 또는 장거리 캐리어 및 프로토콜을 이용할 수 있음을 인식할 것이다.
본 개시의 실시예들은 기능, 절차, 데이터 구조, 어플리케이션 프로그램 등을 포함하는 관련 데이터를 참조하거나 이와 관련하여 설명될 수 있는데, 이에 의해 머신에 의해 액세스될 때 머신이 태스크를 수행하거나 추상 데이터 타입 또는 로우-레벨 하드웨어 컨텍스트를 정의할 수 있도록 한다. 관련 데이터는 예를 들어 RAM, ROM 등과 같은 휘발성 및/또는 비휘발성 메모리 또는 기타 저장 장치 및 드라이브, 플로피 디스크, 광학 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 등을 포함하는 관련 스토리지 매체에 저장될 수 있다. 관련 데이터는 물리적 및/또는 논리적 네트워크를 포함한 전송 환경을 통해 패킷, 직렬 데이터, 병렬 데이터, 전파 신호 등의 형태로 전달되거나, 압축된 또는 암호화된 포맷으로 사용될 수 있다. 관련 데이터는 분산 환경(distributed environment)에서 사용할 수 있으며, 머신 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
본 개시는 셰이더 점유에 관한 수많은 창의적인(inventive) 원리들을 포함한다. 여기에 개시된 원리들은 독립적인 유용성을 가질 수 있고 개별적으로 구현될 수 있으며, 모든 실시예가 모든 원리를 활용할 수 있는 것은 아니다. 또한, 원리들은 다양한 조합으로 구현될 수도 있으며, 그 중 일부는 개별 원리의 이점들을 시너지 방식으로 증폭할 수 있다.
도 1a 내지 도 9에 도시된 실시예들을 참조하여 전술한 원리들은 픽셀 파일링(pixel piling)이라 지칭될 수 있다.
본 개시물의 일부 추가 원리들은 GPU 파이프라인에서 추가 처리를 위해 커버리지(예를 들어, 픽셀, 프래그먼트, 샘플 등)를 쿼드 또는 다른 어레이로 패킹하는 하나 이상의 기술을 선택하기 위한 방법 및/또는 장치에 관한 것이다. 예를 들어, 실시예는 애플리케이션으로부터 이미지의 일부가 이미지의 외양(appearance)에 기여할 수 있는 정도의 인디케이션(indication)을 수신할 수 있다. 이 인디케이션에 기초하여, 실시예는 이미지의 일부에 대한 커버리지를 처리하기 위해 픽셀 파일링, 쿼드 병합 등과 같은 커버리지 패킹 기술을 선택할 수 있다.
일부 실시예에서, 패킹은 어레이에 다수의 프리미티브들로부터의 커버리지를 결합하는 것을 포함할 수 있다. 예를 들어, 패킹은 병합(예: 쿼드 병합), 픽셀 파일링, 및/또는 기타 기술로 구현될 수 있다.
일부 실시예에서, 둘 이상의 커버리지 패킹 기술들이 기술들의 하이브리드 조합을 구현하기 위해 선택될 수 있다. 예를 들어, 애플리케이션으로부터 수신된 인디케이션에 기초하여, 실시예는 병합 기술(merge technique) 및 파일링 기술(piling technique) 모두를 선택할 수 있다. 병합 기술은 쿼드에서 커버리지를 갖는 2개의 서로 다른 프리미티브들부터의 커버리지를 병합할 수 있다. 그런 다음, 파일링 기술이 쿼드의 제 3 프리미티브로부터의 커버리지를 배치하는데 사용될 수 있다.
일부 실시예에서, 커버리지 패킹 기술은 단순히 패킹을 수행하지 않는 것일 수 있다. 따라서, 선택된 패킹 기술은 커버리지를 수신하고 커버리지가 수신된 때 실질적으로 다음 스테이지로 상기 커버리지를 전달하는 것일 수 있다.
애플리케이션으로부터 수신한 인디케이션은 어떤 형태로든 구현될 수 있다. 예를 들어, 인디케이션은 추종되거나, 무시되거나, 가중치가 할당되는 등일 수 있는 제안(suggestion)(힌트로도 지칭될 수 있음)으로서 구현될 수 있다. 다른 예로서, 인디케이션은 반드시 추종해야 하는 지시로 구현될 수 있다. 일부 실시예에서, 인디케이션은 하나 이상의 제안, 지시 등의 하이브리드 조합으로 구현될 수 있다.
애플리케이션으로부터 수신된 인디케이션은 이미지의 부분이 이미지의 외양에 기여할 수 있는 정도를 나타낼 수 있는 이미지의 부분의 어떤 측면과도 관련될 수 있다. 예를 들어, 일부 실시예에서, 인디케이션은 이미지의 부분의 중요도, 품질, 관심 레벨, 디테일 레벨 등을 특정할 수 있다. 일부 실시예에서, 인디케이션은 이미지의 부분에 대한 VRS(variable-rate shading) 레벨을 특정할 수 있다.
하나 이상의 커버리지 패킹 기술의 선택은 본 개시에 따라 임의의 적절한 방식으로 구현될 수 있다. 예를 들어, 애플리케이션, 프로그래머, 게임 작가, 장치 제조업체 등은 슬라이더 입력을 제공받을 수 있는데, 상기 슬라이더 입력은 한 쪽 끝에서, 최상의 이용 가능한 이미지 품질을 제공할 수 있는 하나 이상의 커버리지 패킹 기술을 선택할 수 있고 다른 쪽 끝에서, 이용가능한 최대 성능 향상 및/또는 전력 감소를 제공할 수 있는 하나 이상의 커버리지 패킹 기술을 선택할 수 있으며, 양 끝 사이의 포인트들에서, 상기 양 끝 사이의 위치에 따라 품질과 전력 감소 사이의 트레이드오프를 제공할 수 있는 하나 이상의 커버리지 패킹 기술을 선택할 수 있다.
다른 예로서, 커버리지 패킹 기술의 선택은 하나 이상의 커버리지 패킹 기술들에 대한 다양한 기준들(예를 들어, 쿼드 병합 기술에 대한 임계값들의 세트)을 사용하여 테스트를 실행하고 VRS 레벨과 같은 주어진 인디케이션에 대해 허용 가능한 이미지 품질을 제공할 수 있는 기준 세트를 개발함으로써 구현될 수 있다.
추가 예로서, 커버리지 패킹 기술들의 선택은 커버리지 패킹 기술에 대한 다수의 기준 세트들을 개발하고 애플리케이션으로부터의 인디케이션에 기초하여 기준 세트들 중 하나를 인덱싱하거나 선택함으로써 구현될 수 있다.
또 다른 예로서, 커버리지 패킹 기술들의 선택은 선택된 커버리지 패킹 기술을 사용하여 처리된 이미지의 부분과 예컨대, 커버리지 패킹 없이 처리된 이미지의 참조 부분(이미지의 "실제(ground truth)" 부분으로 지칭될 수 있음) 간의 비교를 수행함으로써 구현될 수 있다. 상기 비교는 이미지 품질, 전력 소비 등을 비교할 수 있다. 상기 비교는 오프라인, 런타임, 의사 런타임(예: 장치가 비지 상태에 있지 않을 때) 및/또는 이들의 조합으로 수행될 수 있다. 일부 실시예에서, 통계는 비교 결과에 대해 실행되어 하나 이상의 커버리지 패킹 기술을 선택하기 위한 하나 이상의 기준 세트를 개발할 수 있다.
구현 세부 사항에 따라, 본 개시에 따른 일부 실시예는 임의의 개수의 다음의 특징들 및/또는 이점들을 제공할 수 있다. 일부 실시예는 (일부 구현에서는 적극적으로) 셰이더 점유를 개선하면서 이미지 품질을 개선할 수 있는 휴리스틱-기반 결정에 대한 의존성을 줄이거나 제거할 수 있다. 일부 실시예는 바람직하지 않은 이미지 아티팩트를 발생시키지 않으면서 커버리지의 보다 적극적인 병합을 가능하게 하기 위해 하나 이상의 휴리스틱을 개선할 수 있다. 낮은 공간 해상도 영역들에서, 커버리지는 하나의 프리미티브에서 다른 프리미티브로 이동될 수 있다. 구현 세부사항에 따라, 이것은 (예를 들어, 일부 실시예에서 프리미티브들이 효과적으로 더 클 수 있고 따라서 헬퍼 픽셀을 사용할 가능성이 적기 때문에) 추가적인 레인별 방향 도함수 계산의 사용을 줄이거나 제거할 수 있다.
일부 실시예에서, 기존 드라이버는 여기에 개시된 커버리지 기술 선택 및 구현 특징들 중 하나 이상을 구현하는 데 사용될 수 있다. 일부 실시예에서, 히스테리시스 윈도우 저장 메모리는 다수의 병합 방법들에 의해 공유될 수 있으며, 이에 의해 더 많은 사용 케이스들에 대해 하드웨어 비용을 상각할 수 있다. 일부 실시예에서, 성능 개선은 예컨대, 커버리지의 다수의 작은 삼각형들이 있는 경우에 실현될 수 있다.
마이크로-다각형들(예: 단일 샘플만 커버하는 것들)의 경우 일부 실시예는 셰이더 속도를 프리미티브 설정 속도와 더 일치시킬 수 있다. 일부 실시예에서, 본 개시에 따른 하나 이상의 특징들은 기존 GPU 파이프라인 기반구조(infrastructure)에 대한 약간의 변경으로 구현될 수 있다. 예를 들어, 커버리지 기술 선택 방식은 기존 픽셀 패킹 로직에 대한 약간의 변경만으로 구현될 수 있고 및/또는 추가적인 소프트웨어-액세스가능 데이터는 픽셀 셰이더용 셰이더 코어에 제공될 수 있다. 일부 실시예는 완전히 무손실이 되도록 구현되거나 및/또는 일부 손실을 허용하지만 추가적인 계산 절감의 잠재적인 이점을 갖도록 구현될 수 있다. 일부 실시예는 VRS(Variable-Rate Shading)를 지원하도록 이미 작성된 애플리케이션에 대해 부분적으로 또는 완전히 투명할 수 있다.
일부 실시예에서, 쿼드 병합과 같은 손실 패킹 기술의 선택으로 인한 추가 손실은 애플리케이션에 의해 낮은 공간 해상도 영역으로 간주되었던 영역으로 제한될 수 있다. 일부 실시예들에서, 본 개시에 따른 커버리지 기술 선택 방식을 지원하기 위해 추가적인 컴파일-타임 호스트-CPU 노력이 거의 또는 전혀 수반되지 않을 수 있다. 일부 실시예에서, 선택된 패킹 기술들 중 하나 이상을 구현하기 위해 추가적인 목적 코드가 거의 또는 전혀 추가되지 않을 수 있다.
GPU 파이프라인의 셰이딩 스테이지에서, API-제공된 프로그램은 병렬 프로세서 셰이더 코어 상에서 픽셀 또는 프래그먼트에 대해 실행될 수 있다. 일부 셰이더 프로그램의 복잡성 및/또는 셰이더 프로그램이 실행될 수 있는 셰이더 코어에 전용된 총 GPU 비용의 (예컨대, 면적, 전력, 설계 노력 등에 기반한) 상당한 비율을 고려하여, 예를 들어, 실행 효율성을 유지하기 위해 셰이더 워프에서 쿼드들의 높은 점유 또는 전체 점유를 유지하는 것이 유리할 수 있다. 부분적으로-커버된 쿼드들을 셰이더 코어로 전송하는 것은 쿼드의 비어 있는 위치에 해당하는 레인(스레드로 구현될 수 있음)이 아이들 상태로 남아 있으므로 프로세싱 비효율을 초래할 수 있다.
본 개시에 따른 일부 실시예는 셰이더 점유를 개선하기 위해 일부 구현에서 하이브리드 방식으로 하나 이상의 커버리지 패킹 기술들을 선택적으로 이용할 수 있다. 패킹 기술 선택과 관련된 원리들은 프로그램밍가능한 및/또는 고정 기능 유닛들을 포함하여 GPU 파이프라인의 어떠한 스테이지에도 적용될 수 있다. 일부 실시예에서, 패킹 기술 선택과 관련된 원리들은 예를 들어 패킹 기술에 대한 하나 이상의 기준을 조정함으로써 하나 이상의 커버리지 패킹 기술의 작동을 조정 및/또는 개선할 수 있다. 구현 세부 사항에 따라, 이들 원리들은 GPU 또는 그 일부를 구현하는 데 사용되는 하나 이상의 집적 회로(IC) 칩들의 전체 시각적 품질 및/또는 전체 전력/성능/면적(power/performance/area: PPA) 특성을 개선할 수 있다.
본 개시에 따른 패킹 기술 선택 방식과 함께 사용될 수 있는 커버리지 패킹 기술의 하나의 타입은 쿼드 병합이며, 그 일부 예들은 참조로 통합되는 미국 특허 제9,721,376호 및 제9,972,124호에 개시되어 있다. 일부 실시예에서, 쿼드 병합 기술은 부분적으로 커버된 쿼드를 인식하고 하나의 인접한 프리미티브에서 다른 프리미티브의 쿼드로 커버리지를 이송함으로써 비효율성을 감소시킬 수 있다. 이는 셰이더에 전송된 쿼드들의 총 개수를 줄일 수 있으며, 그에 따라, 총 에너지 소비를 줄이는 데 도움이 될 수 있다. 그러나, 구현 세부사항에 따라, 이미지 품질이 다소 떨어질 수 있다. 더욱이, 일부 실시예에서, 쿼드 병합은 쿼드 병합 기술의 적용을 제어하여 원치 않는 시각적 아티팩트를 줄이거나 피하기 위해 하나 이상의 휴리스틱 임계값을 적용하는 것을 포함할 수 있다. 본 개시의 원리들 중 일부는 바람직하지 않은 이미지 아티팩트를 발생시키지 않으면서 커버리지의 보다 적극적인 병합을 허용하기 위해 이러한 휴리스틱들 중 하나 이상을 개선할 수 있다.
본 개시에 따른 기술 선택 방식과 함께 사용될 수 있는 커버리지 패킹 기술의 다른 타입은 도 1a 내지 도 9와 관련하여 전술한 픽셀 파일링이다. 픽셀 파일링의 일부 실시예에서, 다수의 프리미티브들로부터의 커버리지는 동일한 쿼드에 배치될 수 있다. 그러나 일부 다른 패킹 기술과 달리, 픽셀 파일링의 일부 실시예는 정밀도 손실을 거의 또는 전혀 수반하지 않을 수 있다. 더욱이, 이미지 품질을 유지하기 위해 관련된 휴리스틱(예컨대, 임계값(들))이 거의 또는 전혀 필요하지 않을 수 있다. 하나 이상의 인커밍 프리미티브로부터의 커버리지를 갖는 쿼드 내의 픽셀들(또는 샘플들)에 대해, 추가 정보가 포함될 수 있고 및/또는 추가 계산이 수행될 수 있다.
일부 실시예에서, 본 개시에 따른 패킹 기술 선택 방식은 작은 프리미티브들이 있는 경우 효율성을 향상시킬 수 있으며 및/또는 작은 또는 마이크로-다각형의 사용을 증가시키는 것을 고려할 수 있다. 구현 세부사항에 따라, 이것은 각각이 상대적인 긍정적 및/또는 부정적인 측면을 가질 수 있는 다수의 병합 알고리즘들의 사용을 허용하면서 달성될 수 있으며, 이에 따라 이미지 품질을 유지하면서, 예를 들어 다양한 게임 자산에서 더 높은 기하학적 복잡성 및/또는 충실도를 유도할 수 있다. 다수의 병합 알고리즘들은 개별적으로 및/또는 하이브리드 방식으로 구현될 수 있다. 다중 패킹 기술들을 하이브리드 방식으로 사용하는 것은 실시예가 하나 이상의 패킹 기술들의 단점을 피하면서 이점을 실현할 수 있도록 한다.
일부 실시예는 제안 또는 지시와 같은 인디케이션의 형태로 애플리케이션으로부터의 명시적 정보에 의해 구동될 수 있기 때문에, 하나 이상의 패킹 기술과 관련된 휴리스틱의 사용이 감소될 수 있다. 잠재적으로 분리된 프리미티브들로부터 더 완전하게 패킹된 쿼드는 쿼드의 헬퍼 픽셀들에 의해 생성되었던 정보를 생성하는 데 사용할 수 있는 보조 정보와의 패킹의 조합을 통해, 하나의 프리미티브에서 다른 프리미티브로 커버리지 이동을 통해, 또는 그 조합을 통해 달성될 수 있다.
다수의 프리미티브들로부터의 커버리지가 동일한 쿼드에 배치되는 경우, 추가 정보는 쿼드의 각 픽셀과 함께 패키징되어 방향 도함수 계산에 사용될 수 있는 계산을 감안할 수 있다. 일부 실시예에서, 이것은 셰이더 레인 점유를 개선하거나 최대화하고 및/또는 중복되는 방향 도함수 계산을 줄이거나 피할 수 있다.
본 개시에 따른 패킹 기술 선택 방식의 일부 실시예는 하나 이상의 커버리지를 선택하기 위해 VRS(Variable-Rate Shading) 레벨과 같은 공간 해상도를 특정할 수 있는 애플리케이션-제공 인디케이션(예컨대, 제안 또는 지시)를 사용하여, 쿼드에서 다수의 프리미티브들로부터의 커버리지를 병합하거나 결합하는 하나 이상의 패킹 기술을 선택할 수 있다. 일부 실시예에서, 선택된 기술들 중 하나 이상은 인디케이션, 하나 이상의 선택된 기술이 적용되는 커버리지 등에 기초하여 조정될 수 있다.
따라서, 일부 실시예에서, 애플리케이션-제공된 가변 셰이딩 속도에 응답하여, 본 개시에 따른 장치는 셰이더 코어 어레이( 예를 들어, 쿼드 또는 2x2 픽셀 블록)의 전체 점유를 유지하기 위해 하나 이상의 (예컨대, 2개의) 기능한 병합 기술들 또는 그 하이브리드를 선택할 수 있다. 따라서, 쿼드별로, 최대 4개의 커버리지 픽셀들을 쿼드로 패킹하는 방법과 해당 방향 도함수 계산에 사용되는 잠재적인 헬퍼 픽셀을 할당하는 방법에 대한 결정이 내려질 수 있다.
예시의 목적으로, 일부 실시예는 픽셀 파일링, 쿼드 병합, VRS, 셰이더 스테이지 등과 같은 다양한 구현 세부사항의 맥락에서 설명될 수 있다. 그러나, 상기 원리들은 이러한 구현 세부사항으로 제한되지 않으며, 커버리지 패킹 기술, 음영 기술, 쿼드 이외의 크기(예를 들어, 3×3, 4×4, 2×4 등)로 구현될 수 있는 (예컨대, 픽셀, 프레그먼트, 샘플 등의) 어레이, 셰이더 스테이지 이외의 GPU 스테이지 등을 포함하는 임의의 다른 구현 세부 사항을 사용하여 실현될 수 있다.
도 10은 본 개시에 따른 패킹 기술 선택을 갖는 GPU 파이프라인의 예시적인 실시예를 도시한다. 도 10에 도시된 파이프라인(1005)은 제 1 스테이지(1010), 평가 스테이지(1015), 패킹 로직(1020) 및 제 2 스테이지(1025)를 포함할 수 있다.
이 실시예에서, 제 1 스테이지(1010)는 래스터라이저(rasterizer)로 구현될 수 있고, 제 2 스테이지(1025)는 셰이더로 구현될 수 있으며, 상기 원리들은 임의의 다른 타입의 스테이지 또는 유닛에 적용될 수 있다. 일부 실시예는 텍스처 주소 생성 및 필터링 유닛, 프리미티브 클리핑 유닛, 컬링 유닛(culling unit), 뷰포트 변환 유닛, 비닝 유닛(binning unit), 래스터화 설정 유닛, 깊이 비교 유닛, 블렌딩 유닛 등와 같은 다양한 다른 장치를 포함할 수 있다.
화살표들(1030a 및 1030b)은 상기 시스템을 통해 흐르는 커버리지를 나타낸다. 일부 실시예에서, 패킹 로직(1020)으로부터 셰이더(1025)로의 커버리지(1030b)의 흐름은 도 1a 내지 도 1e에 도시된 레인들(125)과 같은 하나 이상의 레인들로 구현될 수 있다.
평가 스테이지(1015)는 애플리케이션(1040)으로부터 예를 들어, 이미지의 부분이 이미지의 외양에 기여할 수 있는 정도를 표시할 수 있는 드라이버(1045)를 통해 인디케이션(1035)을 수신할 수 있다. 상기 인디케이션 및 래스터라이저(1010)로부터 수신된 커버리지(1030a)에 기초하여, 평가 스테이지(1015)는 픽셀 파일링, 쿼드 병합 등과 같은 하나 이상의 픽셀 패킹 기술을 선택하여 상기 이미지의 부분에 대한 커버리지(1030a)를 처리할 수 있다.
평가 스테이지(1015)는 패킹 로직(1020)에서 하나 이상의 선택된 픽셀 패킹 기술을 호출할 수 있고, 상기 패킹 로직(1020)은 래스터라이저(1010)로부터 수신된 커버리지(1030a)를 하나 이상의 쿼드로 패킹할 수 있는 하나 이상의 쿼드로 패킹하기 위해 하나 이상의 선택된 픽셀 패킹 기술을 구현할 수 있는데, 상기 하나 이상의 쿼드는 하나 이상의 워프(1030b)에서 셰이더(1025)로 전송될 수 있다.
도 10에 예시된 실시예는, 예를 들어, 본 명세서에 개시된 패킹 기술 선택 및/또는 구현과 관련된 방법, 프로세스, 특징 등중 어느 하나를 구현하는 데 사용될 수 있다. 도 10에서는 일부 구성요소가 개별 구성요소로 도시되었더라도, 다른 실시예에서 일부 구성요소는 단일 구성요소로 통합될 수 있고, 단일 구성요소로 도시된 일부 구성요소들은 다수의 구성요소들로 구현될 수 있다. 예를 들어, 일부 실시예에서, 평가 스테이지(1015) 및/또는 패킹 로직(1020)은 래스터라이저(1010) 또는 셰이더(1025)와 통합될 수 있다. 더욱이, 커버리지의 흐름이 단일 방향으로 진행하는 것으로 도시되어 있지만, 다른 실시예에서 커버리지 흐름은 GPU(1005)의 다양한 기능을 구현하기 위해 구성요소를 분기, 루프백 및/또는 분배할 수 있다.
도 11은 본 개시에 따른 커버리지를 패킹하는 방법의 예시적인 실시예의 흐름도를 도시한다. 도 11에 도시된 방법은, 예를 들어, 도 10에 도시된 평가 스테이지(1015) 및 패킹 로직(1020)을 이용하여 구현될 수 있다.
도 11을 참조하면, 상기 방법은 동작(1105)에서 시작하여, 평가 스페이지가 예를 들어 VRS로 프로그램을 실행하는 애플리케이션으로부터 인디케이션을 수신할 수 있다. 동작(1110)에서, 평가 스테이지는 래스터라이저로부터 커버리지의 하나 이상의 프리미티브들을 수신할 수 있다. 동작(1115)에서, 평가 스테이지는 예를 들어, 애플리케이션으로부터 수신된 인디케이션에 의해 지정된 VRS 레벨 및/또는 상태에 기초하여 커버리지에 적용할 하나 이상의 픽셀 패킹 기술을 선택할 수 있다. 상기 VRS 레벨 및/또는 상태는 픽셀들의 공간 밀도를 나타내는데, 높은 VRS 레벨은 이미지의 특정 부분에 대한 상대적으로 낮은 픽셀 밀도를 나타낼 수 있도록 픽셀의 공간 밀도를 나타낼 수 있고, 낮은 VRS 레벨은 상기 이미지의 부분에 대한 상대적으로 높은 픽셀 밀도를 나타낼 수 있다. 일부 실시예에서, 평가 스테이지는 쿼드당(quad-by-quad basis) 하나 이상의 패킹 기술을 선택할 수 있다. 더욱이, 평가 스테이지는 예를 들어 하나의 패킹 기술이 선호하는 기술 또는 폴백(fallback) 기술로 간주될 수 있는 우선적인 방식으로 하나 이상의 패킹 기술을 선택할 수 있다. 예를 들어, 일부 실시예에서, 커버리지가 커버리지 병합(예를 들어, 쿼드 병합)에 대한 후보가 아닌 경우, 평가 스페이지는 예컨대, 적절한 경우 커버리지에 픽셀 파일링 기술을 적용하는 것으로 대체할 수 있다. 다른 예로서, 일부 실시예에서, 픽셀 파일링 기술이 선호될 수 있고, 수신된 커버리지가 픽셀 파일링에 적합하지 않은 경우, 평가 스페이지는 예를 들어, 적절한 경우 커버리지에 병합 기술을 적용하는 것으로 대체할 수 있다.
그런 다음, 도 11에 도시된 방법은 동작(1115)에서 선택된 하나 이상의 패킹 기술에 따라, 가능하게는 동시에, 하나 이상의 경로를 통해 진행할 수 있다. 예를 들어, 쿼드 병합 기술이 인디케이션과 관련된 이미지의 부분의 적어도 일부에 대해 선택되면, 상기 방법은 동작(1120)으로 진행하여 쿼드 병합 동작이 하나 이상의 프리미티브 및/또는 쿼드에 대해 수행될 수 있다. 픽셀 파일링 기술이 인디케이션과 관련된 이미지의 부분의 적어도 일부에 대해 선택되면, 상기 방법은 동작(1120)으로 진행하여 필셀 파일링 동작이 하나 이상의 프리미티브 및/또는 쿼드에 대해 수행될 수 있다. 평가 동작(1115)이 수신된 커버리지의 일부가 (예를 들어, 쿼드 병합 및/또는 픽셀 파일링을 통한) 병합을 위한 후보가 아니라고 결정하면, 상기 방법은 동작(1130)으로 진행하여, 선택된 패킹 기술은 패킹 기술을 본질적으로 수행하지 않는 것이고, 동작(1110)에서 수신된 임의의 관련 커버리지는 실질적으로 수신된 그대로 동작(1135)에서 셰이더로 전달될 수 있다.
일부 실시예에서, 다양한 쿼드 및/또는 프리미티브에 대한 평가 동작(1115)에서 선택된 패킹 기술에 따라, 커버리지는 동작들(1120, 1125, 1130)의 경로들을 동시에(병렬로), 순차적으로, 및/또는 반복적으로 통과할 수 있다. 예를 들어, 쿼드 병합 동작(1120)은 제 1 쿼드에 대한 제 1 프리미티브 및 제 2 프리미티브에 대해 수행될 수 있다. 상기 제 1 쿼드는 화살표(1145)에 의해 도시된 바와 같이 픽셀 파일링 동작(1125)으로 진행할 수 있고, 여기서 픽셀 파일링 동작은 제 1 쿼드에 대한 제 3 프리미티브에 대해 수행될 수 있다. 그런 다음, 상기 제 1 쿼드는 동작(1135)에서 셰이더로 전송될 수 있다. 유사하게, 픽셀 파일링 동작(1125)은 제 2 쿼드에 대한 제4 프리미티브 및 제5 프리미티브에 대해 수행될 수 있고, 그런 다음 제 2 쿼드는 화살표(1140)로 도시된 바와 같이 쿼드 병합 동작(1120)으로 진행할 수 있다. 그 다음, 쿼드 병합 동작은 제 2 쿼드에 대한 제6 프리미티브에 대해 수행될 수 있고, 그런 다음 상기 제 2 쿼드는 동작(1135)에서 셰이더로 전송될 수 있다. 임의의 쿼드는 평가 동작(1115)에 의해 지정될 수 있는 바와 같이 동일 및/또는 상이한 경로들을 통한 다수의 횟수들을 포함하는 임의의 횟수로 도 11에 도시된 다양한 경로들 중 임의의 것을 통해 진행할 수 있다.
일부 실시예에서, 상기 동작(1120)에 도시된 것과 같은 쿼드 병합 기술은 더 나은 이미지 품질을 보존하기 위해 특정 경우에 사용되는 것을 방지하기 위해 쿼드 병합 기술의 사용을 제한할 수 있는 하나 이상의 미세-튜닝 기준을 구현할 수 있다. 이러한 기준의 몇 가지 예들은 다음과 같다.
(1) 커버리지는 동일한 페이스 방향을 가진 프리미티브들로부터만 병합될 수 있다(예컨대, 전방-페이싱 또는 후방-페이싱 방향).
(2) 커버리지는 특정 쿼드에서 중첩하는 픽셀이 없는 프리미티브들로부터만 병합될 수 있다.
(3) 커버리지는 2개의 프리미티브들로부터의 쿼드의 절대 깊이 값들(Z 값이라고도 지칭함)이 특정 임계값 미만만큼 다른 경우에만 병합될 수 있다.
(4) 커버리지는 2개의 프리미티브들의 Z 값들의 기울기 및/또는 경사도가 특정 임계값 미만만큼 다른 경우에만 병합될 수 있다.
일부 실시예에서, 이들 기준들 중 하나 이상은 동일한 쿼드를 커버하는 2개 이상의 프리미티브들이 대략 동일 평면에 있고 본질적으로 동일한 객체 및/또는 표면을 테셀레이션(tessellating)하는(것으로 추론되는) 경우에만 쿼드를 식별하고 병합하는 데 도움이 될 수 있다.
본 개시에 따른 일부 실시예에서, 이들 기준들 중 하나 이상은 허용가능한 이미지 품질을 여전히 보존하면서 커버리지의 보다 적극적인 병합을 가능하게 하기 위해 조절되거나 완화될 수 있다. 이것은 쿼드에 대응하는 이미지의 부분이 이미지의 외양에 기여할 수 있는 정도의 인디케이션의 (예를 들어, 애플리케이션으로부터) 이용가능성에 의해 용이하게 될 수 있다. 예를 들어, VRS 속도(rate)가 높은 이미지의 부분(상대적으로 낮은 해상도 또는 공간 밀도에 해당할 수 있음)는 상기 이미지의 부분이 포비티드 장면(foveated scene)의 주변 영역에 위치함을 나타낼 수 있다. 따라서, 상기 이미지의 이 부분에 위치한 프리미티브들을 처리하는데 사용되는 쿼드들은 상기 4가지 기준들 (1) 내지 (4) 중 하나 이상의 완화된 버전에 기초하여 병합될 수 있으며 이에 의해 이미지 품질의 저하를 가져오더라도(어떤 경우에는 경미하거나 눈에 띄지 않을 수 있음), 여전히 적절한 전체 이미지 품질을 제공할 수 있으며 구현 세부 사항에 따라 셰이더에 전송된 쿼드들의 전체 점유를 유지하는데 도움을 주어 성능을 향상시킨다.
본 개시에 따른 일부 실시예에서, 기준 (1)은 예컨대, 이미지의 높은 VRS 영역들에서 이러한 제약을 제거함으로써 완화될 수 있다. 구현 세부 사항에 따라, 이는 결과에 비교적 작은 영향을 미칠 수 있느데, 왜냐하면 2개의 프리미티브들이 서로 다른 페이스 방향들(orientations)을 갖는다면, 래스터화 전에 프리미티브들 중 하나가 컬링되어, 기준 (1)을 제거하는 것이 이미지 품질에 거의 영향을 미치지 않을 수 있기 때문이다. (페이스 컬링이 디스에이블된 상황에서는 예외가 있을 수 있으며 이는 드문 상황일 수 있다.)
본 개시에 따른 일부 실시예에서, 기준 (2)는 예컨대, 이미지의 높은 VRS 영역들에서 이러한 제약을 제거함으로써 완화될 수 있다. 일부 상황에서, 2개의 프리미티브들은 주어진 쿼드에서 중첩하는 커버리지를 가질 수 있으므로 상기 쿼드의 하나 이상의 픽셀들이 양 프리미티브들에 의해 커버될 수 있다. 구현 세부 사항에 따라, 예를 들어, 충분히 높은 VRS 레벨을 갖는 이미지의 부분들 대해 병합이 허용될 수 있다.
도 12는 본 개시에 따른 쿼드 커버리지에서 중첩 커버리지를 갖는 프리미티브들에 대한 병합 동작의 예를 도시한다. 삼각형 TR은 쿼드(1205)의 픽셀 위치들(1201, 1202, 1203)을 커버할 수 있다. 삼각형 TL은 쿼드(1205)의 픽셀 위치들(1200 및 1202)을 커버할 수 있다. 본 개시에 따른 병합 동작에서, 위치(1202)에 있는 삼각형 TR에 대한 픽셀은 삼각형 TL로 이송될 수 있고, 픽셀 위치에 있는 삼각형 TL에 대한 픽셀은 폐기될 수 있다.
구현 세부사항에 따라, 도 12에 도시된 바와 같이 커버리지를 중첩하기 위해 병합을 허용하면 쿼드 점유를 개선할 수 있지만 중첩하는 프리미티브들에 대한 이미지 품질이 저하될 수도 있다. 그러나, 기준 (2)를 완화하는 결정은 프리미티브들이 이미지에 대해 높은 VRS 레벨 부분에 위치한다는 인디케이션에 기반할 수 있기 때문에 국부적 이미지 품질과 셰이더 점유 사이의 트레이드오프가 전체 순수한 이익을 제공할 수 있다. 더욱이, 일부 조건 하에서, 전체 쿼드(1205)는 단일 픽셀에 의해 근사화될 수 있고, 이로써 중첩하는 커버리지와의 병합을 허용함으로써 야기되는 이미지 품질의 저하를 제거하거나 완화할 수 있다.
대안적으로, 또는 추가적으로, 일부 실시예에서, 도 11의 동작(1125)에 도시된 것과 같은 픽셀 파일링 동작이 쿼드 내 중첩하는 커버리지에 대한 픽셀 파일링을 수행하도록 허용될 수 있다.
일부 실시예에서, 픽셀 파일링은 쿼드 병합의 형태로 간주될 수 있다. 따라서, 일부 실시예는 프리미티브 이송(또는 커버리지 이송, 커버리지 시프트 등) 타입의 쿼드 병합 또는 픽셀 파일링 타입의 쿼드 병합을 구현하는 것으로 설명될 수 있다.
일부 실시예에서, 기준 (3) 및 (4)에 대해, 임계값들은 (픽셀 쉐이딩의 더 낮은 공간 밀도에 대응할 수 있는) 비교적 높은 VRS를 갖는 영역들에서 그렇지 않으면 허용되는 것보다 더 많은 병합을 허용하도록 완화될 수 있다. 임계값들은 예를 들어, 호스트 프로세서에서 실행되고 API를 통해 애플리케이션에 대한 인터페이스를 제공하는 GPU용 드라이버에 의해 제공될 수 있다. 휴리스틱(heuristics)이 깊이의 기본 값들(base values) 및 픽셀들 간의 깊이 기술이 차이를 위해 여전히 사용될 수 있지만, 구현 세부 사항에 따라, 이들 값들이 실제 VRS 레벨에 의해 추가로 조정 및/또는 완화될(tempered) 수 있고, 그에 따라 전체 이미지 품질(예컨대, 주관적 품질)은 여전히 추가 병합을 허용하면서 유지될 수 있다는 점에서 덜 중요하게 된다. 더욱이, 이것은 픽셀 처리 자원의 추가 절약을 허용할 수 있다.
일부 실시예에서, 쿼드 병합 기준의 일부 서브셋만이 예컨대, VRS 정보에 의해 완화될 수 있다.
일부 실시예에서, 하나의 프리미티브에서 다른 프리미티브로 커버리지를 시프트하는 것에 기초한 쿼드 병합에 대한 기준(심지어 완화된 기준)이 충족되지 않을 때, 평가 스테이지는 다른 프리미티브로부터의 커버리지가 주어진 쿼드 내에 상주하도록 할 수 있는 픽셀 파일링 기술을 선택할 수 있다. 그러나 픽셀 파일링의 사용은 쿼드 병합에 대한 하나 이상의 기준이 충족되지 않는 상황에 제한되지 않는다. 따라서, 평가 스테이지는 쿼드 병합에 대한 모든 기준들이 충족되더라도 픽셀 파일링 기술을 선택할 수 있다.
예를 들어, 일부 상황에서 특정 쿼드에 대해 하나의 프리미티브에서 다른 프리미티브로 커버리지를 시프트함으로써 쿼드 병합을 수행하는 것은 일부 이미지 품질 변동을 가져오지만 해당 셰이더 프로그램의 길이를 거의 또는 전혀 추가하지 않을 수 있다. 그러나, 다수의 프리미티브들을 동일한 쿼드에 패킹하는 것은 어떠한 이미지 품질 문제도 초래하지 않을 수 있지만 해당 셰이더 프로그램의 실행 시간을 길어지게 할 수 있다. 본 개시에 따른 일부 실시예에서, 평가 스테이지는 프리미티브들이 위치될 수 있는 이미지의 부분에 대한 애플리케이션으로부터의 인디케이션에 기초하여 2개의 패킹 기술들의 장점 및/또는 단점 사이의 트레이드오프를 할 수 있다. 이것은 예를 들어, 전술한 슬라이더(slider)로 구현될 수 있는데, 상기 슬라이더에서, 한 쪽 끝의 값들이 최상의 이용 가능한 이미지 품질을 제공할 수 있는 하나 이상의 커버리지 패킹 기술을 선택할 수 있고 다른 쪽 끝의 값들이 이용가능한 최대 성능 향상 및/또는 전력 감소를 제공할 수 있는 하나 이상의 커버리지 패킹 기술을 선택할 수 있으며, 양 끝 사이의 값들이 상기 양 끝 사이의 위치에 따라 품질과 전력 감소 사이의 트레이드오프를 제공할 수 있는 하나 이상의 커버리지 패킹 기술을 선택할 수 있다. 일부 실시예에서, VRS 레벨은 하나 이상의 패킹 기술을 선택하는 상기 슬라이더의 값으로서 기능할 수 있다.
일부 실시예에서, 둘 이상의 병합 방식들(예를 들어, 쿼드 병합 및 픽셀 파일링)이 주어진 쿼드와 연관된, 도착하는 커버리지에 적용될 수 있다. (가능한 완화된) 쿼드 병합 기준들 (1) 내지 (4) 중 하나 이상을 충족하는 프리미티브들에 대한 커버리지의 경우, 이러한 커버리지들은 병합될 수 있으며, 구현 세부 사항에 따라, 쿼드에서 실질적으로 더 적은 프리미티브들을 가능하게 하며, 이들 동일한 프리미티브들이 더 많은 픽셀들을 커버할 수 있다.
도 13a 내지 도 13c는 본 개시에 따른 하이브리드 픽셀 패킹 기술의 실시예를 도시한다. 도 13a 내지 도 13c에 도시된 실시예에서, 3개의 프리미티브들(1300, 1305, 1310)은 단일 쿼드(1340)에서 커버리지를 가질 수 있다.
도 13a를 참조하면, 삼각형들(1300, 1305)이 도착할 수 있고 커버리지를 시프트하기 위한 후보들일 수 있다. 예를 들어, 픽셀 위치(1315a)에서의 커버리지는 삼각형(1300)에서 삼각형(1305)으로 시프트되어, 도 13b에 도시된 바와 같이 쿼드(1300)에서 3개의 픽셀 가치의 커버리지를 갖는 단일 삼각형(1300)을 효과적으로 생성할 수 있다. (커버가 한 프리미티브에서 다른 프리미티브로 시프트될 때 결과적인 프리미티브는 정확히 삼각형 모양이 아닐 수 있지만 프리미티브들의 전체 컬렉션은 여전히 동일한 총 커버리지를 가질 수 있다.)
도 13c를 참조하면, 제 3 삼각형(1310)이 도착하고 픽셀 파일링 기술을 사용하여 하이브리드 방식으로 동일한 쿼드(1300)로 배치될 수 있다. 따라서, 동일한 쿼드(1300) 내에서 2개의 상이한 쿼드 병합 기술들이 사용될 수 있다.
일부 실시예에서, 셰이더 코어로 전송된 쿼드가 하나 이상의 프리미티브로부터의 커버리지를 포함할 때, 방향 도함수 계산은 예를 들어 도 1a 내지 도 9와 관련하여 전술한 픽셀 파일링 기술들의 메커니즘들 중 하나 이상에 의해 제어될 수 있다. 다른 경우에, 예를 들어, 쿼드가 단일 프리미티브로부터의 커버리지를 포함할 수 있는 경우, 하나 이상의 헬퍼 픽셀이 방향 도함수 계산에 사용될 수 있다.
애플리케이션으로부터의 인디케이션이 VRS 레벨과 관련될 수 있는 실시예에서, VRS 동작의 서로 다른 티어들이 도 14 및 도 15와 관련하여 이하 설명되는 바와 같이 수용될 수 있다. 일부 실시예에서, VRS-인에이블된 애플리케이션은 그래픽 빌딩 블록의 서로 다른 레벨들에서 서로 다른 레벨들의 조악한(coarse) 샘플링을 수행하기 위해 GPU에 인디케이션을 전송할 수 있다. 이들 서로 다른 레벨들의 몇가지 예들은 (a) 드로우 레벨 VRS, (b) 자극별(per-provoking) 정점 레벨 VRS(예컨대, 프리미티브 레벨) 및/또는 (c) 스크린 영역을 포함할 수 있다. 일부 실시예에서, 프리미티브별(per-primitive) 레벨 VRS가 특정될 때, 쿼드 병합 기술은 두개의 쿼드들 모두가 동일한 샘플링 레벨일 때 적용될 수 있다.
도 14는 본 개시에 따른 커버리지를 처리하는 하나 이상의 픽셀 패킹 기술들을 선택하고 구현하는 방법의 실시예를 도시한다. 도 14에 도시된 방법은, 예를 들어, 도 10에 도시된 평가 스테이지(1015) 및 패킹 로직(1020)을 이용하여 구현될 수 있지만, 다른 장치로 구현될 수도 있다.
도 14를 참조하면, 동작(1400)에서, 상기 방법은 병합 후보들인 2개의 쿼드들을 찾을 수 있다. 일부 실시예에서, 이것은 예를 들어 비중첩 커버리지를 갖는, 동일한 위치에 있는 2개의 픽셀 블록을 찾는 것에 의해 달성될 수 있다. 동작(1405)에서, 상기 방법은 애플리케이션에 의해 제공되는 현재 VRS 설정에 기초하여 VRS 동작이 저해상도 드로우콜에 대한 것인지의 여부를 결정할 수 있다. 상기 동작이 저해상도 드로우콜에 대한 것이라면, 상기 방법은 동작 1410으로 진행하여 쿼드 병합 기준(quad merge criteria)이 2개의 쿼드들에 대해 평가될 수 있다. 예를 들어, Z 깊이 및 Z 기울기의 값들은 각각의 임계값들과 비교될 수 있다. 이 평가에 기초하여, 상기 방법은 동작(1415)에서 하나의 프리미티브에서 다른 프리미티브로의 픽셀을 이송하는 것에 기초한 쿼드 병합이 수행될 수 있는지의 여부를 결정할 수 있다. 쿼드 병합이 수행될 수 있는 경우, 상기 방법은 동작(1420)으로 진행하여, 픽셀 이송이 수행되고 하나의 픽셀 블록이 유지될 수 있다. 그런 다음, 상기 방법은 동작(1425)으로 진행하여, 하나의 프리미티브에 대해 하나 이상의 무게중심 보간(BCI) 연산들(operations)이 수행될 수 있다.
동작(1415)에서 상기 방법은 쿼드 병합이 수행되지 않을 것으로 판단되면, 동작(1430)으로 진행하여 헬퍼 픽셀 누적(pile-up) 쿼드 병합이 수행될 수 있다. 이후, 상기 방법은 동작(1435)으로 진행하여, 상기 쿼드에서 커버리지를 갖는 다수의 프리미티브들에 대해 하나 이상의 BCI 연산들이 수행될 수 있다.
동작(1405)에서, 상기 동작이 저해상도 드로우콜 타일에 대한 것이 아닌 것으로 판단되면, 상기 방법은 전술한 동작들(1430 및 1435)로 진행할 수 있다.
도 15는 본 개시에 따른 커버리지를 처리하는 하나 이상의 픽셀 패킹 기술들을 선택하고 구현하는 방법의 실시예를 도시한다. 도 15에 도시된 방법은, 예를 들어, 도 10에 도시된 평가 스테이지(1015) 및 패킹 로직(1020)을 이용하여 구현될 수 있지만, 다른 장치로 구현될 수도 있다.
도 15에 도시된 실시예는 동작(1505)이 VRS 동작이 저해상도 스크린 공간 타일에 대한 것인지의 여부를 결정할 수 있다는 점을 제외하고는 도 14에 예시된 실시예와 유사하다.
도 15를 참조하면, 동작(1500)에서, 상기 방법은 병합 후보들인 2개의 쿼드들을 찾을 수 있다. 일부 실시예에서, 이것은 예를 들어 비중첩 커버리지를 갖는, 동일한 위치에 있는 2개의 픽셀 블록을 찾는 것에 의해 달성될 수 있다. 동작(1505)에서, 상기 방법은 애플리케이션에 의해 제공되는 현재 VRS 설정에 기초하여 VRS 동작이 저해상도 스크린 공간 타일에 대한 것인지의 여부를 결정할 수 있다. 상기 동작이 저해상도 스크린 공간 타일에 대한 것이라면, 상기 방법은 쿼드 병합 기준(quad merge criteria)이 2개의 쿼드들에 대해 평가될 수 있는 동작 1510으로 진행할 수 있다. 예를 들어, Z 깊이 및 Z 기울기의 값들은 각각의 임계값들과 비교될 수 있다. 이 평가에 기초하여, 상기 방법은 동작(1515)에서 하나의 프리미티브에서 다른 프리미티브로의 픽셀을 이송하는 것에 기초한 쿼드 병합이 수행될 수 있는지의 여부를 결정할 수 있다. 쿼드 병합이 수행될 수 있는 경우, 상기 방법은 동작(1520)으로 진행하여 픽셀 이송이 수행되고 하나의 픽셀 블록이 유지될 수 있다. 그런 다음, 상기 방법은 동작(1525)으로 진행하여, 하나의 프리미티브에 대해 하나 이상의 무게중심 보간(BCI) 연산들(operations)이 수행될 수 있다.
동작(1515)에서 상기 방법은 쿼드 병합이 수행되지 않을 것으로 판단되면, 동작(1530)으로 진행하여 헬퍼 픽셀 누적(pile-up) 쿼드 병합이 수행될 수 있다. 이후, 상기 방법은 동작(1535)으로 진행하여, 상기 쿼드에서 커버리지를 갖는 다수의 프리미티브들에 대해 하나 이상의 BCI 연산들이 수행될 수 있다.
동작(1505)에서, 상기 동작이 저해상도 스크린 공간 타일에 대한 것이 아닌 것으로 판단되면, 상기 방법은 전술한 동작들(1530 및 1535)로 진행할 수 있다.
여기에 설명된 임의의 다른 실시예들 뿐만 아니라 도 14 및 도 15에 도시된 실시예와 관련하여 설명된 동작 및/또는 구성요소는 예시적인 동작 및/또는 구성요소이다. 일부 실시예에서, 일부 동작 및/또는 구성요소는 생략될 수 있고 및/또는 다른 동작 및/또는 구성요소가 포함될 수 있다. 더욱이, 일부 실시예에서, 동작들 및/또는 구성요소들의 시간적 및/또는 공간적 순서가 변경될 수 있다.
본 개시에 따른 일부 실시예에서, 히스테리시스 스토리지(예를 들어, 물리적 메모리)는 상이한 커버리지 패킹 기술들 사이에서 공유될 수 있다(예를 들어, 하드웨어 비용은 상각될 수 있다). 예를 들어, 하나의 패킹 기술에 대해 예시된 메모리 공간과 같은 구조는 전술한 바와 같은 하이브리드 패킹 방법에서 다른 패킹 기술에 의해 사용될 수 있다. 구현 세부사항에 따라, 이는 메모리 공간 또는 기타 구조와 관련된 오버헤드를 줄일 수 있다. 일부 실시예에서, 개별 패킹 기술들 중 어느 하나에 필요한 것 이상의 추가 계산이 하이브리드 기술을 구현하기 위해 필요하지 않을 수 있다. 일부 실시예에서, 임계값 파라미터에 대한 변경(modification)이 임계값을 평가하기 위해 추가 계산을 도입할 필요 없이 이루어질 수 있다. 더욱이, 구현 세부사항에 따라, 전술한 파라미터들중 어느 하나에 대한 변경은 값을 두 배로 하거나 반으로 줄이는 것과 같이 사소할 수 있으며, 이는 비교적 저렴한 부동 소수점 연산(floating-point operations)일 수 있다.
일부 실시예에서, 그리고 구현 세부사항에 따라, 여기에 개시된 커버리지 기술 선택 특징들의 잠재적인 이점은 상기 특징들이 기존 하드웨어 및/또는 소프트웨어에 비교적 작은 변경을 가함으로써 구현될 수 있다는 것이다. 예를 들어, 픽셀 셰이더 워프 패커 유닛으로 워프를 패킹하는 동안, 전술한 패킹 기술들(예: 쿼드 병합의 프리미티브 전이(transfer) 타입, 쿼드 병합의 픽셀 파일링 타입, 쿼드 병합 없음 등) 중 어느 것에 의해 생성된 상이한 타입의 쿼드들이 동일한 워프에 배치될 수 있다. 이는 예를 들어 조건부(if) 문 구성에서 픽셀-파일링(piling) 쿼드 병합을 위한 추가 ISA(instruction set architecture)-레벨 셰이더 명령어들을 포함하여 가능하게 될 수 있다. 일부 실시예에서, 이러한 조건문은 쿼드 병합이 존재하는지의 여부 및 존재한다면 쿼드 병합의 타입을 나타낼 수 있는 하나 이상의 플래그에 의해 제어될 수 있다. 따라서, 일부 실시예에서, 상기 코드의 나머지는 불변으로 남아 있다. 그러나, 일부 실시예에서, 추가 명령어들이 실행될 수 있으며 픽셀 파일링 기술이 될 수 있다.
기존 인프라(infrastructure)에 대한 사소한 변경의 또 다른 예는 커버리지 패킹 기술들의 하이브리드 조합을 지원하기 위해 코드를 생성하도록 이루어지는 컴파일러 변경일 수 있다. 이러한 변경은 비교적 간단하여, 개별 기술들로부터의 코드를 결합함으로써 구현할 수 있다. 더욱이, 일부 실시예에서, 커버리지 기술 선택 특징들 중 임의의 것을 구현하는 GPU용 드라이버들이 변경 없이 사용될 수 있다. (애플리케이션이 전체 커버리지 기술 선택 특징을 완전히 디스에이블할 수 있도록 하는 사소한 변경은 예외일 수 있다.
기존 하드웨어에 대한 사소한 변경의 다른 예로서, 일부 실시예에서, 예를 들어, 패킹 로직 내 히스테리시스 윈도우는 하나 이상의 타입의 패킹 기술에 대한 다양한 프리미티브들로부터 비중첩 쿼드를 수집하는 데 사용될 수 있다. 쿼드에서 비중첩 커버리지를 공유하는 인접 프리미티브들을 수집하기 위한 메커니즘은 마주치는 다양한 프리미티브들이 셰이더 코어에서 처리하기 위해 단일 쿼드로 기회적으로 결합될 수 있는 기간 내에 히스테리시스 윈도우를 제공할 수 있다.
도 16은 본 개시에 따라 패킹 기술 선택을 구현할 수 있는 GPU를 포함하는 시스템 온 칩(SOC) 장치의 실시예를 도시한다. SOC(1602)는 중앙 처리 장치(1604), 메인 메모리(1606), GPU(1608), 및 디스플레이 드라이버(1610)를 포함할 수 있다. GPU(1608)는 평가 스테이지(1615) 및 패킹 로직(1620)을 갖는 파이프라인(1614)을 포함할 수 있다. 상기 GPU는 예를 들어 평가 스테이지(1615) 및 패킹 로직(1620)에 의해 구현되는 다양한 패킹 기술들에 의해 공유될 수 있는 히스테리시스 윈도우(hysteresis window) 저장을 위한 메모리(1616)를 더 포함할 수 있다. SOC(1602)는 예를 들어, 여기에 개시된 커버리지 패킹 기술 선택 및 구현 특징들 중 임의의 것을 구현하기 위해 사용될 수 있다. 도 16에 도시된 SOC(1602)는, 예를 들어, 도 17에 도시된 실시예와 같은 이미지 디스플레이 장치로 통합될 수 있다.
도 16에 도시된 평가 스테이지(1615) 및 패키징 로직(1620), 뿐만 아니라 도 10에 예시된 것들은 하드웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 예를 들어, 하드웨어로 적어도 부분적으로 구현될 수 있는 일부 실시예에서, 상기 제어 로직은 그 각각의 기능을 수행하기 위해, 조합 논리, 순차 논리, 하나 이상의 타이머, 카운터, 레지스터, 상태 머신, 동적 랜덤 액세스 메모리(DRAM) 및/또는 정적 랜덤 액세스 메모리(SRAM)과 같은 휘발성 메모리, 플래시 메모리와 같은 비휘발성 메모리, CPLD(complex programmable logic devices), FPGA(field programmable gate arrays), ASIC(application specific integrated circuits), CISC(complex instruction set computer), 및/또는 명령어 등을 실행하는 RISC(reduced instruction set computer) 프로세서와 같은 회로를 포함할 수 있다.
도 17은 본 개시에서 설명된 방법 또는 장치 중 임의의 것이 통합될 수 있는 이미지 디스플레이 장치(1704)의 실시예를 도시한다. 디스플레이 장치(1704)는 PC, 랩탑(laptop), 모바일 장치 등을 위한 패널 디스플레이, 프로젝터, VR 고글 등과 같은 임의의 폼 팩터(form factor)를 가질 수 있으며, 픽셀들을 갖는 래스터화된 이미지(1706)를 표시하기 위한 음극선관(CRT), DLP(digital light projector), 발광 다이오드(LED), 액정 디스플레이(LCD), 유기 LED(OLED), 양자점 등과 같은 임의의 이미징 기술을 기반으로 할 수 있다. 그래픽 처리 장치(GPU) 및/또는 드라이버 회로(1712)와 같은 이미지 프로세서(1710)는 이미지를 처리하고 및/또는 상기 이미지를 이미징 장치(1704) 상에 또는 이를 통해 디스플레이될 수 있는 형태로 변환할 수 있다. 이미지(1706)의 부분은 픽셀들(1708)이 보이도록 확대되어 도시되어 있다. 본 개시에서 설명된 방법 또는 장치 중 임의의 것은 픽셀들(1708) 및/또는 이의 그룹을 생성하기 위해 이미징 장치(1704), 프로세서(1710), 및/또는 디스플레이 드라이버 회로(1712)로 통합될 수 있다. 일부 실시예에서, 이미지 프로세서(1710)는, 예를 들어, 집적 회로(1711) 상에 평가 스테이지 및 커버리지 패킹 로직을 갖는 파이프라인을 포함할 수 있다. 일부 실시예에서, 집적 회로(1711)는 또한 드라이버 회로(1712) 및/또는 디스플레이 장치(1704)의 임의의 다른 기능을 구현할 수 있는 임의의 다른 구성요소를 포함할 수 있다.
도 18은 본 개시에 따른 GPU에서 커버리지를 패킹하는 방법의 일 실시예를 도시한다. 상기 방법은 동작 1802에서 시작할 수 있다. 동작(1804)에서, 사기 방법은 이미지의 부분에 대한 인디케이션을 수신할 수 있다. 동작(1806)에서, 상기 방법은 인디케이션에 기초하여 상기 이미지의 부분에 대한 패킹 기술을 결정할 수 있다. 동작(1808)에서, 상기 방법은 상기 패킹 기술에 기초하여 상기 이미지의 부분에 대한 커버리지를 패킹할 수 있다. 상기 방법은 동작 1110에서 종료될 수 있다.
본 개시의 원리를 도시된 실시예들을 참조하여 설명하고 도시하였지만, 도시된 실시예들은 본 개시의 원리를 벗어나지 않고 배열적으로 세부적으로 변경될 수 있고 임의의 원하는 방식으로 결합될 수 있음이 인지될 수 있다. 전술한 기술은 특정 실시예들에 초점을 맞추었지만, 다른 구성들이 고려될 수 있다. 특히, "본 개시의 실시예에 따라" 등의 표현이 사용되더라도, 이러한 문구는 일반적으로 실시예 가능성을 언급하기 위한 것으로, 본 개시를 특정 실시예의 구성으로 한정하려는 의도가 아니다. 여기에 사용된 바와 같이, 이들 용어들은 다른 실시예로 결합될 수 있는 동일하거나 상이한 실시예들을 참조할 수 있다.
본 개시의 실시예들은 하나 이상의 프로세서에 의해 실행 가능한 명령어를 포함하는 비-일시적 머신-판독 가능 매체를 포함할 수 있으며, 상기 명령어는 여기에서 설명된 발명적 개념의 요소를 수행하기 위한 명령어를 포함한다.
전술한 예시적인 실시예들은 그 개시를 제한하는 것으로 해석되어서는 안 된다. 몇개의 실시예들이 설명되었지만, 당업자는 본 개시의 신규한 교시 및 이점을 실질적으로 벗어나지 않으면서 이러한 실시예들에 대한 많은 변형이 가능하다는 것을 쉽게 이해할 것이다. 따라서, 이러한 모든 변형은 청구범위에 정의된 바와 같이 본 개시의 범위 내에 포함되는 것으로 의도된다.
105: 동적 분기 셰이더 워프 패커 유닛
108: 래스터라이저
110: 셰이더 코어(들)
116: 메모리
195: 텍스처 유닛(들)
198: 보간 유닛(들)

Claims (10)

  1. 그래픽 처리 장치(GPU)에서 커버리지(Coverage)를 처리하는 방법에 있어서,
    제 1 프리미티브(Primitive)의 적어도 일부에 대한 제 1 커버리지를 수신하는 단계;
    제 2 프리미티브의 적어도 일부에 대한 제 2 커버리지를 수신하는 단계로서, 상기 제 1 프리미티브의 일부 및 상기 제 2 프리미티브의 일부는 이미지의 부분와 연관되어 있는 단계;
    상기 이미지의 부분에 대한 인디케이션(indication)을 수신하는 단계;
    상기 인디케이션에 기초하여, 상기 제 1 커버리지와 상기 제 2 커버리지를 결합하기 위한 기술을 결정하는 단계; 및
    상기 기술에 기초하여 어레이에서 상기 제 1 커버리지와 상기 제 2 커버리지를 결합하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 기술은 어레이 병합을 포함하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    상기 기술은 픽셀 파일링(pixel piling)을 포함하는 것을 특징으로 하는 방법..
  4. 제 1 항에 있어서,
    상기 제 1 프리미티브 및 상기 제 2 프리미티브는 동일한 드로우콜에 속하는 것을 특징으로 하는 방법.
  5. 제 1 항에 있어서,
    상기 기술은 커버리지를 상기 제 1 프리미티브에서 상기 제 2 프리미티브로 시프트하는 것을 특징으로 하는 방법.
  6. 제 1항에 있어서,
    상기 결정하는 단계는 상기 인디케이션에 기초하여 상기 기술에 대한 기준 세트(a set of creteria)를 선택하는 단계; 및
    상기 기준 세트에 기초하여 상기 기술을 선택하는 단계를 포함하는 것을 특징으로 하는 방법.
  7. 제 1 항에 있어서,
    상기 기술은 제 1 기술을 포함하고, 상기 방법은
    상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 제 2 기술을 결정하는 단계; 및
    상기 제 2 기술에 기반하여 상기 어레이에서 상기 이미지의 부분에 대한 커버리지를 결합하는 단계를 더 포함하는 것을 특징으로 하는 방법
  8. 그래픽 처리 파이프라인을 포함하는 장치에 있어서,
    이미지의 부분에 대한 인디케이션을 수신하고 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 패킹 기술을 결정하도록 구성되는 평가 스테이지; 및
    상기 이미지의 부분에 대한 커버리지를 수신하고 상기 패킹 기술에 기반하여 상기 커버리지를 패킹하도록 구성되는 커버리지 패킹 스테이지를 포함하는 것을 특징으로 하는 장치.
  9. 제 8 항에 있어서,
    상기 패킹 기술은 제 1 패킹 기술을 포함하고,
    상기 평가 스테이지는 상기 인디케이션에 기초하여 상기 이미지의 부분에 대한 제 2 패킹 기술을 결정하도록 구성되며,
    상기 커버리지 패킹 스테이지는 상기 제 2 패킹 기술에 기초하여 상기 커버리지를 패킹하도록 구성된 것을 특징으로 하는 장치.
  10. 그래픽 처리 장치(GPU)에서 커버리지를 결합하는 방법에 있어서,
    이미지 엘리먼트들의 어레이에서 커버리지를 갖는 제 1 프리미티브를 수신하는 단계;
    상기 제 1 프리미티브의 제 1 이미지 엘리먼트를 상기 어레이의 제 1 위치에 배치하는 단계;
    상기 어레이에서 커버리지를 갖는 제 2 프리미티브를 수신하는 단계로서, 상기 제 2 프리미티브는 상기 어레이의 상기 제 1 위치에서 상기 제 1 이미지 엘리먼트와 중첩하는 제 2 이미지 엘리먼트를 갖는 단계; 및
    상기 제 2 프리미티브의 제 3 이미지 엘리먼트를 상기 어레이의 제 2 위치에 배치하는 단계를 포함하는 것을 특징으로 하는 방법.
KR1020220015131A 2021-02-04 2022-02-04 픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치 KR20220112710A (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US17/168,168 US11748933B2 (en) 2020-08-03 2021-02-04 Method for performing shader occupancy for small primitives
US17/168,168 2021-02-04
US202163214776P 2021-06-24 2021-06-24
US63/214,776 2021-06-24
US202163219356P 2021-07-07 2021-07-07
US63/219,356 2021-07-07
US17/503,259 2021-10-15
US17/503,259 US11798218B2 (en) 2020-08-03 2021-10-15 Methods and apparatus for pixel packing

Publications (1)

Publication Number Publication Date
KR20220112710A true KR20220112710A (ko) 2022-08-11

Family

ID=82627920

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220015131A KR20220112710A (ko) 2021-02-04 2022-02-04 픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치

Country Status (2)

Country Link
KR (1) KR20220112710A (ko)
CN (1) CN114862652A (ko)

Also Published As

Publication number Publication date
CN114862652A (zh) 2022-08-05

Similar Documents

Publication Publication Date Title
US11748840B2 (en) Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters
US8941653B2 (en) Order-preserving distributed rasterizer
US10049486B2 (en) Sparse rasterization
US10055883B2 (en) Frustum tests for sub-pixel shadows
US8704836B1 (en) Distributing primitives to multiple rasterizers
US9224227B2 (en) Tile shader for screen space, a method of rendering and a graphics processing unit employing the tile shader
CN106575430B (zh) 用于像素哈希的方法和装置
US9082204B2 (en) Storage structures for stitching primitives in graphics processing
CN107392836B (zh) 使用图形处理管线实现的立体多投影
US10192348B2 (en) Method and apparatus for processing texture
US20210327122A1 (en) Methods and apparatus for efficient multi-view rasterization
US11798218B2 (en) Methods and apparatus for pixel packing
US11748933B2 (en) Method for performing shader occupancy for small primitives
US11972518B2 (en) Hybrid binning
KR20220112710A (ko) 픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치
US9536341B1 (en) Distributing primitives to multiple rasterizers
US20220319091A1 (en) Post-depth visibility collection with two level binning
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
US20240104685A1 (en) Device and method of implementing subpass interleaving of tiled image rendering
US20230186523A1 (en) Method and system for integrating compression
US20210398349A1 (en) Fine grained replay control in binning hardware
KR20230149319A (ko) 프리미티브들의 배치들의 지오메트리 프로세싱을 위한 스케일러블 프리미티브 레이트 아키텍처