KR20220016774A - 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법 - Google Patents

작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법 Download PDF

Info

Publication number
KR20220016774A
KR20220016774A KR1020210090072A KR20210090072A KR20220016774A KR 20220016774 A KR20220016774 A KR 20220016774A KR 1020210090072 A KR1020210090072 A KR 1020210090072A KR 20210090072 A KR20210090072 A KR 20210090072A KR 20220016774 A KR20220016774 A KR 20220016774A
Authority
KR
South Korea
Prior art keywords
quad
shader
partially covered
warp
primitive
Prior art date
Application number
KR1020210090072A
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 KR20220016774A publication Critical patent/KR20220016774A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/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

Landscapes

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

Abstract

GPU는 세이더 코어들 및 세이더 워프 패커 유닛을 포함한다. 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드와 연관된 제1 프리미티브, 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신할 수 있다. 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드가 비-중첩 커버리지를 포함하는지 판별할 수 있다. 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹할 수 있다. 셰이더 워프 패커 유닛은 패킹된 쿼드를 하나 또는 그 이상의 셰이더 코어들로 송신할 수 있다. 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드는 공간적으로 서로 연결되지 않을 수 있다. 셰이더 코어들은 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드를 개별적으로 처리하는 셰이더 코어들과 관련된 정보의 손실 없이, 패킹된 쿼드를 수신 및 처리할 수 있다.

Description

작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법{METHOD FOR PERFORMING SHADER OCCUPANCY FOR SMALL PRIMITIVES}
본 개시는 그래픽 처리 유닛(GPU; graphics processing unit)에 관한 것으로, 보다 상세하게는, 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법에 관한 것이다.
최신의 GPU(graphics processing unit)들은 프로그래밍 가능한 고도의 병렬 연산 엔진 세트들, 및 다양한 고정 기능 유닛들(fixed-function units)을 포함한다. 고정 기능 유닛은 텍스쳐 어드레스 생성 및 필터링 유닛(texture address generation and filtering unit), 프리미티브 클리핑 유닛(primitive clipping unit), 컬링 유닛(culling unit), 뷰포트 변환 유닛(viewport transforming unit), 비닝 유닛(binning unit), 래스터화 설정 및 래스터화 유닛(rasterization setup and rasterization unit), 깊이 비교 유닛(depth comparison unit), 블렌딩 유닛(blending unit), 및/또는 다른 유닛들을 포함할 수 있다. GPU들은 그래픽 집약적인 작업들 및/또는 연산 집약적인 워크 로드들(workloads)에 사용될 수 있다.
그래픽 데이터는 OpenGL-ES, Vulkan, DirectX 또는 그와 유사한 것들과 같은 하나 또는 그 이상의 API들(Application Programming Interfaces)에 의한 단계들을 수행하여, GPU를 통해 파이프라인 방식(pipeline fashion)으로 전달될 수 있다. 따라서, GPU들은 텍스쳐 좌표 및 텍스쳐 어드레스의 생성에 대응하는 특정한 표준들을 준수할 수 있다. 보다 상세하게는, 파이프라인의 픽셀 셰이딩 단계(pixel shading stage) 동안, 셰이더 프로그램(shader program)은 텍스쳐 요청을 생성할 수 있고, 필터링 된 텍스쳐 데이터를 수신할 수 있다.
일부 모드에서, 각 픽셀에 대해, 커버리지의 픽셀(또는 샘플) 간격과 관련하여 액세스되는 텍스쳐의 축소 또는 확대를 결정하기 위해, 방향 도함수 연산(directional derivative calculation)이 X 및 Y차원 각각에서 수행될 수 있다. 본 개시의 이러한 맥락에서, “샘플” 및 “픽셀”로 지칭되는 용어들은, 동일한 동작들이 픽셀 레벨 또는 서브 픽셀 샘플 레벨에서 수행된다는 것이 이해될 수 있는 경우, 상호 교환적으로 사용될 수 있다. 일반적으로, 이하에서는 “샘플”보다는 “픽셀” 용어를 주로 참조하여 본 발명이 설명될 것이다.
방향 도함수 연산은 두 개의 차원들 각각에서 적어도 두 개의 데이터 값을 사용하여 수행될 수 있다. 따라서, 픽셀 셰이더들(pixel shaders)은 최소 작업 양자(minimum quantum of work)로서, 2x2 쿼드(즉, 4개의 픽셀 블록)로 동작할 수 있다. 입력 프리미티브는 3차원(3D) 프리미티브의 2차원(2D) 이미지 공간으로의 프로젝션(projection)일 수 있고, 픽셀 커버리지를 결정하기 위해 래스터라이즈될 수 있다. 프리미티브는 (x,y) 좌표 쌍 세 개로 정의된 삼각형일 수 있다. 주어진 입력 프리미티브에 의해 형성된 실제 커버리지와 관계 없이, 병렬 프로세서 셰이더 서브 시스템에 제공된 작업은 이러한 2x2 쿼드들의 모음일 수 있기 때문에, 이러한 다수의 쿼드들이 부분적으로만 채워진 경우(즉, 부분적으로만 커버된 경우) 큰 비효율이 발생할 수 있다.
상술된 비효율을 해결하기 위한 하나의 접근 방법은, 부분 커버리지된 경우들을 인식하고, 하나의 인접한 프리미티브에서 다른 프리미티브의 쿼드로 그 커버리지를 전송하는 것을 포함할 수 있다. 이러한 접근 방식은 셰이더로 전송되는 총 쿼드들의 수를 감소시킬 수 있기 때문에, 총 에너지 소비량을 감소시키는데 도움을 줄 수 있지만, 일부 이미지 품질의 손실을 초래할 수 있다. 쿼드들의 병합은 어플리케이션을 제어하기 위해 적용 및 설정된 특정한 휴리스틱 임계 값들(heuristic thresholds)을 사용할 수 있고, 이를 통해 하나의 프리미티브에서 인접한 다른 프리미티브로의 커버리지 지정, 및 그 인접한 프리미티브의 속성 데이터(attribute data)를 사용한 근사(approximation) 때문에 발생할 수 있는 비 의도적인 시각적 아티팩트(visual artifact)들의 해결이 시도된다. 그럼에도 불구하고, 상술된 쿼드 병합을 통한 방식은 이미지 품질의 손실을 발생시킬 수 있다.
본 개시는 상술한 기술적 과제를 해결하기 위한 것이다. 본 개시의 실시 예들에 따르면, 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법이 제공될 수 있다.
본 개시의 다양한 실시 예들은, 하나 또는 그 이상의 셰이더 코어들 및 셰이더 워프 패커 유닛을 포함하는 GPU(graphics processing unit)를 포함한다. 상기 셰이더 워프 패커 유닛은, 제1 부분 커버된 쿼드와 연관된 제1 프리미티브, 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신하도록 구성될 수 있다. 상기 셰이더 워프 패커 유닛은, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드가 비-중첩 커버리지를 포함하는지 판별하도록 구성될 수 있다. 상기 셰이더 워프 패커 유닛은, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹하도록 구성될 수 있다. 상기 셰이더 워프 패커 유닛은, 상기 패킹된 쿼드를 상기 하나 또는 그 이상의 셰이더 코어들로 송신하도록 구성될 수 있다. 일부 실시 예들에서, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드는 공간적으로 서로 연결되지 않을 수 있다. 이 경우, 연결되지 않는다는 용어는 비-중첩을 의미할 수 있다. 상기 하나 또는 그 이상의 셰이더 코어들은, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 개별적으로 처리하는 상기 하나 또는 그 이상의 셰이더 코어들과 관련된 정보의 손실 없이, 상기 패킹된 쿼드를 수신 및 처리하도록 구성될 수 있다.
본 개시의 일 실시 예에 따르면, GPU(graphics processing unit)를 사용하여 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법이 제공될 수 있다. 본 개시의 일 실시 예에 따른 방법은, 셰이더 워프 패커 유닛에 의해, 제1 부분 커버된 쿼드와 연관된 제1 프리미티브 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신하는 단계를 포함할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 상기 셰이더 워프 패커 유닛에 의해, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드가 비-중첩 커버리지를 포함하는지 판별하는 단계를 포함할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 상기 셰이더 워프 패커 유닛에 의해, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹하는 단계를 포함할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 상기 셰이더 워프 패커 유닛에 의해, 상기 패킹된 쿼드를 하나 또는 그 이상의 셰이더 코어들로 송신하는 단계를 포함할 수 있다. 일부 실시 예들에서, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드는 공간적으로 서로 연결되지 않을 수 있다. 이 경우, 연결되지 않는다는 용어는 비-중첩을 의미할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 상기 하나 또는 그 이상의 셰이더 코어들에 의해, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 개별적으로 처리하는 상기 하나 또는 그 이상의 셰이더 코어들과 관련된 정보의 손실 없이, 상기 패킹된 쿼드를 수신 및 처리하는 단계를 더 포함할 수 있다.
본 개시의 실시 예에 따르면, GPU(graphics processing unit)의 그래픽 집약적 동작들의 효율이 향상될 수 있다. 보다 상세하게는, 정확도의 손실 없이 두 개 이상의 프리미티브들로부터의 커버리지가 동일한 쿼드에 존재할 수 있는 메커니즘이 제공될 수 있고, 작은 프리미티브 연산 효율이 향상될 수 있다.
본 개시의 후술되는 내용, 및 부가적인 특징 및 효과들은 이하의 첨부된 도면들을 참조하여, 발명을 실시하기 위한 구체적인 내용에서 보다 명백하게 설명된다.
도 1a는 일부 실시 예들에 따른, 동적 분기 픽셀 셰이더 워프 패커 유닛을 포함하는 GPU의 블록도를 보여준다.
도 1b는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 포함하는 GPU를 보여준다.
도 1c는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는, 개인용 모바일 컴퓨터를 보여준다.
도 1d는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 태블릿 컴퓨터를 보여준다.
도 1e는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛을 갖는 GPU를 포함하는 스마트 폰을 보여준다.
도 2는 일부 실시 예들에 따른 2x2 쿼드를 보여주는 블록도이다.
도 3은 일부 실시 예들에 따른, 부분 커버된 2x2 쿼드의 프리미티브를 보여주는 블록도이다.
도 4는 일부 실시 예들에 따른, 부분 커버된 다른 2x2 쿼드의 다른 프리미티브를 보여주는 블록도이다.
도 5는 일부 실시 예들에 따른, 패킹된(packed) 2x2 쿼드를 보여주는 블록도이다.
도 6은 일부 실시 예들에 따른, 패킹된 다른 2x2 쿼드를 보여주는 블록도이다.
도 7은 (x,y) 좌표의 픽셀에 대해 표현된, 이웃한 픽셀들의 무게 중심 인자 계산과 관련된 다이어그램이다.
도 8은 일부 실시 예들에 따른, 작은 프리미티브들에 대한 셰이더 점유를 수행하기 위한 방법을 보여주는 흐름도이다.
도 9는 일부 실시 예들에 따른, 작은 프리미티브들에 대한 셰이더 점유를 수행하기 위한 다른 방법을 보여주는 흐름도이다.
이하에서, 개시된 실시 예들에 대한 상세한 참조가 이루어질 것이고, 그 예시들은 첨부된 도면에 도시된다. 이하의 발명의 상세한 설명에서, 본 발명의 기술적 사상의 완전한 이해가 가능하게 하기 위해, 다수의 세부적인 사항들이 설명될 것이다. 그러나 본 개시의 기술 범위의 통상의 기술자들은, 이러한 특정한 세부 사항들 없이 본 발명의 기술적 사상을 구현할 수 있음을 이해할 수 있을 것이다. 다른 예를 들어, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들, 및 네트워크들은 본 발명의 실시 예들의 양상들을 불필요하게 모호하게 표현하지 않도록, 상세하게 설명되지 않을 수 있다.
비록 제1, 제2 등의 용어들이 이하에서 다양한 구성 요소들을 설명하기 위해 사용될 수 있으나, 이러한 용어들에 의해 구성 요소들이 제한되지 않는다는 것이 이해되어야 한다. 이러한 용어들은 오로지 하나의 구성 요소를 다른 구성 요소와 구별하기 위해 사용된다. 예를 들어, 본 발명의 기술적 사상의 범위를 벗어나지 않고, 제1 픽셀은 제2 픽셀로 지칭될 수 있고, 이와 유사하게, 제2 픽셀은 제1 픽셀로 지칭될 수 있다.
본 발명의 기술적 사상을 설명하기 위해 설명된 용어는 특정한 실시 예들을 설명하기 위한 것일 뿐, 본 발명의 범위를 제한하고자 하는 것은 아니다. 본 발명의 상세한 설명 및 첨부된 청구항들에서 사용되는 바와 같이, 문맥상 명백하게 달리 나타나지 않는 한, 단수형 기재는 복수형 기재를 포함하는 것으로 의도된다. 이하에서 사용되는 “및/또는” 용어는 하나 또는 그 이상의 관련된 열거된 항목들의 가능한 모든 조합들을 지칭하고 포함할 수 있다는 점도 이해될 것이다. 이하의 “포함하는”이라는 용어는 명시된 특징들, 정수들, 단계들, 동작들, 연산들, 및/또는 구성 요소들의 존재를 의미하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 연산들, 구성 요소들, 및/또는 그들의 그룹들의 추가를 배제하지는 않는다는 점이 더 이해될 것이다. 도면의 구성 요소들 및 기능들은 반드시 축척에 따라 그려지지는 않을 수 있다.
이하에 개시된 일부 실시 예들은, 상대적으로 작은 프리미티브들(primitive)에 대한 셰이더 점유(shader occupancy)를 수행하는 방법을 포함할 수 있다. 복수의 프리미티브들의 커버리지가 동일한 2x2 쿼드에 배치되는 경우, 추가적인 정보가 그 쿼드의 각 픽셀에 패킹될 수 있고, 이에 따라 방향 도함수 연산들에 필요한 계산들이 가능해진다. 이러한 기술은, 2x2 쿼드들의 누락된 “헬퍼” 픽셀들 또는 “”픽셀들의 누락되지 않았다면 생성되었을 정보를 생성하는데 사용될 수 있는 보조 정보(auxiliary information)와 함께, 잠재적으로 분리된 프리미티브들로부터의 쿼드들의 전체 패킹을 포함할 수 있고, 이에 따라 프로세싱 효율이 향상될 수 있다.
본 개시의 일부 실시 예들은, GPU 내의 프로그래밍 가능한 유닛들 및/또는 고정 기능 유닛들(fixed-function units)의 사용을 포함할 수 있는, GPU의 그래픽 집약적 동작들의 효율을 향상시킨다. 본 개시의 실시 예들에 따르면, 하나의 프리미티브에서 다른 프리미티브로 커버리지를 전달하지 않을 수 있지만, 그 대신 정확도(precision)의 손실 없이, 두 개 또는 그 이상의 프리미티브들로부터의 커버리지가 동일한 쿼드에 존재할 수 있는 메커니즘들을 제공할 수 있다. 또한, 본 개시의 실시 예들에 따르면, 이미지의 퀄리티를 유지하기 위해 필요한 관련 휴리스틱 임계 값들(associated heuristic thresholds)이 필요하지 않다. 하나 이상의 인커밍(incoming) 프리미티브로부터의 커버리지를 포함하는 쿼드 내의 픽셀들에 대해, 추가적인 정보들이 존재할 수 있고, 연산들이 발생할 수 있다. 따라서, 작은 프리미티브 연산 효율이 향상될 수 있다. 또한, 소형 및 마이크로 폴리곤들(micro-polygons)의 사용이 증가하여, 그래픽 집약적인 게이밍 응용 프로그램들을 사용하는 등의 경우, 기하학적 복잡성 및 신뢰도가 향상될 수 있다.
도 1a는 일부 실시 예들에 따른, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 포함하는 GPU(100)의 블록도를 보여준다. 도 1b는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 포함하는 GPU(100)를 보여준다. 도 1c는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 갖는 GPU(100)를 포함하는, 개인용 모바일 컴퓨터(180a)를 보여준다. 도 1d는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 갖는 GPU(100)를 포함하는 태블릿 컴퓨터(180b)를 보여준다. 도 1e는 일부 실시 예들에 따른, 도 1a의 동적 분기 픽셀 셰이더 워프 패커 유닛(105)을 갖는 GPU(100)를 포함하는 스마트 폰(180c)을 보여준다. 이하에서 본 발명의 실시 예들이 도 1a 내지 도 1e를 참조하여 상세하게 설명된다.
동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 상대적으로 작은 프리미티브들(예를 들어, 130, 135)에 대한 셰이더 점유를 수행할 수 있다. 일부 실시 예들에서, 쿼드(115) 및 쿼드(120)과 같은 2x2 쿼드들 각각은 부분적으로만 채워질(즉, 부분적으로만 커버될) 수 있다. 본 개시에서는 일반적으로 2x2 쿼드들이 참조되어 설명되지만, 다른 크기의 쿼드들이 본 개시에 설명된 기술적 사상의 핵심에서 벗어나지 않고도 사용될 수 있음이 이해될 것이다. 작은 프리미티브(130)는 2x2 쿼드(115)를 부분적으로만 채운다. 작은 프리미티브(135)는 2x2 쿼드(120)를 부분적으로만 채운다. 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 두 개 이상의 프리미티브들(예를 들어, 130, 135)들을 동일한 2x2 쿼드(140)으로 패킹할 수 있다. 복수의 프리미티브들의 커버리지가 동일한 2x2 쿼드(140)에 배치되는 경우, 추가적인 속성 정보(additional attribute information)(예를 들어, 145)가 2x2 쿼드(140) 내 각각의 픽셀(150)과 함께 패키징 및/또는 저장될 수 있고, 이에 따라 방향 도함수들의 연산에 요구될 수 있는 정보(예를 들어, 160, 165, 192)가 제공될 수 있다. 이 기술은, 2x2 쿼드들의 누락된 H 픽셀들의, 누락되지 않았다면 생성되었을 정보를 생성하는데 사용될 수 있는 속성 정보(예를 들어, 145)와 함께, 잠재적으로 분리된 프리미티브들(예를 들어, 130, 135)의 2x2 쿼드들의 전체 패킹을 포함할 수 있고, 이에 따라 프로세싱 효율이 향상될 수 있다.
본 개시의 일부 실시 예들은, GPU(100) 내의 하나 이상의 셰이더 코어(들)(110)과 같은, 프로그래밍 가능한 유닛들 및/또는 고정 기능 유닛들의 사용을 포함할 수 있는, GPU(100) 내의 그래픽 집약적인 동작들의 효율을 향상시킨다. 본 개시의 실시 예들에 따르면, 하나의 프리미티브(예를 들어, 130)에서 다른 프리미티브(예를 들어, 135)로 커버리지를 전달하지 않을 수 있지만, 그 대신 정확도(precision)의 손실 없이, 두 개 이상의 프리미티브들(예를 들어, 130, 135)로부터의 커버리지가 동일한 2x2 쿼드(140)에 존재할 수 있는 메커니즘들이 제공될 수 있다. 하나 이상의 인커밍 프리미티브(예를 들어, 130, 135)로부터 커버리지를 포함하는, 2x2 쿼드(140) 내의 픽셀들(예를 들어, 150)에 대해, 추가적인 정보들(additional attribute information)(예를 들어, 145)이 존재할 수 있고, 연산들이 발생할 수 있다. 따라서, 작은 프리미티브 연산 효율이 향상될 수 있다. 또한, 소형 및 마이크로 폴리곤들(micro-polygons)의 사용이 증가하여, 그래픽 집약적인 게이밍 응용 프로그램들을 사용하는 등의 경우, 기하학적 복잡성 및 신뢰도가 향상될 수 있다.
두 개의 프리미티브들(예를 들어, 130, 135)로부터의 2x2 쿼드들(예를 들어, 115, 120)이 중첩 커버리지(overlapping coverage)를 포함하지 않는 경우, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 두 개의 다른 프리미티브들(예를 들어, 130, 135)로부터의 2x2 쿼드들(예를 들어, 115, 120)을 병합할 수 있고, 그것들을 동일한 2x2 쿼드(140) 내에 배치할 수 있다. 이 경우 워프 점유(warp occupancy)가 향상될 수 있다. 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 다양한 프리미티브들(예를 들어, 130, 135)로부터 비-중첩(non-overlapping) 쿼드들(예를 들어, 115, 120)을 수집할 수 있는, 히스테리시스 윈도우(hysteresis window)(155)를 포함할 수 있다. 예를 들어, 히스테리시스 윈도우(155) 내에서, 접하는(encountered) 다양한 프리미티브들(예를 들어, 130, 135)은 이하에서 설명되는 바와 같이, 하나 또는 그 이상의 셰이더 코어들(110)에서 처리하기 위한, 하나의 동일한 2x2 쿼드(140)로 기회적으로(opportunistically) 결합될 수 있다. 공유 쿼드 프로세싱(shared quad processing)의 후보군이지만, 히스테리시스 윈도우(155) 외의 프리미티브들은, 종래의 기술들이 적용되어 처리될 수 있으나, 향상된 셰이더 효율을 수반하지 않을 수 있다. 비-중첩 커버리지 품질(non-overlapping coverage quality)은 요구되지 않을 수 있다. 달리 말하면, 제1 부분 커버된 쿼드(115) 및 제2 부분 커버된 쿼드(120)는 픽셀들이 하나 또는 그 이상의 셰이더 코어들(110)에서 처리되는 동안, 추가적인 데이터의 버퍼링(buffering)이 발생하더라도, 중첩 커버리지를 가질 수 있다.
동적 분기 셰이더 워프 패커 유닛(105)는 하나 또는 그 이상의 프리미티브들(예를 들어, 130, 135)을 수신할 수 있고, 그리고 적어도 두 개의 부분 커버된 2x2 쿼드들(예를 들어, 115, 120)이 중첩 커버리지(overlapping coverlage)를 포함하지 않는지 여부를 판별할 수 있다. 본 개시의 실시 예들에 따르면, 적어도 두 개의 부분 커버된 2x2 쿼드들(예를 들어, 115, 120)이 동일한 위치 또는 서로 다른 위치에 있을 수 있다. 이 경우, 두 개의 부분 커버된 2x2 쿼드들의 공간적 근접성(spatial proximity)은 요구되지 않는다. 달리 말하면, 부분 커버된 2x2 쿼드들(예를 들어, 115, 120)은 서로에 대해 인접할 필요가 없고, 그리고 본 개시의 실시 예들은 부분 커버된 2x2 쿼드들(예를 들어, 115, 120)이 동일하거나 유사한 위치에 있지 않더라도, 동일하게 효과적일 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 적어도 두 개의 부분 커버된 2x2 쿼드들(예를 들어, 115, 120)을 하나의 패킹된 2x2 쿼드(예를 들어, 140)로 패킹할 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 프로세싱을 위해, 패킹된 2x2 쿼드(예를 들어, 140)를 하나 또는 그 이상의 셰이더 코어들(110)로 송신할 수 있다.
또한, 동적 분기 하이브리드 모드(dynamic branching hybrid mode)를 지원하기 위한 코드 시퀀스(170)(code sequence)를 생성하기 위해, 컴파일러가 수정될 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 하나 또는 그 이상의 레인들(125)(lane)를 사용한 코드 시퀀스(170)에 기초하여, 방향 도함수들(예를 들어, 160, 165, 192)을 연산할 수 있다. 하나 또는 그 이상의 레인들(125)(lane)은 예를 들어, 하나 또는 그 이상의 연산 스레드(computational thread)일 수 있다. 예를 들어, 하나 또는 그 이상의 레인들(125)은 멀티 스레드(multi-threaded) 및/또는 멀티 코어(multi-core) 마이크로프로세서에 의해 처리될 수 있다. 컴파일러는 크로스-레인(cross-lane) 방향 도함수 연산(예를 들어, 160) 및/또는 동일-레인(same-lane) 방향 도함수 연산(예를 들어, 165)을 지원하기 위해 코드 시퀀스(170)를 생성할 수 있다.
복수의 픽셀들은 동일한 레인에 쌓일(piled) 수 있다. 예를 들어, H 픽셀과 관련된 작업은 커버된 픽셀과 동일한 레인에 매핑될 수 있다. 일부 실시 예들에서, H 픽셀 데이터는 활성(alive) 픽셀들에 쌓일 수 있다. 예를 들어, 하나 또는 세 개의 픽셀들은 활성 픽셀들에 쌓일 수 있다. 컴파일러는 교차 레인 연산(cross-lane computation)을 위한 코드와 함께, 동일한 레인 내의 방향 도함수를 연산하기 위한 코드를 생성할 수 있다. 방향 도함수(예를 들어, 160, 165, 192)는 동일 레인 동작(same-lane operation) 또는 교차 레인 동작(cross-lane operation)으로 연산될 수 있다. 컴파일러는 이러한 두 가지 접근들 모두에 대해 코드를 생성할 수 있다. 특정한 동작 모드(예를 들어, 동일 레인 또는 교차 레인)는, 동적 분기 셰이더 워프 패커 유닛(105)에 의해 웨이브 패킹(wave packing)의 일부로서 생성 및 송신될 수 있는, 하나 또는 그 이상의 플래그들(114)을 사용하여 런타임(run time)에 선택될 수 있다. 하나 또는 그 이상의 플래그들(114)은 예를 들어 이진 플래그들(binary flags)일 수 있다.
동적 분기 셰이더 워프 패커 유닛(105)은 하나 또는 그 이상의 셰이더 코어들(110)로, 워프의 2x2 쿼드들(예를 들어, 140) 각각에 대한 커버리지를 갖는 커버리지 맵(190)을 포함하는, 패킹된 워프(191)를 전달할 수 있다. 워프는 16, 32, 64, 등과 같은 2의 거듭 제곱 크기의 폭을 가질 수 있다. 동적 분기 셰이더 워프 패커 유닛(105)은 하나 또는 그 이상의 셰이더 코어들(110)로 하나 또는 그 이상의 플래그들(114)을 제공할 수 있다. 하나 또는 그 이상의 플래그들(114)은 주어진 픽셀(예를 들어, 150)에 대한 하나 또는 그 이상의 셰이더 코어들(110) 코드의 제어(예를 들어, 동적 분기를 제공하는)에 사용될 수 있고, 따라서 주어진 2x2 쿼드(예를 들어, 140)에 대해 네 개 이상의 스레드들로 집합적일 수 있다. 쿼드의 커버리지 및 H 픽셀들의 존재(또는 비 존재)에 따라, 하나 이상의 플래그들(114)은 방향 도함수들(예를 들어, 160, 165, 192)의 연산에 관련한 분기들을 제어하는데 사용될 수 있다. 즉, 컴파일러는 각 픽셀들에서, 또는 여러 픽셀들에 걸쳐, 방향 도함수들(예를 들어, 160, 165, 192)의 서로 다른 연산 시나리오들에 대한 코드 세그먼트(170)를 생성할 수 있고, 그리고 동적 분기 셰이더 워프 패커 유닛(105)로부터 2x2쿼드(예를 들어, 140)와 함께 전달될 수 있는 추가적인 속성 정보(additional attribute informantion)(145)에 의해 지시된 것과 같이, 이러한 경우들 중 분기들을 동적으로 선택할 수 있다.
동적 분기 셰이더 워프 패커 유닛(105)에 의해 제공되는 제어에 응답하여, 하나 또는 그 이상의 셰이더 코어들(예를 들어, 110) 및/또는 레인들(125) 각각은 수평 방향 도함수, 수직 방향 도함수, 또는 둘 모두가 동일 레인(예를 들어, 165) 또는 교차 레인(예를 들어, 160)으로 연산되는지 여부를 결정할 수 있다. 이러한 결정은 2x2 쿼드(140)에 이웃한 수평 또는 수직 픽셀이 존재하는지 여부, 및/또는 동적 분기 픽셀 셰이더 워프 패커 유닛(105)에 이용 가능한 정보에 기초할 수 있다. 따라서, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 각 방향에 하나씩, 두 개의 비트 마스크들(예를 들어, 175, 180)(bitmasks)을 생성할 수 있다. 즉, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 수직 방향에 대한 비트마스크(175)를 생성할 수 있고, 수평 방향에 대한 비트마스크(180)를 생성할 수 있다. 동적 분기 픽셀 셰이더 워프 패커 유닛(105)는 이러한 결정을 위해, 프리미티브로부터 쿼드 커버리지의 정보(knowledge)를 사용할 수 있다. 비트마스크들(예를 들어, 175 180) 각각은 픽셀당 1 비트(bit)를 포함할 수 있다.
프리미티브들은 2x2 쿼드의 배수로 래스터화 될 수 있다. 하나 또는 그 이상의 2x2 쿼드들은, 하나 또는 그 이상의 셰이더 코어들(110)의 실행을 위해 송신될 수 있는, 픽셀 셰이더 워프들로 함께 패킹될 수 있다. 방향 도함수(예를 들어, 160, 165, 192) 연산은 두 개의 차원들 각각에서 적어도 두 개의 데이터 값을 사용할 수 있다. 따라서, 2x2 쿼드의 픽셀들은 방향 도함수들의 연산을 위해 사용될 수 있다. 이러한 방향 도함수는 텍스쳐의 밉 수준(mip-level)을 결정하는 것을 포함하여 다양한 방식들로 사용될 수 있는, 특정한 LOD(level-of-detail)를 연산하는데 유용할 수 있다.
일부 실시 예들에서, 2x2 쿼드들은, 2x2 쿼드의 픽셀들 사이의 공간적 인접성(spatial locality)을 이용하여, 텍스쳐 트래픽(texture traffic)을 감소시키는데 도움을 줄 수 있다. 따라서, GPU(100)는 2x2 쿼드 내부의 모든 픽셀들이 점유되지 않은 경우에도, 2x2 쿼드를 하나 또는 그 이상의 픽셀 셰이더 코어들(110)로 스케쥴링할 수 있다. 가시적이지 않으나(not visible) 방향 도함수(예를 들어, 160, 165, 192)를 연산하는 목적들로만 사용되는 픽셀들은 H 픽셀들로 지칭될 수 있다. 대부분의 프리미티브가 큰(large) 경우, 대부분의 완전히 채워진(fully-filled) 2x2 쿼드들 또한 그렇다. 다르게 말하면, 본 개시의 실시 예들은 대부분의 프리미티브들이 크지 않은 경우에 더 중요하다. 일부 실시 예들에서, “큰(large)”이라는 용어는 2x2 쿼드들의 10배수 또는 100배수의 크기를 커버하는 것으로 정의될 수 있다. 프리미티브가 클수록, 완전히 커버된(그 프리미티브에 의해) 2x2 쿼드들에 비교할 때 부분적으로 커버된 2x2 쿼드들의 부분은 더 작아진다.
그러나 프레임이 마이크로 폴리곤들에 의해 지배되는 경우(예를 들어, 프리미티브가 2x2 쿼드 픽셀들보다 적게 점유하는 경우), 2x2 쿼드에서 완전한 커버리지(full coverage)의 부족은 GPU 셰이더 코드 활용의 비효율성으로 이어질 수 있다. 이러한 비효율성은 작은 폴리곤들(그러나, 마이크로 폴리곤은 아닌)에 대해서도 해당될 수 있다. 일반적으로 삼격형인 프리미티브들이 두 개 또는 여러 개의 2x2 쿼드들을 커버하는 경우에도, 프리미티브들이 사각형이 아닌 삼격형이기 때문에, 상당한 비율의 부분 커버된 2x2 쿼드들이 여전히 존재할 수 있다. 본 개시의 실시 예들은, 작은(small) 및 마이크로(micro) 프리미티브들 모두에 대해 기술적 이점이 있다.
이러한 성능 문제를 해결하기 위해, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 픽셀을 독립적으로 스케쥴링할 수 있다. 이러한 독립적인 스케쥴링은 임의의 픽셀에, 임의의 픽셀과 X 및 Y 방향들을 따라 인접한 픽셀들의 속성들을, 동일하게 할당함으로써 구현될 수 있다. 방향 도함수(예를 들어, 160, 165, 192)는 교차 레인 동작(cross-lane operation) 대신 동일 레인 동작(same-lane operation)으로 완전히 연산될 수 있다. 속성들의 보간을 위해 무게 중심 인자들(barycentric factors)을 사용하는 아키텍쳐(architecture)에서(예를 들어, 모든 샘플에서), 이러한 연산은 2x2 쿼드들의 수평 및 수직 방향들에 있는 인접한 픽셀들의 무게 중심 인자들(185)을 복사하여 달성될 수 있다. 즉, 각 픽셀은 예를 들어: i) 자체에 대한 것 하나; ii) 수평 방향을 따라 인접한 픽셀에 대한 것 하나; iii) 수직 방향을 따라 인접한 픽셀에 대한 것 하나와 같은 3개의 무게 중심 인자들(185)의 세트들을 포함할 수 있다. 무게 중심 인자들(185)은 방향 도함수(예를 들어, 160, 165, 192)에 대한 속성들을 연산하는데 사용될 수 있다. 이 경우, 레인 마다 네 개의 추가적인 값이 저장될 수 있기 때문에, 레지스터 압박(register pressure)이 증가할 수 있다. 그러나, 무게 중심 인자들(185)의 세트(예를 들어, 세 개의 무게 중심 인자들을 포함하는) 각각에 대해, 이들 중 두 개의 무게 중심 인자를 저장하는 것만으로도, 1에서 저장된 두 개의 무게 중심 인자들(185)의 합을 빼는 연산을 수행하여 세 번째 무게 중심 인자 값이 연산될 수 있다.
방향 도함수(160, 165, 192)의 연산을 위해 사용되는 픽셀이 프리미티브의 커버리지의 일부인 경우, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 그 픽셀의 무게 중심 인자들(예를 들어, 185)을 복사할 필요가 없고, 그리고 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 방향 도함수(예를 들어, 160)를 연산하기 위해 교차 레인 동작들(cross-lane operation)을 사용할 수 있다. 방향 도함수(160, 165, 192)의 연산을 위해 사용되는 픽셀이 프리미티브의 커버리지의 일부가 아닌 경우, 동적 분기 픽셀 셰이더 워프 패커 유닛(105)은 방향 도함수(예를 들어, 165)를 연산하기 위해 단일 레인 동작들(single-lane operation)을 사용할 수 있다. 이 경우, 무게 중심 인자(185), 하나 또는 그 이상의 플래그들(114), 및/또는 2x2 쿼드(140)의 커버리지 맵(190)을 포함하는 패킹된 워프(191)가, 하나 또는 그 이상의 셰이더 코어들(110)로 송신될 수 있다. 하나 또는 그 이상의 셰이더 코어들(110)은 수평 및/또는 수직 도함수들이 동일 레인 동작으로 연산되는지 또는 교차 레인 동작으로 연산되는지 여부를 판별하기 위해 커버리지 맵(190)을 사용할 수 있다. 하나 또는 그 이상의 셰이더 코어들(110)은 이러한 방식들 중 하나를 사용하기 위해, 동적 분기를 사용할 수 있다. 대안적으로 또는 추가적으로, 셰이더 프로그램에 대한 별도의 코드 엔트리 포인트(separate code entry point)가 제공될 수 있고, 이는 동적 분기 명령 실행과 관련된 지연 시간(latency) 및 에너지를 절약하는 경우 바람직할 수 있다. 즉, 동적 분기는 커버리지 맵(190) 및/또는 다른 파라미터들에 응답하여, 다른 엔트리 포인트들로부터 프로그램이 시작되게 함으로써, 셰이더 프로그램 외부에서 “수행(performed)”될 수 있다.
무게 중심 인자들(185)을 송신하는 대신, 이하에서 더 상세하게 설명되는 바와 같이 편미분(partial differentials)(192)이 하나 또는 그 이상의 셰이더 코어들(110)로 송신될 수 있다. GPU(100)는 방향 도함수들을 저장하기 위한 메모리(116)을 포함할 수 있다. 메모리(116)은 휘발성 메모리, 비휘발성 메모리, 또는 다른 적절한 스토리지 장치일 수 있다.
GPU(100)는 하나 또는 그 이상의 텍스쳐 유닛들(195)을 포함할 수 있다. LOD의 연산은 하나 또는 그 이상의 셰이더 코어들(110), 또는 하나 또는 그 이상의 텍스쳐 유닛들(195)에서 수행될 수 있다. LOD가 하나 또는 그 이상의 셰이더 코어들(110)의 외부에서 수행되고, 하나 또는 그 이상의 텍스쳐 유닛들(195)에서 수행되는 경우, 추가적인 속성 데이터(예를 들어, 145)는 하나 또는 그 이상의 셰이더 코어들(110)로부터 하나 또는 그 이상의 텍스쳐 유닛들(195)로 제공될 수 있고, 하나 또는 그 이상의 텍스쳐 유닛들(195)에 대한 수정들이 일부 수행될 수 있다. 하나 또는 그 이상의 셰이더 코어들(110)은 발생될 수 있는 텍스쳐 동작들 및/또는 샘플 명령들을 인식할 수 있고, 그리고 하나 또는 그 이상의 텍스쳐 유닛들(195)에 제공하기 위한 다른 텍스쳐 좌표 정보에 접근할 수 있다.
GPU(100)는 하나 이상의 보간(interpolation) 유닛들(198)을 포함할 수 있다. 속성들(145)의 보간은 무게 중심 인자들(185)을 사용하여 수행되거나, 평면 방정식들(plane equations)을 사용하여 하나 또는 그 이상의 보간 유닛들(198)에 의해 수행될 수 있다. 이 경우, 하나 또는 그 이상의 보간 유닛들(198)에 대한 추가적인 수정은 H 픽셀들에 대한 속성 보간들을 수행할 수 있다. 또한, H 픽셀들의 존재 및 어떤 속성들이 각각 H 픽셀과 관련되는지를 나타내는 맵(199)은 하나 이상의 보간 유닛들(198)에 의해 사용될 수 있다.
도 2는 일부 실시 예들에 따른 2x2 쿼드(200)를 보여주는 블록도이다. 2x2 쿼드(200)은 네 개의 픽셀들(205a, 205b, 205c, 205d)을 포함할 수 있다. 픽셀들 각각은 중앙점(예를 들어, 215)를 가질 수 있다. 픽셀들 각각은 픽셀 번호(예를 들어, 210)를 가질 수 있다.
도 3은 일부 실시 예들에 따른, 부분 커버된 2x2 쿼드(115)의 프리미티브(130)를 보여주는 블록도이다. 도 4는 일부 실시 예들에 따른, 부분 커버된 다른 2x2 쿼드(120)의 다른 프리미티브(135)를 보여주는 블록도이다. 이하에서 본 발명의 실시 예들이 도 1a, 도 3, 및 도 4를 참조하여 설명된다.
2x2 쿼드(115)는 도달하는(arriving) 프리미티브들의 커버리지에 기초하여 채워질 수 있다. 프리미티브들(130, 135) 각각은 동일한 2x2 쿼드(140)의 커버리지를 제공할 수 있다. 프리미티브들(130, 135) 각각은 세 개의 꼭지점들(예를 들어, 305, 405)을 포함할 수 있다. 일반적으로, 2x2 쿼드(115) 및 2x2 쿼드(120)는 둘 다 개별적으로 하나 또는 그 이상의 셰이더 코어들(110)로 전송되어야 한다. 2x2 쿼드(115)는 프리미티브(130)로 커버된 두 개의 상부 픽셀들(upper pixels), 및 방향 도함수 연산들에 사용되는 두 개의 H 픽셀들(예를 들어, 310)을 포함하여 전송될 수 있다. 2x2 쿼드(120)는 프리미티브(135)로 커버된 하나의 하부 픽셀(lower pixel), 및 방향 도함수 연산들에 사용되는 세 개의 H 픽셀들(예를 들어, 410)을 포함하여 별도로 전송될 수 있다. 따라서, 2x2 쿼드들(115, 120)에 단지 세 개의 픽셀들만이 커버되지만, 총 8개의 스레드들(threads)이 하나 또는 그 이상의 셰이더 코어들(110)에 할당(예를 들어, 2x2 쿼드의 각 픽셀에 하나씩 할당)될 수 있다.
도 5는 일부 실시 예들에 따른, 패킹된(packed) 2x2 쿼드(140)를 보여주는 블록도이다. 본 개시의 실시 예들에 따르면, 커버리지가 다른 인접한 프리미티브(예를 들어, 130, 135)에 속하는 경우, H 픽셀들이 사용되지 않을 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 프리미티브들(130, 135)은 2x2 쿼드(140)에 존재하고, 따라서 프리미티브(130)만이, 방향 도함수 연산들을 제공하기 위한, 연관된 H 픽셀(310)과 함께 충분한 커버리지를 가질 수 있다. 그러나, 프리미티브(135)는 커버리지된 하나의 픽셀(예를 들어, 205d)만을 가지고, 2x2 쿼드(140)에 연관된 H 픽셀들을 가지지 않을 수 있다. 프리미티브(135)의 커버리지에 대응하는 픽셀(205d)에는 필요한 두 개의 H 픽셀의, 추가적인 속성 정보(예를 들어, 145) 및/또는 하나 또는 그 이상의 셰이더 코어들(110)에 의한 속성 평가(attribute evaluation) 값(worth)이 표시될(marked) 수 있다.
통상적으로, 프리미티브들(예를 들어, 130, 135) 각각은, 4개의 픽셀들이(예를 들어, 총 8개의 픽셀들에 대해) 하나 또는 그 이상의 셰이더 코어들(110)로 전송될 것을 요구한다. 본 개시의 실시 예들에 따르면, 완전한 결과의 무손실(lossless result)을 얻으며, 하나 또는 그 이상의 셰이더 코어들(110)로 8개의 픽셀들이 아닌 3개 또는 4개의 픽셀들이 전송될 수 있다.
도 6은 일부 실시 예들에 따른, 패킹된 다른 2x2 쿼드(600)를 보여주는 블록도이다. 일 실시 예에서, 동일한 2x2 쿼드(600)에 커버리지와 함께 세 개의 프리미티브들(예를 들어, 130, 135, 및 615)이 존재할 수 있고, 프리미티브들(예를 들어, 130, 135, 및 615)은 레인들에 걸쳐 수행될 방향 도함수 연산들을 위한 2x2 쿼드(600)에 충분한 픽셀들을 가지고 있지 않을 수 있다. 결과적으로, 2x2 쿼드(600)의 각 픽셀과 연관된 속성 정보(145)에 기초한, 적어도 일부의 추가 속성 연산들은 하나 또는 그 이상의 인접 픽셀들에 대해 수행될 수 있다. 비트 마스크들(예를 들어, 175, 180)(bitmasks)은 2x2 쿼드(600)의 픽셀들 각각을 나타내는데 사용될 수 있다. 이 경우, 비트 마스크들이 나타내는 픽셀들 각각과 이웃하는 픽셀들은 주어진 프리미티브(예를 들어, 130, 135, 및 615)에 대해 존재하거나 존재하지 않을 수 있다. 이 경우, 하나 또는 그 이상의 셰이더 코어들(110) 및/또는 하나 또는 그 이상의 텍스쳐 유닛들(195)이 비트 마스크들(예를 들어, 175, 180)에 기반하여, 그리고/또는 추가적인 속성 정보(예를 들어, 145)에 기반하여, 방향 도함수들이 연산될 수 있다.
따라서, 2x2 쿼드(600)에서 수평으로 인접한 커버리지를 포함하는 프리미티브(130)의 경우, 수평 방향 도함수 연산은 통상적인 기술을 사용하여 계산될 수 있고, 수직 방향 도함수는 본 개시의 실시 예를 사용하여 연산될 수 있다. 그 결과 상술된 바와 같이, 방향 도함수 연산을 위해 사용할 수 있는 동일한 프리미티브들의 이웃한 픽셀이 있는 경우, 주어진 픽셀에 대한 불필요한 추가적인 작업 없이, 조밀한 패킹(denser packing)이 구현될 수 있다. 추가적인 작업의 오버로드(overloading)는 커버된 픽셀을 사용할 수 없거나, 또는 헬퍼 픽셀(helper pixel)을 사용할 수 없는 경우에만 존재할 수 있다. 이 중 후자의 경우, 동일한 2x2 쿼드의 다른 프리미티브들에 의해 특정한 픽셀 포지션(pixel position)이 커버리지로 점유되고 있기 때문일 수 있다.
통상적으로, 프리미티브들(예를 들어, 130, 135, 및 615) 각각은, 4개의 픽셀들이(예를 들어, 총 12개의 픽셀들에 대해) 하나 또는 그 이상의 셰이더 코어들(110)로 전송될 것을 요구한다. 본 개시의 실시 예들에 따르면, 완전한 결과의 무손실을 얻으며, 하나 또는 그 이상의 셰이더 코어들(110)로 12개의 픽셀들이 아닌 4개의 픽셀들이 전송될 수 있다.
GPU의 일부 API들(application programming interfaces)은, 완전한 프리미티브 커버리지(complete primitive coverage)를 포함하지 않는 쿼드들에 존재할 수 있는 H 픽셀들에 대해, 수행되어야 할 동작 또는 수행되지 않아야 할 동작들에 대한 특정할 규칙을 가질 수 있다. 특히, 예를 들어, API들은 H 픽셀들이 읽기, 쓰기, 또는 메모리로의 원자 액세스(atomic access)와 같은 부수 효과(side-effects)를 수행하지 않을 것을 명시할 수 있다. API들은 H 픽셀들이 렌더링 타겟들(rendor targets)에 데이터를 쓰지 않도록 지정할 수 있다. 이는 일부 API들에서 “첨부(attachments)”로 지칭될 수 있다. 본 개시의 일부 실시 예들에 따르면, 이러한 API 제한들은 문제가 되지 않고, 수직 및/또는 수평 H 픽셀이 없거나, 또는 실제 픽셀의 존재가 없는 쿼드의 픽셀들에 대해 필요한 추가적인 코드에 관한 컴파일러의 부담을 완화시켜 줄 수 있기 때문에, 오히려 편리할 수 있다.
속성들에 대한 무게 중심 평가들이 제공될 수 있다. 본 개시의 실시 예들이 사용 되는지 여부와 관계 없이, 프로세싱을 위해 하나 또는 그 이상의 셰이더 코어들(110)로 제공된 픽셀 각각에 대해, 프론트-엔드 변환(front-end transformation) 이후, 어플리케이션 제공 속성들(application-provided attributes)이 픽셀들의 위치로 보간될 수 있다. 이것은 무게중심 좌표 쌍을 보간하고, 그것을 픽셀의 위치들 각각에, 프리미티브들의 속성들 각각을 평가하기 위한 기초로서 그것을 사용하는 형태를 가질 수 있다. 일부 실시 예들에서, 이러한 속성들의 평가는 방향 도함수 텍스쳐 입력으로서 제공하기 위해, 픽셀의 속성들의 평가, 및 하나 또는 두 개의 직접 인접한 픽셀들의 속성들의 평가를 포함하도록 증가될 수 있다.
이하에서 본 발명의 실시 예들을 설명하기 위해, 도 1a 내지 도 7이 참조된다.
무게 중심 인자들(185)을 송신하는 대신, 방향 도함수들(예를 들어, 160, 165, 192)을 연산하는데 사용될 수 있는, 편미분들(192)이 하나 또는 그 이상의 셰이더 코어들(110)로 송신될 수 있다. 예를 들어, 방향 도함수들(예를 들어, 160, 165, 192)은 아래와 같이 결정될 수 있다.
Figure pat00001
Figure pat00002
,
Figure pat00003
Figure pat00004
,
Figure pat00005
Figure pat00006
는 스크린 공간(screen space)의 프리미티브의 세 개의 꼭지점들(예를 들어, 305, 405 등)일 수 있다.
Figure pat00007
는 프리미티브(예를 들어, 130, 135)의 총 면적일 수 있다.
Figure pat00008
,
Figure pat00009
,
Figure pat00010
Figure pat00011
를 만족하는 프리미티브(예를 들어, 130, 135) 내부의 점의 무게 중심 인자들(185)이라고 가정한다.
하나 또는 그 이상의 셰이더 코어들(110) 및/또는 하나 또는 그 이상의 텍스쳐 유닛들(195)은 이하의 수학식 1의 관계식들을 이용하여, 이웃한 수직 및 수평 픽셀의 무게 중심 인자들(185)을 연산할 수 있다.
Figure pat00012
Figure pat00013
Figure pat00014
Figure pat00015
Figure pat00016
Figure pat00017
Figure pat00018
Figure pat00019
편미분들(192)은 하나 또는 그 이상의 셰이더 코어들(110)로 제공될 수 있고, 그리고 하나 또는 그 이상의 셰이더 코어들(110), 및/또는 하나 또는 그 이상의 텍스쳐 유닛들(195)은 방향 도함수(예를 들어, 160, 165, 192)를 연산하기 위해, 이웃한 픽셀들의 무게 중심 인자들(185)을 연산할 수 있다.
또는, 편미분들(192)은 방향 도함수(예를 들어, 160, 165, 192) 연산에 직접 사용될 수 있다. 예를 들어, 하나의 값에 대한 연산이 이하에 나타나고, 이하에서 설명되는 것과 동일한 방식이 모든 속성들에 대하여 적용될 수 있다. 이하의 수학식 2의 유도 결과에서 명백하게 나타나는 것과 같이,
Figure pat00020
Figure pat00021
가 이미 연산 되었다고 가정하면, 방향 도함수(예를 들어, 160, 165, 192)는 두 번의 곱 연산들 및 하나의 합 연산을 통해 연산될 수 있다.
Figure pat00022
Figure pat00023
Figure pat00024
Figure pat00025
무게 중심 인자들(185) 및 편미분들(192)을 송신하는 것은, 레지스터 측면에서(예를 들어, 네 개의 레지스터들에서) 동일한 비용(cost)이 발생할 수 있다. 전자의 경우, 방향 도함수(예를 들어, 160, 165, 192)의 연산은,
Figure pat00026
Figure pat00027
가 이미 연산 되었다고 가정하면, 두 번의 빼기 연산들, 두 번의 곱 연산들, 및 한 번의 합 연산을 요구할 수 있다. 후자의 경우, 부분 차분 값들(192)이 이미 이용 가능한 상태이기 때문에, 두 번의 곱 연산들 및 한 번의 합 연산만을 요구할 수 있다.
도 7은 (x,y) 좌표의 픽셀에 대해 표현된, 이웃한 픽셀들의 무게 중심 인자 계산과 관련된 다이어그램이다. 연산은 이하의 수학식 3의 등식들로 표현될 수 있다.
Figure pat00028
Figure pat00029
일부 실시 예들에서, 이하의 표 1은 (x,y) 좌표의 픽셀을 기준으로 표현된, 이웃한 픽셀들의 무게 중심 인자 연산을 보여준다.
Figure pat00030
Figure pat00031
를 보간이 필요한 속성들이라고 가정한다. 이러한 속성들을 일부 픽셀 위치
Figure pat00032
에서 보간하기 위해, 세 꼭지점들 대해 각각
Figure pat00033
,
Figure pat00034
,
Figure pat00035
로 주어진 속성들의 값 각각이, 이하의 수학식 4와 같이 픽셀에 대해 무게 중심 인자와 조합될 수 있다.
Figure pat00036
Figure pat00037
수학식 4의 수식을 표 1의 식들과 결합하면, 이하의 수학식 5와 같이, 이웃한 픽셀들의 속성 연산이 표현될 수 있다.
Figure pat00038
Figure pat00039
Figure pat00040
Figure pat00041
일부 실시 예들에서, 이하의 표 2는 삼각형(즉, 프리미티브)의 세 모서리들의 값들이 주어진 경우의 방향 도함수 연산을 보여준다.
Figure pat00042
Figure pat00043
,
Figure pat00044
,
Figure pat00045
,
Figure pat00046
값들은, GPU의 BCI(barycentric interpolation) 유닛에 의해 이용 가능하게 될 수 있다. 이러한 기존 데이터(pre-existing data)는 벡터 레지스터 파일(vector register file)로 복사될 수 있고, 상술된 연산들의 비용(cost)을 네 번의 곱 연산들 및 네 번의 합 연산들(또는 빼기 연산들)로 감소시킬 수 있다.
상술된 네 개의 값들이 이용 불가능하더라도, BCI는
Figure pat00047
의 값을 레지스터에 복사할 수 있으므로, 작업들의 수가 네 번의 곱 연산들 및 여덟 번의 합 연산들(또는 빼기 연산들)로 감소될 수 있다. 두 가지 대안들 모두, 추가적인 값들을 저장하기 위한 추가적인 네 개의 레지스터들의 할당을 포함할 수 있다.
다수의 작은 삼각형들이 있는 경우, 본 개시의 실시 예들의 구현에 기반하여, 상당한 성능의 개선이 달성될 수 있다. 마이크로 폴리곤들에 대해(예를 들어, 단일한 샘플만 커버하는 폴리곤들), 본 개시의 실시 예들은 셰이더 레이트(shader rate)를 프리미티브 셋업 레이트(primitive setup rate)와 더 가깝게 할 수 있다. 본 개시의 실시 예들은 GPU 파이프라인(GPU pipeline)의 대규모의 설계 변경을 요구하지 않는다. 픽셀 패킹 로직(pixel packing logic)에서 일부 변경이 이루어질 수 있고, 그리고 추가적인 소프트웨어-액세스 가능한 데이터(software-accessible data)가 픽셀 셰이더에 대한 셰이더 코어로 제공될 수 있다. 본 개시에 따르면 완전한 무손실 기술이 제공될 수 있다. 종래의 기술들과 달리, 본 개시의 실시 예들에 따르면, 시각적 또는 수치적 결과들에 변경이 없으므로, 이러한 기술들을 적용할 때 휴리스틱(heuristic)을 요구하지 않고도 심미적으로 허용(aesthetically acceptable)될 수 있다. 또한, 본 개시의 실시 예들은 어플리케이션들에 대해 완전히 투명(transparent)할 수 있다. 즉, GPU(100)에서 실행되는 어플리케이션들은 본 개시의 실시 예들의 이점을 얻기 위해 추가적으로 변경될 필요가 없다. 복수의 프리미티브들의 커버리지가 동일한 쿼드에 패킹된 경우, 주어진 워프에 대한 총 지연(latency)이 증가할 수 있으나, 이는 다른 이점에 의해 상쇄된다.
명시적 스레드들(explicit threads)을 사용한 H 픽셀들의 연산이 가장 잘 계산되는 분기점이 존재할 수 있다. 본 개시의 실시 예들을 무효하게 만드는 영향을 줄 수 있는 몇몇 요인들이 존재한다. 일부 요인들은 이하에서 상세하게 설명된다. 먼저 첫 번째로, 속성들을 보간하기 위해 사용되는 추가적인 명령들의 합은, 하나 또는 그 이상의 셰이더 코어들(110)에 의해 실행되는 명령들의 총 수의 임계 값보다 크다. 기본적으로, 추가적인 속성들을 보간하는 비용은 상대적으로 높은 편이므로, 더 많은 스레드들을 패킹하는 것은 전체적인 성능에 도움이 되지 않을 수 있다. 두 번째로, 방향 도함수들에 필요한 텍스쳐 액세스들의 수는 특정한 임계 값보다 많을 수 있다. 이러한 경우, 본 개시의 실시 예들을 적용하지 않고, 그 대신 종래 기술들을 사용하여 연산들을 수행하는 것이 유리할 수 있다. 그러나, 최근 트렌드는, 더 복잡한 픽셀 셰이더들을 지향하고, 더 많은 스레드당 연산들(calculations per thread)을 요구한다. 컴파일러는 정적으로 셰이더 프로그램을 분석하여, 복수의 프리미티브들을 쿼드로 패킹할 가치가 있는지 판별할 수 있고, 가치가 있다면 플래그 또는 다른 상태 변수를 설정하여 본 개시의 실시 예들을 사용할 수 있다. 즉, 본 개시에 따른 기술의 오버헤드(overhead)가 기술의 이점들(benefits)을 초과하는 경우, 본 개시에 따른 기술을 적용하지 않는 것이 유리할 수 있다. 비생산적인 작업을 방지하기 위해, 픽셀은 사용되어야 하는 레인들 및 사용되지 않아야 하는 레인들을 나타내는데 사용될 수 있는, H 픽셀로 표시될 수 있다.
도 8은 일부 실시 예들에 따른, 작은 프리미티브들에 대한 셰이더 점유를 수행하기 위한 방법을 보여주는 흐름도(800)이다. 805 단계에서, 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드와 연관된 제1 프리미티브를 수신할 수 있고, 그리고 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신할 수 있다. 810 단계에서, 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드가 비-중첩 커버리지(non-overlapping coverage)를 포함하는지 판별할 수 있다. 815 단계에서, 셰이더 워프 패커 유닛은, 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드가 공간적으로 연결되지 않더라도, 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹할 수 있다. 이 경우, “연결되지 않는다”는 용어는 비-중첩(non-overlapping)을 의미할 수 있다. 820 단계에서, 셰이더 워프 패커 유닛은 패킹된 쿼드를 하나 또는 그 이상의 셰이더 코어들로 전송할 수 있다.
도 9는 일부 실시 예들에 따른, 작은 프리미티브들에 대한 셰이더 점유를 수행하기 위한 다른 방법을 보여주는 흐름도(900)이다. 905 단계에서, 셰이더 워프 패커 유닛, 또는 하나 또는 그 이상의 셰이더 코어들은, 적어도 하나의 런타임 플래그(run-time flag)에 기반하여, 제1 동작 모드 또는 제2 동작 모드 중 하나를 선택할 수 있다. 910 단계에서, 셰이더 워프 패커 유닛, 또는 하나 또는 그 이상의 셰이더 코어들은, 적어도 하나의 패킹된 쿼드의 픽셀에 연관된 속성 정보를 저장할 수 있다. 915 단계에서, 제1 동작 모드에서, 저장된 속성 정보에 기반하여, 방향 도함수가 단일 레인 동작(single-lane operation)으로 연산될 수 있다. 920 단계에서, 제2 동작 모드에서, 방향 도함수가 저장된 속성 정보에 기반하여, 교차 레인 동작(cross-lane operation)으로 연산될 수 있다.
본 발명의 기술 분야의 통상의 기술자들은, 본 발명의 기술적 사상의 핵심을 구현함에 있어서, 도 8 및 도 9를 참조하여 설명된 단계들이 설명된 순서대로 수행되지 않을 수 있고, 추가적인 단계들이 더 포함될 수 있음을 이해할 수 있을 것이다.
일부 실시 예들에서, GPU는 하나 또는 그 이상의 셰이더 코어들을 포함할 수 있다. GPU는, 제1 부분 커버된 쿼드와 연관된 제1 프리미티브, 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신하도록 구현된 셰이더 워프 패커 유닛을 포함할 수 있다. 일부 실시 예들에서, 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드가 비-중첩 커버리지(non-overlapping coverage)를 포함하는지 판별하도록 구현될 수 있다. 일부 실시 예들에서, 셰이더 워프 패커 유닛은 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹하도록 구현될 수 있다. 일부 실시 예들에서, 셰이더 워프 패커 유닛은 하나 또는 그 이상의 셰이더 코어들로 패킹된 쿼드들을 송신하도록 구현될 수 있다. 일부 실시 예들에서, 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드는 서로에 대해 공간적으로 연결되지 않을 수 있다. 이 경우, “연결되지 않는다”는 용어는 비-중첩(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) 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가, 하나 또는 그 이상의 편미분들에 기반하여, 방향 도함수를 연산하도록 구현될 수 있다.
일부 실시 예들에서, i) 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가, X 방향에 대해,
Figure pat00048
에 따라 제1 방향 도함수를 연산하도록 구현되고; 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가, Y 방향에 대해,
Figure pat00049
에 따라 제2 방향 도함수를 연산하도록 구현될 수 있다. 일부 실시 예들에서,
Figure pat00050
는 제1 프리미티브 또는 제2 프리미티브 중 적어도 하나의 면적일 수 있다. 일부 실시 예들에서, x0, y0, x1, y1, x2, 및 y2 는 제1 프리미티브 또는 제2 프리미티브 중 적어도 하나의 꼭지점들의 좌표일 수 있다. 일부 실시 예들에서, t0, t1, 및 t2는 (x0, y0), (x1, y1), 및 (x2,y2) 세 꼭지점들 각각의 “t” 속성의 값일 수 있다. 래스터라이저 및 패커에 도달하는(arriving) 프리미티브들은, 각 프리미티브에 걸쳐 보간될 0개 또는 그 이상의 속성들을 포함할 수 있다. “s” 및 “t” 값은 이러한 두 가지 프리미티브 속성들을 나타낼 수 있고, (s, t)로 표현되어, 프리미티브의 세 꼭지점들 각각의 (s, t) 값들로부터 보간된, 특정 픽셀에서의 텍스쳐 좌표를 나타낼 수 있다. GPU(100)는 제1 방향 도함수 및 제2 방향 도함수를 저장하도록 구현된 메모리를 포함할 수 있다.
일부 실시 예들은, GPU를 사용하여 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법을 포함할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 셰이더 워프 패커 유닛에 의해, 제1 부분 커버된 쿼드와 연관된 제1 프리미티브 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신하는 단계를 포함할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 셰이더 워프 패커 유닛에 의해, 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드가 비-중첩 커버리지(non-overlapping coverage)를 포함하는지 판별하는 단계를 포함할 수 있다. 이 경우, 비-중첩 커버리지 퀄리티는 요구되지 않을 수 있다. 즉, 제1 부분 커버된 쿼드 및 제2 부분 커버된 쿼드는, 픽셀들이 하나 또는 그 이상의 셰이더 코어들에서 처리되는 중 추가적인 데이터의 버퍼링(buffering)이 발생하더라도, 중첩 커버리지를 포함할 수 있다. 본 개시의 일 실시 예에 따른 방법은, 셰이더 워프 패커 유닛에 의해, 제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) 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나에 의해, X 방향에 대해
Figure pat00051
식에 따라 제1 방향 도함수를 연산하는 단계; 및 i) 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나에 의해, Y 방향에 대해
Figure pat00052
식에 따라 제2 방향 도함수를 연산하는 단계를 포함할 수 있다. 일부 실시 예들에서,
Figure pat00053
는 제1 프리미티브 또는 제2 프리미티브 중 적어도 하나의 총 면적일 수 있다. 일부 실시 예들에서, x0, y0, x1, y1, x2, 및 y2 는 제1 프리미티브 또는 제2 프리미티브 중 적어도 하나의 꼭지점들의 좌표일 수 있다.
본 개시의 실시 예들에 관련하여 설명된 방법 또는 알고리즘의 블록 또는 단계, 및 기능들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이 둘의 조합으로 직접 구현될 수 있다. 모듈들은 하드웨어, 소프트웨어, 펌웨어, 또는 그것들의 어떠한 조합도 포함할 수 있다. 소프트웨어로 구현되는 경우, 기능들은 하나 이상의 명령들, 또는 유형(tangible)으로 비 일시적 컴퓨터 판독 가능 매체(non-transitory computer-readable medium)의 코드로 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 본 기술 분야에서 알려진 어떠한 형태의 스토리지 매체에도 포함될 수 있다.
이하의 설명들은 본 발명의 기술적 사상이 구현될 수 있는, 적절한 기계 또는 장치들에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 일반적으로, 기계 또는 장치들은 프로세서들, 메모리, 또는 다른 상태의 저장 매체(예를 들어, RAM, ROM), 스토리지 장치들, 비디오 인터페이스, 및 입출력 인터페이스 포트들이 연결된 시스템 버스를 포함한다. 기계 또는 장치들은, 키보드, 마우스 등의 통상적인 입력 장치들은 물론, 다른 장치에 의해 수신된 지시, 가상 현실(virtual reality) 환경과의 상호작용, 생체 피드백(biometric feedback), 또는 다른 입력 신호에 의해, 적어도 부분적으로 제어될 수 있다. 본 명세서에서 사용되는 바와 같이, “장치” 또는 “기계”로 사용되는 용어는, 단일한 장치, 가상 장치, 또는 통신으로 연결되는 장치들의 시스템, 가상 장치들, 또는 함께 동작하는 장치들을 광범위하게 포함하는 것으로 의도된다. 예시적인 기계 또는 장치들로는, 개인용 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 스마트 폰, 전화기, 태블릿 등의 컴퓨팅 장치들은 물론, 개인 또는 대중 교통 수단(예를 들어, 자동차, 기차, 택시 등과 같은)과 같은 운송 수단이 포함될 수 있다.
기계 또는 장치들은 프로그램 가능한 또는 프로그램 불가능한 논리 장치들 또는 어레이들, ASIC들, 임베디드 컴퓨터들, 카드들, 및 이와 유사한 것들과 같은 임베디드 컨트롤러들을 포함할 수 있다. 기계 또는 장치들은 예를 들어, 네트워크 인터페이스, 모뎀, 또는 다른 통신적인 연결을 통해, 하나 이상의 원격 장치들에 대한 하나 이상의 연결들을 활용할 수 있다. 장치들은 인트라넷, 인터넷, LAN(local area network), WAN(wide area network) 등과 같은 물리적 및/또는 논리적 네트워크를 통해 상호 연결될 수 있다. 본 개시의 기술 분야의 통상의 기술자는, 네트워크 통신이 RF(radio frequency), 위성, 마이크로파, IEEE(Institute of Electrical and Electronics Engineers) 545.11, 블루투스, 광학, 적외선, 케이블, 레이저 등을 포함하여, 다양한 유선 및/또는 무선 단거리 또는 장거리 캐리어들 및 프로토콜을 활용할 수 있을 것이다.
본 개시의 실시 예들은, 기능들, 절차들, 데이터 구조들, 어플리케이션 프로그램들 등을 포함하는 연관된 데이터를 참조하거나 또는 이들의 결합을 통해 설명될 수 있는데, 이는 장치들이 액세스 되는 경우, 장치들이 작업을 수행하거나 또는 추상 데이터 유형(abstract data type) 또는 로우-레벨 하드웨어 컨텍스트들(low-level hardware contexts)을 정의하게 한다. 연관된 데이터는 예를 들어, 휘발성 메모리, 비휘발성 메모리, 또는 다른 스토리지 장치들 및 그것들과 관련된, 하드 드라이브, 플로피 디스크, 광학 스토리지 장치, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 등을 포함하는 스토리지 매체에 저장될 수 있다. 연관된 데이터는 패킷, 직렬 데이터, 병렬 데이터, 전파된 신호 등의 형태로, 물리적 및/또는 논리적 네트워크를 포함한 전송 환경을 통해 전송될 수 있고, 압축 또는 암호화된 형식으로 사용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있고, 장치의 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
설명된 실시 예들을 참조하여 본 개시의 기술적 원리가 설명되었으나, 본 개시의 실시 예들은 기술적 사상의 핵심에서 벗어나지 않고, 배열 등이 수정될 수 있고, 그리고 다양한 실시 예들이 필요한 방식으로 결합될 수 있음이 인식될 것이다. 상술된 내용은 특정한 실시 예들에 집중하여 설명되었으나, 다른 구성 또한 고려될 수 있다. 특히, 본 개시에서는 “본 개시의 일 실시 예에 따른” 또는 그와 유사한 표현들이 사용되었으나, 이러한 문구들은 일반적으로 실시 예의 가능성을 나타내기 위한 것일 뿐, 본 개시의 기술적 사상을 특정한 실시 예의 구성으로 제한하고자 하려는 의도로 사용되지 않는다. 본 개시에서 사용되는 바와 같이, 이러한 용어들은 다른 실시 예들로 결합할 수 있는 동일하거나 다른 실시 예들을 지칭할 수 있다.
본 개시의 실시 예들은, 하나 이상의 프로세서들에 의해 실행될 수 있는 명령들을 포함하는 비 일시적 장치 읽기 가능 매체(non-transitory machine-readable medium)를 포함할 수 있고, 명령들은 본 개시에서 설명된 기술적 사상들의 구성 요소들을 수행하기 위한 명령들을 포함할 수 있다.
앞서 설명된 실시 예들은 본 발명의 기술적 사상을 제한하는 것으로 이해되어서는 안 된다. 몇몇 실시 예들이 설명되었으나, 본 개시의 기술 분야의 통상의 기술자들은 본 개시의 새로운 교시 및 이점들로부터 실질적으로 벗어나지 않고, 이러한 실시 예들에 대한 다양한 수정들이 가능하다는 것을 쉽게 이해할 수 있을 것이다. 따라서, 그러한 다양한 수정들은 본 개시의 청구범위들에 정의된 바와 같이, 본 개시의 기술적 사상의 범위에 포함되는 것으로 의도된다.
100: GPU
105: 동적 분기 셰이더 워프 패커 유닛
108: 래스터라이저
110: 셰이더 코어
114: 플래그
116: 메모리
115, 120: 쿼드
130, 135: 프리미티브
185: 무게 중심 인자
195: 텍스쳐 유닛
198: 보간 유닛

Claims (10)

  1. 하나 또는 그 이상의 셰이더 코어들; 및
    셰이더 워프 패커 유닛을 포함하고,
    상기 셰이더 워프 패커 유닛은:
    제1 부분 커버된 쿼드와 연관된 제1 프리미티브, 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신하고;
    상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드가 비-중첩 커버리지(non-overlapping coverage)를 포함하는지 판별하고;
    상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹하고; 그리고
    상기 패킹된 쿼드를 상기 하나 또는 그 이상의 셰이더 코어들로 송신하도록 구성되고,
    상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드는 공간적으로 서로 연결되지 않는 GPU(graphics processing unit).
  2. 제 1 항에 있어서,
    상기 하나 또는 그 이상의 셰이더 코어들은,
    상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 개별적으로 처리하는 상기 하나 또는 그 이상의 셰이더 코어들과 관련된 정보의 손실 없이, 상기 패킹된 쿼드를 수신 및 처리하도록 구성된 GPU.
  3. 제 1 항에 있어서,
    상기 셰이더 워프 패커 유닛은,
    단일 레인 동작을 위해, 상기 패킹된 쿼드로부터 단일 레인으로 0개 또는 그 이상의 픽셀들을 할당하도록 구성된 GPU.
  4. 제 3 항에 있어서,
    상기 하나 또는 그 이상의 셰이더 코어들은,
    상기 단일 레인 동작으로 방향 도함수를 연산하도록 구성된 GPU.
  5. 제 1 항에 있어서,
    상기 하나 또는 그 이상의 셰이더 코어들은,
    교차 레인 동작으로 방향 도함수를 연산하도록 구성된 GPU.
  6. 제 3 항에 있어서,
    하나 또는 그 이상의 텍스쳐 유닛들;
    i) 상기 하나 또는 그 이상의 텍스쳐 유닛들, 또는 ii) 상기 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가 상기 단일 레인 동작으로 상기 방향 도함수를 연산하도록 구성된 제1 동작 모드; 및
    i) 상기 하나 또는 그 이상의 텍스쳐 유닛들, 또는 ii) 상기 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가 교차 레인 동작으로 제2 방향 도함수를 연산하도록 구성된 제2 동작 모드를 더 포함하는 GPU.
  7. 제 1 항에 있어서,
    하나 또는 그 이상의 텍스쳐 유닛들을 더 포함하고,
    i) 상기 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 상기 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가, 하나 또는 그 이상의 무게 중심 인자들에 기초하여, 방향 도함수를 연산하도록 구성된 GPU.
  8. 제 1 항에 있어서,
    하나 또는 그 이상의 텍스쳐 유닛들을 더 포함하고,
    i) 상기 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 상기 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가, 하나 또는 그 이상의 편미분들에 기반하여, 방향 도함수를 연산하도록 구성된 GPU.
  9. 제 1 항에 있어서,
    하나 또는 그 이상의 텍스쳐 유닛들을 더 포함하고,
    i) 상기 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 상기 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가,
    X 방향에 대해:
    Figure pat00054
    에 따라 제1 방향 도함수를 연산하도록 구성되고; 그리고
    i) 상기 하나 또는 그 이상의 텍스쳐 유닛들 또는 ii) 상기 하나 또는 그 이상의 셰이더 코어들 중 적어도 하나가,
    Y 방향에 대해:
    Figure pat00055
    에 따라 제2 방향 도함수를 연산하도록 구성되고,
    Figure pat00056
    는 상기 제1 프리미티브 또는 상기 제2 프리미티브 중 적어도 하나의 총 면적이고;
    x0, y0, x1, y1, x2, 및 y2는 상기 제1 프리미티브 또는 상기 제2 프리미티브 중 적어도 하나의 꼭지점들의 좌표들이고; 그리고
    t0, t1, 및 t2는 상기 꼭지점들과 연관된 값들인 GPU.
  10. GPU(graphics processing unit)를 사용하여 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법에 있어서,
    셰이더 워프 패커 유닛에 의해, 제1 부분 커버된 쿼드와 연관된 제1 프리미티브 및 제2 부분 커버된 쿼드와 연관된 제2 프리미티브를 수신하는 단계;
    상기 셰이더 워프 패커 유닛에 의해, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드가 비-중첩 커버리지(non-overlapping coverage)를 포함하는지 판별하는 단계;
    상기 셰이더 워프 패커 유닛에 의해, 상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드를 패킹된 쿼드로 패킹하는 단계; 및
    상기 셰이더 워프 패커 유닛에 의해, 상기 패킹된 쿼드를 하나 또는 그 이상의 셰이더 코어들로 송신하는 단계를 포함하고,
    상기 제1 부분 커버된 쿼드 및 상기 제2 부분 커버된 쿼드는 공간적으로 서로 연결되지 않는 방법.
KR1020210090072A 2020-08-03 2021-07-09 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법 KR20220016774A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063060653P 2020-08-03 2020-08-03
US63/060,653 2020-08-03
US17/168,168 2021-02-04
US17/168,168 US11748933B2 (en) 2020-08-03 2021-02-04 Method for performing shader occupancy for small primitives

Publications (1)

Publication Number Publication Date
KR20220016774A true KR20220016774A (ko) 2022-02-10

Family

ID=80004462

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210090072A KR20220016774A (ko) 2020-08-03 2021-07-09 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법

Country Status (3)

Country Link
US (1) US11748933B2 (ko)
KR (1) KR20220016774A (ko)
CN (1) CN114092627A (ko)

Families Citing this family (1)

* 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

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7502035B1 (en) 2005-12-19 2009-03-10 Nvidia Corporation Apparatus, system, and method for multi-sample pixel coalescing
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US9972124B2 (en) 2014-06-27 2018-05-15 Samsung Electronics Co., Ltd. Elimination of minimal use threads via quad merging
US9721376B2 (en) 2014-06-27 2017-08-01 Samsung Electronics Co., Ltd. Elimination of minimal use threads via quad merging
GB2540937B (en) * 2015-07-30 2019-04-03 Advanced Risc Mach Ltd Graphics processing systems
US9779542B2 (en) 2015-09-25 2017-10-03 Intel Corporation Apparatus and method for implementing flexible finite differences in a graphics processor
US10055806B2 (en) 2015-10-27 2018-08-21 Nvidia Corporation Techniques for maintaining atomicity and ordering for pixel shader operations
US10262455B2 (en) 2015-12-04 2019-04-16 Intel Corporation Merging fragments for coarse pixel shading using a weighted average of the attributes of triangles
GB2560306B (en) 2017-03-01 2020-07-08 Sony Interactive Entertainment Inc Image processing
EP3596703A4 (en) 2017-03-17 2020-01-22 Magic Leap, Inc. VIRTUAL CONTENT DEFORMATION MIXED REALITY SYSTEM AND VIRTUAL CONTENT GENERATION METHOD USING THE SAME
US10275851B1 (en) 2017-04-25 2019-04-30 EMC IP Holding Company LLC Checkpointing for GPU-as-a-service in cloud computing environment
US10657699B1 (en) 2018-12-08 2020-05-19 Arm Limited Performing texturing operations for sets of plural execution threads in graphics processing systems
US11010954B2 (en) 2018-12-11 2021-05-18 Samsung Electronics Co., Ltd. Efficient redundant coverage discard mechanism to reduce pixel shader work in a tile-based graphics rendering pipeline
WO2020191920A1 (en) 2019-03-25 2020-10-01 Huawei Technologies Co., Ltd. Storing complex data in warp gprs

Also Published As

Publication number Publication date
US20220036631A1 (en) 2022-02-03
CN114092627A (zh) 2022-02-25
US11748933B2 (en) 2023-09-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
US10229529B2 (en) System, method and computer program product for implementing anti-aliasing operations using a programmable sample pattern table
JP6309620B2 (ja) 頂点シェーダのフロント・エンドとしてコンピュート・シェーダを使用すること
US10049486B2 (en) Sparse rasterization
JP7266021B2 (ja) 可変レートシェーディング
CN106575430B (zh) 用于像素哈希的方法和装置
US9224227B2 (en) Tile shader for screen space, a method of rendering and a graphics processing unit employing the tile shader
US9082204B2 (en) Storage structures for stitching primitives in graphics processing
US9558573B2 (en) Optimizing triangle topology for path rendering
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
KR20120034293A (ko) 정점 처리 방법 및 장치
JP2015515059A (ja) シーンにおける不透明度レベルを推定する方法とそれに対応する装置
WO2014035682A1 (en) Surface tessselation by symmetric edge splitting
US10192348B2 (en) Method and apparatus for processing texture
KR20220016774A (ko) 작은 프리미티브들에 대한 셰이더 점유를 수행하는 방법
US11030791B2 (en) Centroid selection for variable rate shading
US11798218B2 (en) Methods and apparatus for pixel packing
EP4094230A1 (en) Hybrid binning
KR20220112710A (ko) 픽셀 패킹 관련 애플리케이션 데이터를 위한 방법 및 장치
US20240169641A1 (en) Vertex index routing through culling shader for two level primitive batch binning
JP6801001B2 (ja) 画像処理装置、画像処理方法およびプログラム
WO2022211966A1 (en) Post-depth visibility collection with two level binning