KR20220157401A - 부분적으로 상주하는 텍스처에 대한 샘플링 - Google Patents

부분적으로 상주하는 텍스처에 대한 샘플링 Download PDF

Info

Publication number
KR20220157401A
KR20220157401A KR1020227033187A KR20227033187A KR20220157401A KR 20220157401 A KR20220157401 A KR 20220157401A KR 1020227033187 A KR1020227033187 A KR 1020227033187A KR 20227033187 A KR20227033187 A KR 20227033187A KR 20220157401 A KR20220157401 A KR 20220157401A
Authority
KR
South Korea
Prior art keywords
mipmap
descriptor
memory
residency map
texture
Prior art date
Application number
KR1020227033187A
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 KR20220157401A publication Critical patent/KR20220157401A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • 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
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • 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
    • G06T7/00Image analysis
    • G06T7/40Analysis of texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail

Landscapes

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

Abstract

부분적으로 상주하는 텍스처 데이터를 샘플링하는 디바이스, 시스템, 및 방법. 레지던시 맵 디스크립터를 포함하는 명령어가 수신된다. 상기 명령어가 실행되어 레지던시 맵 디스크립터에 기반하여서 메모리에 저장된 밉맵(mipmap)으로부터 부분적으로 상주하는 텍스처 데이터(partially resident texture data)를 검색한다. 레지던시 맵 디스크립터는 레지던시 맵을 포함한다.

Description

부분적으로 상주하는 텍스처에 대한 샘플링
관련 출원의 교차 참조
본 출원은 2020년 3월 25일자로 출원된 미국 임시 특허 출원 제62/994,441호, 및 2020년 10월 29일자로 출원된 미국 정규 특허 출원 제17/084,520호의 이익을 주장하며, 이들은 본원에 완전히 기재된 것처럼 인용되어 포함된다.
텍스처 맵핑(Texture mapping)은 컴퓨터 생성 그래픽 또는 3차원(3D) 모델에 세부 사항, 표면 텍스처, 색상, 또는 기타 속성을 추가하기 위한 방법이다. 컴퓨터 생성 그래픽을 렌더링할 때, 그래픽의 각각의 기하 원시 객체(geometric primitive)에 하나 이상의 텍스처가 적용(또는 맵핑)될 수 있다. 이러한 텍스처는, 예를 들어, 각각의 기하 원시 객체에 맵핑될 색상, 휘도 및/또는 기타 데이터를 포함한다.
밉맵(Mipmap)은 미리 계산되고 최적화된, 다양한 해상도의 텍스처 이미지들의 집합이다. 일반적으로, 그래픽 장면을 렌더링하기 전에, 장면에 대한 모든 텍스처 및 연관된 밉맵이 비디오 메모리에 상주 또는 부분적으로 상주해야 한다. 비디오 메모리에 부분적으로 상주하는 텍스처는 부분적으로 상주하는 텍스처(PRT: partially resident texture)라고 지칭될 수 있다.
첨부된 도면과 함께 예로서 주어진 하기 설명으로부터 보다 상세한 이해가 있을 수 있다.
도 1은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스의 블록도이다.
도 2는, 일례에 따른, 도 1의 디바이스의 세부사항을 도시한다.
도 3은 도 2에 예시된 그래픽 처리 파이프라인의 추가적인 세부사항을 도시하는 블록도이다.
도 4는 일 예에 따른 부분적으로 상주하는 텍스처를 샘플링하기 위한 연산을 예시한다.
도 5는 예시적인 세부 수준(LOD: level of detail) 인덱스 테이블을 예시하는 블록도이다.
도 6은 예시적인 제1 텍스처 샘플링 명령어에 대한 예시적인 메모리 액세스를 예시하는 블록도이다.
도 7은 예시적인 제2 텍스처 샘플링 명령어에 대한 예시적인 메모리 액세스를 예시하는 블록도이다.
도 8은 예시적인 PRT 페치(fetch) 샘플링 명령어에 대한 예시적인 메모리 액세스를 예시하는 블록도이다.
일부 구현예는 부분적으로 상주하는 텍스처 데이터를 샘플링하는 방법을 제공한다. 레지던시 맵 디스크립터를 포함하는 명령어가 수신된다. 상기 명령어가 실행되어 레지던시 맵 디스크립터에 기반하여서 메모리에 저장된 밉맵(mipmap)으로부터 부분적으로 상주하는 텍스처 데이터(partially resident texture data)를 검색한다.
일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵을 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵이 메모리에 어떻게 저장되는지를 나타내는 정보를 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵 디스크립터를 저장하는 레지스터의 사양(specification)을 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵을 저장하는 레지스터의 사양을 포함한다. 일부 구현예에서, 명령어는 이미지 샘플의 표시 및 밉맵 디스크립터의 표시를 포함하고, 상기 방법은, 명령어를 실행하여 레지던시 맵 디스크립터, 이미지 샘플의 표시, 및 밉맵 디스크립터의 표시에 기반하여서 메모리에 저장된 밉맵으로부터 부분적으로 상주하는 텍스처 데이터를 검색하는 단계를 더 포함한다. 일부 구현예에서, 이미지 샘플은 이미지의 좌표를 포함한다. 일부 구현예에서, 이미지 샘플의 표시는 이미지 샘플을 저장하는 레지스터의 사양을 포함한다.
일부 구현예에서, 밉맵 디스크립터는 밉맵이 메모리에 어떻게 저장되는지를 나타내는 정보를 포함한다. 일부 구현예에서, 밉맵 디스크립터의 표시는 밉맵 디스크립터를 저장하는 레지스터의 사양을 포함한다.
일부 구현예는 부분적으로 상주하는 텍스처 데이터를 샘플링하도록 구성된 프로세서를 제공한다. 프로세서는 레지던시 맵 디스크립터를 포함하는 명령어를 수신하도록 구성된 회로를 포함한다. 프로세서는 또한, 명령어를 실행하여 레지던시 맵 디스크립터에 기반하여서 메모리에 저장된 밉맵(mipmap)으로부터 부분적으로 상주하는 텍스처 데이터(partially resident texture data)를 검색하도록 구성된 회로를 포함한다.
일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵을 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵이 메모리에 어떻게 저장되는지를 나타내는 정보를 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵 디스크립터를 저장하는 레지스터의 사양(specification)을 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵을 저장하는 레지스터의 사양을 포함한다. 일부 구현예에서, 명령어는 이미지 샘플의 표시 및 밉맵 디스크립터의 표시를 포함하고, 회로는, 명령어를 실행하여 레지던시 맵 디스크립터, 이미지 샘플의 표시, 및 밉맵 디스크립터의 표시에 기반하여서 메모리에 저장된 밉맵으로부터 부분적으로 상주하는 텍스처 데이터를 검색하도록 구성된다. 일부 구현예에서, 이미지 샘플은 이미지의 좌표를 포함한다. 일부 구현예에서, 이미지 샘플의 표시는 이미지 샘플을 저장하는 레지스터의 사양을 포함한다. 일부 구현예에서, 밉맵 디스크립터는 밉맵이 메모리에 어떻게 저장되는지를 나타내는 정보를 포함한다. 일부 구현예에서, 밉맵 디스크립터의 표시는 밉맵 디스크립터를 저장하는 레지스터의 사양을 포함한다.
도 1은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는, 예를 들어, 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함할 수 있다. 디바이스(100)는 프로세서(102), 메모리(104), 스토리지(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 추가적인 구성요소를 포함할 수 있다는 것이 이해된다.
다양한 대안에서, 프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이(die) 상에 위치한 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함하며, 여기서 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 다양한 대안에서, 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치하거나, 프로세서(102)와 별도로 위치한다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 예를 들어, RAM(random access memory), 동적 RAM, 또는 캐시를 포함한다.
스토리지(106)는 고정 또는 착탈식 스토리지, 예를 들어, 하드 디스크 드라이브, 고체 상태 드라이브, 광학 디스크, 또는 플래시 드라이브를 포함한다. 입력 디바이스(108)는, 제한 없이, 키보드, 키패드, 터치 화면, 터치 패드, 검출기, 마이크, 가속도계, 자이로스코프, 생체인식 스캐너, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다. 출력 디바이스(110)는, 제한 없이, 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 조명, 안테나, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스(108)와 통신하고, 프로세서(102)가 입력 디바이스(108)로부터 입력을 수신할 수 있게 한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스(110)와 통신하고, 프로세서(102)가 출력 디바이스(110)에 출력을 송신할 수 있게 한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적 구성요소이고, 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는 경우, 디바이스(100)는 동일한 방식으로 동작할 것이라는 점에 유의한다. 출력 드라이버(116)는 디스플레이 디바이스(118)에 결합된 가속 처리 디바이스("APD")(116)를 포함한다. APD는 프로세서(102)로부터 컴퓨팅 명령 및 그래픽 렌더링 명령을 수용하고, 이러한 컴퓨팅 명령 및 그래픽 렌더링 명령을 처리하고, 디스플레이를 위해 디스플레이 디바이스(118)에 픽셀 출력을 제공한다. 아래에서 더 상세히 설명되는 바와 같이, APD(116)는 단일-명령어-다중-데이터 (SIMD: single-instruction-multiple-data) 패러다임에 따라 컴퓨팅을 수행하도록 하나 이상의 병렬 처리 유닛을 포함한다. 따라서, 다양한 기능이 APD(116)에 의해 또는 이와 함께 수행되는 것으로 본원에 설명되지만, 다양한 대안에서, APD(116)에 의해 수행되는 것으로 설명된 기능은 호스트 프로세서(예를 들어, 프로세서(102))에 의해 구동되지 않고 디스플레이 디바이스(118)에 그래픽 출력을 제공하는 유사한 능력을 갖는 다른 컴퓨팅 디바이스에 의해 추가적으로 또는 대안적으로 수행된다. 예를 들어, SIMD 패러다임에 따라 처리 작업을 수행하는 임의의 처리 시스템은 본원에 설명된 기능을 수행할 수 있다는 것이 고려된다. 또는, SIMD 패러다임에 따라 처리 작업을 수행하지 않는 컴퓨팅 시스템은 본원에 설명된 기능을 수행하는 것으로 고려된다.
도 2는, APD(116)에서 처리 작업의 실행과 관련된 추가 세부사항을 도시하는, 디바이스(100)의 블록도이다. 프로세서(102)는, 시스템 메모리(104)에, 프로세서(102)에 의한 실행을 위한 하나 이상의 제어 로직 모듈을 유지한다. 제어 로직 모듈은 운영 체제(120), 커널 모드 드라이버(122), 및 애플리케이션(126)을 포함한다. 이러한 제어 로직 모듈은 프로세서(102) 및 APD(116)의 동작의 다양한 특징을 제어한다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 통신하고, 프로세서(102) 상에서 실행되는 다른 소프트웨어를 위한 하드웨어에 인터페이스를 제공한다. 커널 모드 드라이버(122)는, 예를 들어, APD(116)의 다양한 기능에 액세스하기 위해 프로세서(102) 상에서 실행되는 소프트웨어(예를 들어, 애플리케이션(126))에 애플리케이션 프로그래밍 인터페이스("API")를 제공함으로써 APD(116)의 동작을 제어한다. 커널 모드 드라이버(122)는 또한 APD(116) 처리 구성요소(예컨대, 아래에서 더 상세히 논의되는 SIMD 유닛(138))에 의한 실행을 위한 프로그램을 컴파일하는 JIT(just-in-time) 컴파일러를 포함한다.
APD(116)는 병렬 처리에 적합할 수 있는 그래픽 연산 및 비그래픽 연산과 같은 선택된 기능에 대한 명령 및 프로그램을 실행한다. APD(116)는 픽셀 연산, 지오메트리 컴퓨팅과 같은 그래픽 파이프라인 연산을 실행하고, 프로세서(102)로부터 수신된 명령에 기초하여 이미지를 디스플레이 디바이스(118)에 렌더링하는 데 사용될 수 있다. APD(116)는 또한, 프로세서(102)로부터 수신된 명령에 기초하여, 비디오, 물리 시뮬레이션, 전산 유체 역학, 또는 기타 작업과 관련된 연산과 같은 그래픽 연산과 직접적으로 관련되지 않은 컴퓨팅 처리 연산을 실행한다.
APD(116)는 프로세서(102)의 요청 시에 SIMD 패러다임에 따라 병렬 방식으로 연산을 수행하는 하나 이상의 SIMD 유닛(138)을 포함하는 컴퓨팅 유닛(132)을 포함한다. SIMD 패러다임은 다수의 프로세싱 요소가 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고, 따라서 동일한 프로그램을 실행하지만, 상이한 데이터로 해당 프로그램을 실행할 수 있는 것이다. 일례에서, 각각의 SIMD 유닛(138)은 16개의 레인을 포함하고, 여기서 각각의 레인은 SIMD 유닛(138)의 다른 레인과 동일한 시간에 동일한 명령어를 실행하지만 상이한 데이터로 해당 명령어를 실행할 수 있다. 모든 레인이 주어진 명령어를 실행하지 않아도 되는 경우에는 레인들을 예측으로 끌 수 있다. 예측은 발산 제어 흐름으로 프로그램을 실행하는 데에도 사용될 수 있다. 보다 구체적으로, 제어 흐름이 개별 레인에 의해 수행된 계산에 기초하는 조건부 분기 또는 다른 명령어를 갖는 프로그램에 대해, 현재 실행되지 않은 제어 흐름 경로에 대응하는 레인의 예측, 및 상이한 제어 흐름 경로의 순차 실행이 임의의 제어 흐름을 허용한다.
컴퓨팅 유닛(132)에서 실행의 기본 단위는 작업-항목이다. 각각의 작업-항목은 특정 레인에서 병렬로 실행될 프로그램의 단일 인스턴스화를 나타낸다. 작업-항목들은 단일 SIMD 처리 유닛(138) 상에서 "파면(wavefront)"으로서 동시에 실행될 수 있다. 하나 이상의 파면은 동일한 프로그램을 실행하도록 지정된 작업-항목들의 집합을 포함하는 "작업 그룹"에 포함된다. 작업 그룹은 그 작업 그룹을 구성하는 파면 각각을 실행함으로써 실행될 수 있다. 대안적으로, 파면은 단일 SIMD 유닛(138) 상에서 순차적으로 또는 상이한 SIMD 유닛(138) 상에서 부분적으로 또는 전체적으로 병렬로 실행된다. 파면은 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 있는 작업-항목들의 가장 큰 집합으로 생각될 수 있다. 따라서, 프로세서(102)로부터 수신된 명령이, 프로그램이 단일 SIMD 유닛(138) 상에서 동시에 실행될 수 없는 정도로 특정 프로그램이 병렬화되어야 함을 표시하는 경우, 해당 프로그램은 2개 이상의 SIMD 유닛(138) 상에 병렬화되거나 동일한 SIMD 유닛(138) 상에 직렬화되는 (또는 필요에 따라 병렬화 및 직렬화 모두) 파면으로 분할된다. 스케줄러(136)는 상이한 컴퓨팅 유닛(132) 및 SIMD 유닛(138) 상의 다양한 파면을 스케줄링하는 것에 관련된 연산들을 수행한다.
컴퓨팅 유닛(132)에 의해 제공되는 병렬성은 픽셀 값 계산, 정점 변환, 및 기타 그래픽 연산과 같은 그래픽 관련 연산에 적합하다. 따라서, 일부 경우에서, 프로세서(102)로부터 그래픽 처리 명령을 수용하는 그래픽 파이프라인(134)은 병렬로 실행하기 위해 컴퓨팅 유닛(132)에 컴퓨팅 작업을 제공한다.
컴퓨팅 유닛(132)은 또한 그래픽과 관련되지 않거나 그래픽 파이프라인(134)의 "통상적(normal)" 연산의 일부로서 수행되지 않는 컴퓨팅 작업(예를 들어, 그래픽 파이프라인(134)의 연산을 위해 수행되는 처리를 보완하기 위해 수행된 커스텀 연산)을 수행하는 데 사용된다. 프로세서(102) 상에서 실행되는 애플리케이션(126) 또는 기타 소프트웨어는 이러한 컴퓨팅 작업을 정의하는 프로그램을 실행을 위해 APD(116)에 전송한다.
도 3은 도 2에 예시된 그래픽 처리 파이프라인(134)의 추가적인 세부사항을 도시하는 블록도이다. 그래픽 처리 파이프라인(134)은, 각각이 특정 기능을 수행하는 스테이지들을 포함한다. 스테이지는 그래픽 처리 파이프라인(134)의 기능의 세분화를 나타낸다. 각각의 스테이지는 프로그램 가능한 처리 유닛(202)에서 실행되는 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현되거나, 프로그램 가능한 처리 유닛(202) 외부의 고정된 기능, 프로그램 가능하지 않은 하드웨어로서 부분적으로 또는 전체적으로 구현된다.
입력 어셈블러 스테이지(302)는 유저-필드 버퍼(user-filled buffer)(예를 들어, 애플리케이션(126)과 같은 프로세서(102)에 의해 실행되는 소프트웨어의 요청 시에 채워진 버퍼)로부터 프리미티브 데이터를 읽고, 파이프라인의 나머지 부분에 의해서 사용되기 위해 데이터를 프리미티브 안으로 어셈블링한다. 입력 어셈블러 스테이지(302)는 유저-필드 버퍼에 포함된 프리미티브 데이터에 기초하여 다양한 유형의 프리미티브를 생성할 수 있다. 입력 어셈블러 스테이지(302)는 나머지 파이프라인에 의해서 사용되기 위해, 어셈블된 프리미티브를 포맷한다.
정점 셰이더 스테이지(304)는 입력 어셈블러 스테이지(302)에 의해 어셈블된 프리미티브의 정점을 처리한다. 정점 셰이더 스테이지(304)는 변환, 스키닝(skinning), 모핑(morphing) 및 정점별 조명처리와 같은 다양한 정점별 작업을 수행한다. 변환 연산은 정점의 좌표를 변환하는 다양한 연산을 포함한다. 이러한 연산은 모델링 변환, 보기 변환, 투영 변환, 원근 분할, 및 뷰포트 변환 중 하나 이상을 포함한다. 여기서, 이러한 변환은 변환이 수행되는 정점의 좌표 또는 "위치"를 수정하는 것으로 간주된다. 정점 셰이더 스테이지(304)의 다른 연산은 좌표 이외의 속성을 수정한다.
정점 셰이더 스테이지(304)는 하나 이상의 컴퓨팅 유닛(132) 상에서 실행될 정점 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현된다. 정점 셰이더 프로그램은 프로세서(102)에 의해 제공되고, 컴퓨터 프로그래머에 의해 미리 작성된 프로그램에 기초한다. 드라이버(122)는 이러한 컴퓨터 프로그램을 컴퓨팅 유닛(132) 내에서 실행하기에 적합한 포맷을 갖는 정점 셰이더 프로그램을 생성하도록 컴파일한다.
헐 셰이더 스테이지(306), 테셀레이터 스테이지(308) 및 도메인 셰이더 스테이지(310)는, 프리미티브를 세분화하여 단순한 프리미티브를 보다 복잡한 프리미티브로 변환하는 테셀레이션을 구현하기 위해 함께 작동된다. 헐 셰이더 스테이지(306)는 입력 프리미티브에 기초하여 테셀레이션을 위한 패치를 생성한다. 테셀레이터 스테이지(308)는 패치에 대한 일 세트의 샘플을 생성한다. 도메인 셰이더 스테이지(310)는 패치에 대한 샘플에 대응하는 정점에 대한 정점 위치를 계산한다. 헐 셰이더 스테이지(306) 및 도메인 셰이더 스테이지(310)는 프로그래밍 가능한 프로세싱 유닛(202) 상에서 실행될 셰이더 프로그램으로서 구현될 수 있다.
지오메트리 셰이더 스테이지(312)는 프리미티브 단위로 정점 연산을 수행한다. 포인트 스프린트 확장(point sprint expand), 동적 입자 시스템 연산, 퍼-핀(fur-fin) 생성, 그림자 볼륨 생성, 단일 패스 렌더-투-큐브맵(single pass render-to-cubemap), 프리미티브별 재료 스와핑, 및 프리미티브별 재료 설정과 같은 연산을 포함하여, 다양한 상이한 유형의 연산이 기하학 셰이더 스테이지(312)에 의해 수행될 수 있다. 일부 예에서, 프로그래밍 가능한 처리 유닛(202) 상에서 실행되는 셰이더 프로그램은 기하학적 구조 셰이더 스테이지(312)에 대한 연산을 수행한다.
래스터라이저 스테이지(314)는 단순 프리미티브 및 생성된 업스트림을 수용하고 래스터화한다. 래스터화는 특정 프리미티브에 커버되는 화면 픽셀(또는 하위-픽셀 샘플)을 결정하는 것을 포함한다. 래스터화는 고정 기능 하드웨어에 의해 수행된다.
픽셀 셰이더 스테이지(316)는 업스트림에서 생성된 프리미티브 및 래스터화 결과에 기초하여 스크린 픽셀에 대한 출력 값을 계산한다. 픽셀 셰이더 스테이지(316)는 텍스처 메모리로부터의 텍스처를 적용할 수 있다. 픽셀 셰이더 스테이지(316)에 대한 연산은 프로그래밍 가능한 프로세싱 유닛(202) 상에서 실행되는 셰이더 프로그램에 의해 수행된다.
출력 병합 스테이지(318)는 픽셀 셰이더 스테이지(316)로부터의 출력을 수용하고, 이러한 출력을 병합하여, 스크린 픽셀에 대한 최종 색상을 결정하기 위해 z-테스트 및 알파 블렌딩과 같은 연산을 수행한다.
텍스처를 정의하는 텍스처 데이터는 텍스처 유닛(320)에 의해 저장되고/되거나 액세스된다. 텍스처는 그래픽 처리 파이프라인(134)의 다양한 지점에서 사용되는 비트맵 이미지이다. 예를 들어, 일부 경우에서, 픽셀 셰이더 스테이지(316)는 렌더링될 정점의 수를 증가시키지 않고 명백한 렌더링 복잡성을 개선하기 위해(예를 들어, 더 "사실적인" 모습을 제공하기 위해) 픽셀에 텍스처를 적용한다.
일부 예에서, 정점 셰이더 스테이지(304)는, 예를 들어, 개선된 미학을 위해 정점을 생성 또는 수정함으로써 복잡성을 증가시키기 위해 프리미티브를 수정하기 위해 텍스처 유닛(320)으로부터의 텍스처 데이터를 사용한다. 일 예에서, 정점 셰이더 스테이지(304)는 정점의 변위를 수정하기 위해 텍스처 유닛(320)에 저장된 높이 맵을 사용한다. 이러한 유형의 기술은, 예를 들어, 물을 렌더링하기 위해서 사용되는 정점의 위치 및 수를 수정함으로써, 픽셀 셰이더 스테이지(316)에서만 사용되는 텍스처와 비교하여 보다 사실적으로 보이는 물을 생성하기 위해서 사용될 수 있다. 일부 경우에서, 기하학적 구조 셰이더 스테이지(312)는 텍스처 유닛(320)으로부터 텍스처 데이터에 액세스한다.
컴퓨터 그래픽 분야에서, 텍스처 맵 또는 텍스처는 프리미티브의 표면에 적용될 수 있는 일 세트의 데이터이다. 어떤 경우에는, 텍스처가 비트맵 이미지와 같은 이미지이다. 텍스처는 일반적으로 2차원(2D)이지만, 1차원(1D)이거나, 3차원(3D)이거나, 일부 경우에는 다른 차원들을 갖는다. 일부 경우에서는, 텍스처가 이미지가 아니라 수학 함수이다.
텍스처는 일반적으로 텍스처 상의 포인트를 프리미티브 상의 포인트에 맵핑함으로써 3D 그래픽 프리미티브에 적용된다. 이러한 방식으로 프리미티브로 구성된 3D 그래픽 객체에 텍스처를 적용하는 것은 패턴이 있는 종이나 피부로 실제 객체를 감싸는 것과 비슷하다.
일부 경우에서, 장면의 복잡성은 텍스처의 전체 해상도를 필요로 하지 않는다. 예를 들어, 프리미티브가 뷰어로부터 멀어지면, 더 작게 보이고, 뷰어에게 가시적인 객체의 복잡성이 감소된다. 일부 경우에서, 텍스처의 저해상도 버전이 전체 해상도 텍스처 대신 메모리에 로드되어, 메모리 공간을 절약한다. 사용자의 관점으로부터 본 3D 모델 표현의 복잡성을 "세부 수준"(LOD: level of detail)이라고 한다. LOD는 경우에 따라 다른 이유로 조정된다. 예를 들어, 일부 경우에서, 중요도가 낮은 객체는 LOD가 상대적으로 더 낮다.
밉맵(mipmap)은 일 세트의 텍스처의 비트맵 이미지이며, 이는 일반적으로 전체 해상도 텍스처 및 점진적으로 더 낮은 해상도로 전체 해상도 텍스처의 축소된 복제본을 포함한다. 3D 그래픽 프리미티브의 복잡성이 충분하면, 전체 해상도(즉, 가장 높은 LOD) 텍스처가 밉맵으로부터 샘플링되고 프리미티브에 적용된다. 3D 그래픽 프리미티브의 복잡성이 충분하지 않은 경우(예: 프리미티브가 뷰어로부터 멀어질수록, 프리미티브가 더 작게 보여지는 경우), 텍스처의 더 낮은 LOD 버전은 밉맵으로부터 샘플링되어 프리미티브에 적용된다. 일부 경우에서, 밉맵으로부터 텍스처의 상이한 LOD 버전들이 중간 해상도를 제공하기 위해 보간되거나 다른 방식으로 처리된다.
일부 애플리케이션에서, 장면을 렌더링하기 전에 장면의 모든 텍스처와 밉맵이 비디오 메모리에 상주하는 것이 요구된다. 비디오 메모리가 비디오 메모리에 완전히 상주할 장면에 대한 모든 텍스처 및 관련 밉맵에 대해 충분히 크지 않은 경우, 텍스처의 크기, 해상도 및/또는 LOD가 텍스처와 밉맵이 완전히 상주하도록 하기 위해서 감소될 필요가 있을 수 있다.
일부 애플리케이션에서, 텍스처 및 연관된 밉맵의 단지 일부가 비디오 메모리에 상주하는 것이 요구된다. 일부 경우에서, 최대 또는 최소 LOD를 지정함으로써, 텍스처 및 관련 밉맵의 일부만이 비디오 메모리에 상주될 것이 요구된다. 이러한 경우, 텍스처는 부분 상주 텍스처(PRT: partially resident texture)라고 지칭된다.
일부 경우에서, 전체적으로 및 부분적으로 상주하는 텍스처들의 다양한 변경이 가능하다. 예를 들어, 일부 경우에서, 밉맵의 모든 수준들이 비디오 메모리에 상주하고, 전체 텍스처가 각각의 수준을 위해 상주한다.
일부 경우에서, 밉맵의 단지 일부 수준들만이 비디오 메모리에 상주하지만, 전체 텍스처는 각각의 상주 수준을 위해 상주한다. 일부 이러한 경우에서, 애플리케이션이 (예를 들어, 셰이더 리소스 디스크립터(SRD: shader resource descriptor)를 통한) 셰이더 보기를 밉맵의 수준들의 서브세트로 제한한다. 메모리에 상주하는 밉맵의 수준들은 이러한 경우에는 연속적이지만(즉, 건너뛴 수준 없음 - "체인 중간에 구멍 없음"), 일부 경우에서는, 가장 상세하거나 가장 덜 상세한(즉, "끝에 있는") 수준이 상기 애플리케이션에 의해서 스킵될 수 있다. 일부 이러한 경우에서, 하드웨어(예: 텍스처 처리 유닛, SIMD 프로세서 등)는 LOD를 현재 밉맵 수준으로 클램핑할 것이다.
일부 경우에서, 밉맵의 단지 일부 수준들만이 비디오 메모리에 상주하고, 텍스쳐의 단지 일부만이 각각의 상주 수준을 위해 상주한다. 밉맵의 메모리 상주 레벨이 완전히 상주할 필요가 없다는 점을 제외하고는, 밉맵의 일부 레벨들만이 비디오 메모리에 상주하고 전체 텍스처가 각 상주 레벨에 상주하는 경우와 유사하다. 이러한 경우에서, LOD를 클램핑하는 것 외에도, 하드웨어는 상주하지 않는 타일에 대해 값이 0이라고 가정한다. 이 표시는, 일부 경우에서, PRT를 지원하는 애플리케이션 및 하드웨어(예: 텍스처 처리 유닛, SIMD 프로세서 등)에 사용 가능하다.
일부 경우에서, 텍스처의 일부 부분(예: 타일)들은 다른 부분보다는 밉맵의 다양한 수준들에 상주한다. 일부 경우에서, 밉맵의 모든 수준이, 또는 일부 수준들만이 메모리에 상주한다. 이러한 경우에서, 하드웨어는 컴퓨팅 LOD에 가장 가까운 밉맵의 메모리 상주 수준으로부터 각각의 타일을 페치(fetch)할 것이다. 예를 들어, 하드웨어가 타일에 대해 LOD=0을 계산하고, 가장 상세한 상주 타일이 LOD=1인 경우, 하드웨어는 LOD=1에 있는 타일을 페치한다. 반면에, 하드웨어가 타일에 대해 LOD=3을 계산하고, 가장 상세한 상주 타일이 LOD=1인 경우, 하드웨어는 LOD=3에 있는 타일을 페치한다. 이 접근 방식은, 일부 경우에서, 민밉(minmip) 맵핑 또는 PRT++라고 지칭된다.
도 4는 예시적인 PRT 맵핑 방식(400)을 예시하는 블록도이다. PRT 맵핑 방식(400)은 예시적인 밉맵 체인을 포함하며, 이는 3개의 밉맵(4100-4102), 가상 메모리(420), 물리 메모리(430)(예를 들어, 도 1 및 도 2와 관련하여 도시되고 설명된 APD(116)의 로컬 그래픽 메모리 또는 메모리(104), 도 3과 관련하여 도시 및 설명된 텍스처 유닛(320)의 메모리, 또는 임의의 다른 적절한 물리적 메모리로 또는 이에 의해서 구현됨)를 포함한다. 밉맵(4100)은 텍스처에 대한 LOD를 나타낸다. 이 예에서, 밉맵(4100)은 밉맵 체인에서 가장 높은 세부 수준(예: 최고 해상도 이미지)을 포함하는 텍스처 버전이다. 밉맵(4101)은 밉맵(4100)의 필터링되거나 다운 샘플링된 버전이고, 텍스처에 대한 밉맵(4100)보다 덜 상세하거나 저해상도 LOD를 나타낸다. 유사하게, 밉맵(4102)은 밉맵(4101)의 필터링되거나 다운 샘플링된 버전이고, 텍스처에 대한 밉맵(4101)에 대한 LOD보다 덜 상세하거나 저해상도 LOD를 나타낸다. 밉맵, 및 각각의 밉맵과 연관된 LOD는 당업자에게 공지되어 있다.
도 4의 예에서, 밉맵(4100-4102)은 메모리 타일들로 분할된다. 각각의 밉맵(4100-4102)은 메모리 타일들(이 예에서는 동일한 크기)로 분할된다. 이 예에서, 밉맵(4102)은 단일 메모리 타일에 의해서 표시되고, 밉맵 체인(4100-4102)에서 가장 덜 상세한 LOD를 나타낸다. 메모리 타일들 각각은 각각의 밉맵에 대한 텍셀(즉, 텍스처 픽셀, 텍스처 맵의 기본 단위) 정보를 포함한다. 도 4에는 3개의 밉맵만이 도시되어 있지만, 당업자라면 밉맵 체인(4100-4102)이 예시적이라는 것을 이해할 수 있을 것이고, 일부 구현예에서는 밉맵 체인이 도 4의 텍스처 맵핑 방식(400)에 도시된 3개의 밉맵보다 더 많은 수의 밉맵(더 큰 범위의 LOD 제공) 또는 더 적은 수의 밉맵(더 적은 범위의 LOD 제공)을 포함하는 것을 이해할 수 있을 것이다. 또한, 본원의 설명에 기초하여, 당업자는 본원의 설명이 1차원 및 3차원 텍스처뿐만 아니라 다양한 텍스처의 어레이에도 동일하게 적용 가능하다는 것을 인식할 것이다. 경우에 따라, 밉맵(4100-4102)이 (크기가) 단일 메모리 타일보다 작으면, 하나 이상의 밉맵(4100-4102)은 메모리 리소스를 절약하기 위해 단일 메모리 타일 안으로 로딩 가능할 수 있다.
도 4의 예에서, 각각의 메모리 타일은 가상 메모리(420) 내의 각각의 주소 공간과 연관된다. 예를 들어, 밉맵(4100)의 왼쪽 상단 코너와 연관된 메모리 타일("RGB"로 라벨링됨)은 가상 메모리(420)의 페이지 테이블에 있는 주소 공간(4200)과 연관된다(화살표가 있는 점선으로 표시됨). 밉맵(4100)("X"로 표시됨)의 왼쪽 상단 코너 메모리 타일의 바로 오른쪽에 있는 메모리 타일은 가상 메모리(420)의 페이지 테이블에 있는 주소 공간(4201)과 연관된다.
두 개 이상의 연속 페이지 테이블 엔트리의 크기가 상대적으로 작은 경우(예: 하나 이상의 밉맵(4100-4102)은 단일 메모리 타일 안으로 로딩 가능함), 이들 페이지 테이블 엔트리는 일부 구현예에서 가상 메모리(420)의 페이지 테이블의 단일 주소 공간에 맵핑 가능하다는 점에 유의한다.
이 예에서 래스터와 같은 방식으로(예: 왼쪽으로부터 오른쪽으로 순회, 아래로 순회, 다음으로, 왼쪽으로부터 오른쪽으로 순회), 밉맵(4100-4102)으로부터의 각각의 메모리 타일은 가상 메모리(420)의 페이지 테이블에서 각각의 주소 공간(4200-42020)과 연관된다. 도 4의 가상 메모리(420)의 페이지 테이블에 대한 밉맵(4100-4102)의 분할된 메모리 타일의 도시된 연관은 예시적이다; 당업자는, 밉맵(4100-3102)의 메모리 타일을 가상 메모리(420)에 연관시키기 위해 다른 방식이 이용 가능하다는 것을 인식할 것이다.
밉맵들(4100-4102)이 메모리 타일로 분할된 후, 제1 서브세트의 메모리 타일들이 도 4의 물리적 메모리(430)의 각각의 주소 공간에 맵핑된다. 도 4에서 화살표가 있는 점선은 밉맵(4100-4102)으로부터의 메모리 타일 중 어느 것이 이 예에서 물리적 메모리(430)의 각각의 주소 공간에 맵핑되는지를 나타낸다.
물리적 메모리(430)에 맵핑될 제1 서브세트의 메모리 타일들은 임의의 적절한 애플리케이션에 의해 임의의 적절한 방식으로 선택된다. 물리적 메모리(430)는, 예를 들어, 도 1 내지 도 3과 관련하여 도시되고 설명된 것과 같은 임의의 적절한 하드웨어에 의해 구현된다. 메모리 타일 선택은 적절한 기준(들)에 기초한다.
예를 들어, 메모리 타일들은 다음 요인들 중 하나 이상에 기초하여 제1 서브세트로 선택될 수 있다: 애플리케이션이 텍스처 맵핑 연산에 메모리 타일이 필요할 것으로 예상하는지 여부; 및 밉맵의 미리 결정된 LOD 및 해당 밉맵과 연관된 하나 이상의 메모리 타일. 다시 말해, 물리적 메모리 소비를 감소시키기 위한 노력의 일환으로, 애플리케이션은 일부 경우에서는 (예를 들어, 적절한 명령어를 발행함으로써) 밉맵 체인과 연관된 특정 메모리 타일을 상주하게 한다.
예를 들어, 애플리케이션은 프로세서에 밉맵(4102)(밉맵 체인에서 가장 낮거나 가장 덜 상세한 LOD를 가짐)과 연관된 메모리 타일이 상주하게 하도록 하는 지시를 할 수 있고; 밉맵(4101)(다음으로 높은 밉맵은 밉맵(4102)에 대한 LOD임)과 연관된 메모리 타일의 대부분이 상주하게 하도록 하는 지시를 할 수 있고; 밉맵(4100)(밉맵 체인에서 가장 자세한 LOD를 가짐)과 연관된 메모리 타일의 소수(minority)가 상주하게 하도록 하는 지시를 할 수 있다.
일부 경우에서, 텍스처 맵핑 프로세스에 할당된 물리적 메모리 공간의 최적화는 이러한 맵핑 방식의 결과로서 실현되어, 비디오 메모리에 상주할 더 자세한 LOD가 있는 메모리 타일에 대한 더 많은 물리적 메모리 공간을 허용한다.
물리적 메모리(430)에 맵핑될 제1 서브세트의 메모리 타일들 중에서의 예시적인 선택은 밉맵 체인(4100-4102)에서 "RGB"로 라벨링된 메모리 타일에 의해서 표시된다. 이러한 선택된 메모리 타일은 가상 메모리(420)의 각각의 주소 공간(예: 주소 공간들(4100, 4105, 4106, 41013, 41016-18, 및 42020))과 연관되며, 물리적 메모리(430)의 각각의 주소 공간에 맵핑된다. 제1 서브세트의 메모리 타일들(예: 가상 메모리(420)로부터의 주소 공간(4101-4, 4107-12, 41014, 41015, 및 41019))에서 선택되지 않은 밉맵(4100-4102)으로부터의 메모리 타일에 대해, 이러한 메모리 타일은 유효하지 않은 것으로 표시되고(도 4에서 "X"로 표시된 메모리 타일) 물리적 메모리(430)에 맵핑되지 않는다.
물리적 메모리(430)에 맵핑된 제1 서브세트의 메모리 타일들은 일부 경우에 동일한 텍스처 정보를 공유한다. 특히, 가상 메모리(420)의 페이지 테이블의 주소 공간은 일부 경우에 물리적 메모리(430)의 동일한 주소 공간에 맵핑될 수 있다. 예를 들어, 가상 메모리(420)의 페이지 테이블의 주소 공간(4105 및 4106)은 물리적 메모리(430)의 주소 공간(432)에 각각 맵핑된다. 유사하게, 가상 메모리(420)의 페이지 테이블의 주소 공간(4200 및 41018)은 물리적 메모리(430)의 주소 공간(434)에 각각 맵핑된다.
제1 서브세트의 메모리 타일들이 물리적 메모리(430)에 맵핑된 후(즉, 물리적 메모리(430)에 상주하게 됨), 이 정보는 텍스처 맵핑 연산 중에 (예를 들어, API 및 도 2와 관련하여 도시되고 설명된 커널 모드 드라이버(122)와 같은 드라이버 모듈을 통해) 애플리케이션(예를 들어, 도 2와 관련하여 도시되고 설명된 애플리케이션들(126) 중 하나)에 액세스할 수 있다.
텍스처 및 연관된 밉맵의 저장된 부분은, 텍스처 및 연관된 밉맵의 일부만 텍스처 맵핑 연산을 위해 비디오 메모리에 상주하는 것이 요구되므로, PRT라고 지칭된다. 이것은 전체적으로 상주하는 텍스처를 필요로 하는 텍스처 맵핑 연산과 대조된다.
PRT를 프리미티브에 적용하기 위해, 애플리케이션은 경우에 따라 프로세서에 텍스처 샘플링 명령어를 발행한다. 텍스처 샘플링 명령어에 응답하여, 프로세서는 일부 예에서 상태 코드를 반환한다. 예를 들어, 상태 코드는 애플리케이션에 의해 요청된 텍스처 정보의 페치 성공 또는 애플리케이션에 의해 요청된 텍스처 정보의 페치 실패를 나타낸다. 일부 경우에서, 텍스처 정보의 페치 실패는 현재 비디오 메모리에 상주하는 밉맵보다 더 자세한 LOD가 있는 밉맵으로부터의 정보에 액세스하려는 시도의 결과이다.
일부 경우에서, 상주 맵이 부분적으로 상주하는 텍스처 및 연관된 밉맵을 추적하기 위해서 사용된다. 상주 맵은, 일부 경우에서, "민밉(minmip) 맵" 또는 LOD 인덱스 테이블로도 지칭된다.
도 5는 도 4와 관련하여 또한 도시되고 설명된 밉맵(4100-4102)의 이용 가능한(즉, 메모리 상주) 타일을 나타내는 예시적인 레지던시 맵(510)의 예시이다. 레지던시 맵(510)은 관심 밉맵 타일에 대응하는 레지던시 메모리 타일을 나타낸다. 예를 들어, 레지던시 맵(510)과 관련하여, 왼쪽 상단 코너에 위치한 메모리 타일("0"로 라벨링됨)은 밉맵(4100)의 왼쪽 상단 코너에 위치한 레지던시 메모리 타일("RGB"로 라벨링됨)에 대응한다. 여기서, 라벨 "0"은 상기 수준의 밉맵(4100)과 또한 덜 상세한 수준에 있는 밉맵(4101 및 4102)에 있는 해당 타일에 대해 텍스처가 사용 가능하다는 것을 나타낸다.
이 예에서, PRT 및 이의 연관된 밉맵은 단일 레지던시 맵을 사용하여(예를 들어, 레지던시 맵(510)만 사용하여) 추적된다. 이러한 경우, 왼쪽 상단 코너에 위치한 메모리 타일의 값 0은 밉맵 체인의 모든 수준에 있는 대응하는 왼쪽 상단 코너에서 텍스처가 사용 가능하다는 것을 나타내는 한편, 오른쪽 상단 코너에 위치한 메모리 타일의 값 1은, 레벨 1과 2에 있는 대응하는 오른쪽 상단 코너에서 텍스처가 사용 가능하다는 것을 나타낸다. 즉, 레지던시 맵은 밉맵 체인에서 더 거칠게(즉, 덜 상세함) 그리고 표시된 수준에서 밉맵 가용성을 표현한다.
예를 들어, 밉맵(4100)의 오른쪽 상단 코너에 위치한 메모리 타일과 같은 비상주 메모리 타일의 경우("X"로 라벨링됨), 더 거친(예: 덜 상세한) LOD 밉맵(4101)으로부터의 메모리 타일 정보가 사용될 수 있다. 이것은 레지던시 맵(510)에 예시되어 있으며, 여기서 우측 상단 코너에 위치한 메모리 타일("1"로 라벨링됨)은, 텍스처가 레벨 1(즉, "RGB"로 라벨링된 밉맵(4100)의 오른쪽 상단 코너에 있음) 및 레벨 2에 대응하는 우측 상단 코너에서 이용 가능함을 나타낸다.
일부 구현예에서, 애플리케이션 및/또는 프로세서는 레지던시 맵(510)을 통해 레지던트 텍스처 정보를 추적한다. 일부 구현예에서, 레지던시 맵 가능 텍스처를 샘플링하기 위해, 샘플링은 두 개의 종속 연산을 사용하여 처리된다.
일부 구현예에서, 제1 연산은 텍스처 리소스로부터 판독될 좌표 및 레지던시 맵에 대한 리소스 디스크립터를 포함하는 샘플링 명령어이다. 제2 연산은 또한, 텍스처로부터 판독될 좌표, 샘플링된 LOD 값, 및 텍스처 리소스에 대한 리소스 디스크립터를 포함하는 샘플링 연산이다. 일부 구현예에서, 리소스 디스크립터는 치수, 크기, 포맷, 레지던시 맵이 있는지 여부 등을 포함하여, 텍스처 리소스(즉, 밉맵)를 설명하는 정보를 포함한다. 일부 구현예에서, 레지던시 맵 디스크립터는 레지던시 맵의 치수, 크기, 포맷 등을 포함하여, 레지던시 맵을 설명하는 정보를 포함한다.
따라서, 일부 구현예에서, 제1 텍스처 명령어가 실행되어 레지던시 맵(510)에 액세스하고, 가상 메모리(420)의 페이지 테이블에서 페치할 특정 LOD를 계산한다. 여기서, 제1 연산은 레지던시 맵 리소스 디스크립터를 기반으로 이미지 좌표를 레지던시 맵에 맵핑하여 레지던시 맵으로부터 LOD 값을 샘플링하고, 샘플링된 LOD 값을 반환한다.
일부 구현예에서, 제1 텍스처 명령어는 레지던시 맵에 대한 디스크립터 및 텍스처가 적용될 이미지의 샘플을 포함하고, 제1 텍스처 명령어에 응답하여, 프로세서는 레지던시 맵으로부터의 샘플에 대응하는 LOD를 반환한다.
상주 맵(510)의 엔트리는 비디오 메모리에 상주하는 텍스처 및 연관된 밉맵에 대한 정보를 제공하기 때문에, 애플리케이션은 텍스처 샘플링 명령어에 대해 사용 가능한 LOD를 결정할 수 있다.
따라서, 일부 구현예에서, 애플리케이션은 프로세서에 제2 텍스처 명령어를 발행하여 제1 텍스처 명령어(예: LOD를 특정 최대 LOD에 클램핑함)에 의해 반환된 LOD, 텍스처가 적용될 이미지의 샘플, 및 텍스처에 대한 디스크립터에 기반하여 밉맵에 액세스한다. 제2 텍스처 명령어에 응답하여, 프로세서는 이미지 샘플에 대응하는 텍스처 정보를 반환한다. 여기서, 제2 연산은 밉맵 리소스 디스크립터에 기반하여 이미지 좌표를 밉맵에 맵핑하여 밉맵으로부터의 텍스처를 샘플링하고, 샘플링된 텍스처 정보를 반환한다.
도 6은 위에서 설명된 제1 텍스처 샘플링 명령어에 대한 예시적인 메모리 액세스를 예시하는 블록도이다. 메모리 액세스는 SIMD 레지스터 파일(600)에 관하여 설명된다. SIMD 레지스터 파일(600)은 도 2에 관하여 도시되고 설명된 SIMD 유닛(138)의 일부로서, 또는 도 2의 임의의 다른 적절한 하드웨어에서, 또는 다른 방식으로 구현 가능하다. 도 6은 또한, 임의의 연관된 캐시 엔트리를 반영하는 메모리(602)를 예시한다. 메모리(602)는 도 1 및 도 2에 관하여 도시되고 설명된 APD(116)의 로컬 그래픽 메모리 또는 메모리(104), 도 3에 관하여 도시되고 설명된 텍스처 유닛(320)의 메모리, 또는 임의의 다른 적절한 물리적 메모리에서 또는 이에 의해서 구현 가능하다.
이 예에서, 레지던시 맵 디스크립터(604) 및 텍스처 디스크립터(606)는 SIMD 레지스터(600)에 저장된다. 프로세서는, 메모리(602)에 저장된 레지던시 맵(614)으로부터 LOD(612)를 검색하고 SIMD 레지스터(600)에 LOD(612)를 저장하기 위해, 레지던시 맵 디스크립터(604) 및 텍스처화될 이미지의 샘플(610)에 기초하여 제1 텍스처 샘플링 명령어(608)를 (예를 들어, 상술된 바와 같이) 실행한다.
도 7은 위에서 설명된 제2 텍스처 샘플링 명령어에 대한 예시적인 메모리 액세스를 예시하는 블록도이다. LOD(612)가 SIMD 레지스터(600)에서 이용 가능한 후, 프로세서는 밉맵(616)으로부터의 텍스처 데이터(702)를 검색하기 위해 LOD(612), 텍스처 디스크립터(606), 및 이미지 샘플(610)에 기초하여 제2 텍스처 샘플링 명령어(700)를 실행한다. 검색된 텍스처 데이터(702)는 이 예에서 SMID 레지스터(600)에 저장된다.
위에서 설명된 예시적인 제1 및 제2 텍스처 샘플링 명령어와 관련하여 위에서 설명된 텍스처 샘플링은 텍스처 데이터(702)를 페치하기 위해 두 개의 개별 메모리 액세스 - 하나는 LOD를 해결하고 하나는 텍스처를 페치함 - 를 필요로 한다. 이 종속 페치 연산은 최대 2개의 개별 캐시 미스(cache miss)로 인한 지연을 유발할 가능성을 갖는다. 따라서, 일부 구현예에서, 비디오 메모리 액세스의 수를 하나로 줄임으로써 일부 경우에 성능이 향상된다.
도 8은 예시적인 PRT 텍스처 페치 명령어에 대한 예시적인 메모리 액세스를 예시하는 블록도이다. 이 예에서, 레지던시 맵 디스크립터(804)는 레지던시 맵(614)을 포함한다. 프로세서는, 밉맵(616)으로부터 텍스처 데이터(702)를 검색하기 위해서 레지던시 맵 디스크립터(804), 텍스처화될 이미지의 샘플(610), 및 텍스처 디스크립터(606)에 기반하여 PRT 텍스처 페치 명령어(800)를 실행한다. 검색된 텍스처 데이터(702)는 이 예에서 SMID 레지스터(600)에 저장된다.
레지던시 맵 디스크립터(804)는 이 예에서 레지던시 맵(614)을 포함한다. 따라서, 레지던시 맵 디스크립터(804)는 도 6 및 도 7과 관련하여 도시되고 설명된 레지던시 맵 디스크립터(604)보다 크기가 더 크다. 그러나, 레지던시 맵 디스크립터(804) 자체가 레지던시 맵을 포함하기 때문에, LOD(도 6 및 도 7과 관련하여 설명된 LOD(612)에 대응함)의 결정은, 비디오 메모리(602)에 저장된 레지던시 맵(614)으로부터 LOD를 검색하기 위한 초기 명령어를 요구하기 보다는, PRT 텍스처 페치 명령어(800)의 실행의 일부로서 발생될 수 있다.
일부 경우에서, 두 개가 아닌 하나의 명령어(예를 들어, PRT 텍스처 페치 명령어(800))만을 사용하여 텍스처 데이터(702)를 검색하는 것은 메모리 액세스 레이턴시로 인한 처리 시간을 감소시킴으로써 성능을 향상시키는 장점이 있다. 일부 구현예에서, 이는, 레지던시 맵 디스크립터(예를 들어, 레지던시 맵 디스크립터(804))가, 예를 들어 레지던시 맵(예를 들어, 레지던시 맵(614))을 즉시 값으로 포함하기 때문에, 2-명령어의 경우보다 크기가 더 큰 경우에도, 적용된다. 일부 구현예에서, 레지던시 맵 디스크립터는 실제로 2-명령어의 경우보다 크기가 더 크지 않다. 예를 들어, 레지던시 맵 디스크립터(604)는 레지던시 맵 디스크립터(804)가 필요로 하지 않는(예: 즉시 값을 포함하고 메모리를 가리키지 않기 때문에) 필드(예: 메모리에 대한 포인터)를 포함한다. 따라서, 일부 경우에서, 1-명령어(즉시 값)의 경우의 레지던시 맵 디스크립터가 2-명령어(포인터)의 경우의 레지던시 맵 디스크립터와 크기가 같거나 이보다 더 작다.
일부 구현예에서, 애플리케이션은 텍스처가 분할되는 타일의 수를 제어하여 실제 레지던시 맵을 포함(즉, 1-명령어의 경우, 즉시 값으로서 포함)하는 레지던시 맵 디스크립터의 크기를 제어할 수 있다. 예를 들어, 일부 구현예에서, 임베딩된 즉시 값 레지던시 맵을 갖는 레지던시 맵 디스크립터는, 예를 들어, 타일 수가 많을수록 임베딩된 레지던시 맵이 커지므로 디스크립터가 커지는 타일 수를 조정함으로써, 임베딩된 즉시 값 레지던시 맵이 없는 레지던시 맵 디스크립터(예: 메모리의 레지던시 맵을 가리키는 것)보다 더 작게, 동일한 크기로, 또는 더 크게 만들어진다.
본원의 개시내용에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 특징부들 및 요소들이 특정 조합으로 위에 설명되어 있지만, 각각의 특징부 또는 요소는 다른 특징부 및 요소 없이 단독으로, 또는 다른 특징부 및 요소와 함께, 또는 다른 특징부 및 요소 없이, 다양한 조합으로 사용될 수 있다.
도면에 예시되고/되거나 본원에 설명된 다양한 기능 유닛(프로세서(102), 입력 드라이버(112), 입력 디바이스(108), 출력 드라이버(114), 출력 디바이스(110), 가속 처리 디바이스(116), 스케줄러(136), 그래픽 처리 파이프라인(134), 컴퓨팅 유닛(132), SIMD 유닛(138), 텍스처 처리 유닛(320) 등을 포함하나, 이에 한정되지 않음)은 범용 컴퓨터, 프로세서 또는 프로세서 코어, 또는 프로그램, 소프트웨어 또는 펌웨어로 구현되고, 비일시적 컴퓨터 판독 가능 매체 또는 다른 매체에 저장되고, 범용 컴퓨터, 프로세서 또는 프로세서 코어에 의해 실행 가능할 수 있다. 제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는, 예를 들어, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 제어기, 마이크로컨트롤러, ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array) 회로, 임의의 다른 유형의 IC(integrated circuit) 및/또는 상태 기계를 포함한다. 이러한 프로세서는 처리된 하드웨어 설명 언어(HDL: hardware description language) 명령어 및 넷리스트(컴퓨터 판독가능 매체에 저장될 수 있는 명령어)를 포함하는 기타 중간 데이터의 결과를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 처리의 결과는 본 개시내용의 특징을 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 사용되는 마스크작업일 수 있다.
본원에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어에서 구현될 수 있다. 비일시적 컴퓨터 판독가능 저장 매체의 예는 ROM(read only memory), RAM(random access memory), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 탈착식 디스크와 같은 자기 매체, 자기 광학 매체, 및 CD-ROM 디스크 및 DVD(digital versatile disk)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 부분적으로 상주하는 텍스처 데이터(partially resident texture data)를 샘플링하는 방법으로서,
    레지던시 맵 디스크립터(residency map descriptor)를 포함하는 명령어를 수신하는 단계; 및
    상기 명령어를 실행하여 상기 레지던시 맵 디스크립터에 기반하여서 메모리에 저장된 밉맵(mipmap)으로부터 부분적으로 상주하는 텍스처 데이터를 검색하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 레지던시 맵 디스크립터는 레지던시 맵을 포함하는, 방법.
  3. 제1항에 있어서, 상기 레지던시 맵 디스크립터는 레지던시 맵이 상기 메모리에 어떻게 저장되는지를 나타내는 정보를 포함하는, 방법.
  4. 제1항에 있어서, 상기 레지던시 맵 디스크립터는 상기 레지던시 맵 디스크립터를 저장하는 레지스터의 사양을 포함하는, 방법.
  5. 제1항에 있어서, 상기 레지던시 맵 디스크립터는 레지던시 맵을 저장하는 레지스터의 사양을 포함하는, 방법.
  6. 제1항에 있어서, 상기 명령어는 이미지 샘플의 표시 및 밉맵 디스크립터의 표시를 포함하고, 상기 방법은, 상기 명령어를 실행하여 상기 레지던시 맵 디스크립터, 상기 이미지 샘플의 상기 표시, 및 상기 밉맵 디스크립터의 상기 표시에 기반하여서 상기 메모리에 저장된 밉맵으로부터 부분적으로 상주하는 텍스처 데이터를 검색하는 단계를 더 포함하는, 방법.
  7. 제6항에 있어서, 상기 이미지 샘플은 이미지의 좌표를 포함하는, 방법.
  8. 제6항에 있어서, 상기 이미지 샘플의 상기 표시는 상기 이미지 샘플을 저장하는 레지스터의 사양을 포함하는, 방법.
  9. 제6항에 있어서, 상기 밉맵 디스크립터는 상기 밉맵이 상기 메모리에 어떻게 저장되는지를 나타내는 정보를 포함하는, 방법.
  10. 제6항에 있어서, 상기 밉맵 디스크립터의 상기 표시는 상기 밉맵 디스크립터를 저장하는 레지스터의 사양을 포함하는, 방법.
  11. 부분적으로 상주하는 텍스처 데이터를 샘플링하도록 구성된 프로세서로서,
    레지던시 맵 디스크립터를 포함하는 명령어를 수신하도록 구성된 회로; 및
    상기 명령어를 실행하여 상기 레지던시 맵 디스크립터에 기반하여서 메모리에 저장된 밉맵(mipmap)으로부터 부분적으로 상주하는 텍스처 데이터를 검색하도록 구성된 회로를 포함하는, 프로세서.
  12. 제11항에 있어서, 상기 레지던시 맵 디스크립터는 레지던시 맵을 포함하는, 프로세서.
  13. 제11항에 있어서, 상기 레지던시 맵 디스크립터는 레지던시 맵이 상기 메모리에 어떻게 저장되는지를 나타내는 정보를 포함하는, 프로세서.
  14. 제11항에 있어서, 상기 레지던시 맵 디스크립터는 상기 레지던시 맵 디스크립터를 저장하는 레지스터의 사양을 포함하는, 프로세서.
  15. 제11항에 있어서, 상기 레지던시 맵 디스크립터는 레지던시 맵을 저장하는 레지스터의 사양을 포함하는, 프로세서.
  16. 제11항에 있어서, 상기 명령어는 이미지 샘플의 표시 및 밉맵 디스크립터의 표시를 포함하고, 상기 회로는, 상기 명령어를 실행하여 상기 레지던시 맵 디스크립터, 상기 이미지 샘플의 상기 표시 및 상기 밉맵 디스크립터의 상기 표시에 기반하여서 상기 메모리에 저장된 밉맵으로부터 부분적으로 상주하는 텍스처 데이터를 검색하도록 구성된, 프로세서.
  17. 제16항에 있어서, 상기 이미지 샘플은 이미지의 좌표를 포함하는, 프로세서.
  18. 제16항에 있어서, 상기 이미지 샘플의 상기 표시는 상기 이미지 샘플을 저장하는 레지스터의 사양을 포함하는, 프로세서.
  19. 제16항에 있어서, 상기 밉맵 디스크립터는 상기 밉맵이 상기 메모리에 어떻게 저장되는지를 나타내는 정보를 포함하는, 프로세서.
  20. 제16항에 있어서, 상기 밉맵 디스크립터의 상기 표시는 상기 밉맵 디스크립터를 저장하는 레지스터의 사양을 포함하는, 프로세서.
KR1020227033187A 2020-03-25 2021-03-08 부분적으로 상주하는 텍스처에 대한 샘플링 KR20220157401A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202062994441P 2020-03-25 2020-03-25
US62/994,441 2020-03-25
US17/084,520 US20210304488A1 (en) 2020-03-25 2020-10-29 Sampling for partially resident textures
US17/084,520 2020-10-29
PCT/US2021/021404 WO2021194733A1 (en) 2020-03-25 2021-03-08 Sampling for partially resident textures

Publications (1)

Publication Number Publication Date
KR20220157401A true KR20220157401A (ko) 2022-11-29

Family

ID=77856420

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227033187A KR20220157401A (ko) 2020-03-25 2021-03-08 부분적으로 상주하는 텍스처에 대한 샘플링

Country Status (6)

Country Link
US (1) US20210304488A1 (ko)
EP (1) EP4128167A4 (ko)
JP (1) JP2023518715A (ko)
KR (1) KR20220157401A (ko)
CN (1) CN115335867A (ko)
WO (1) WO2021194733A1 (ko)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7948500B2 (en) * 2007-06-07 2011-05-24 Nvidia Corporation Extrapolation of nonresident mipmap data using resident mipmap data
US8823724B2 (en) * 2009-12-31 2014-09-02 Nvidia Corporation Sparse texture systems and methods
US8907969B2 (en) * 2010-12-13 2014-12-09 Advanced Micro Devices, Inc. Partially resident textures
US10388058B2 (en) * 2017-02-16 2019-08-20 Microsoft Technology Licensing, Llc Texture residency hardware enhancements for graphics processors
US10540802B1 (en) * 2019-01-31 2020-01-21 Advanced Micro Devices, Inc. Residency map descriptors

Also Published As

Publication number Publication date
CN115335867A (zh) 2022-11-11
WO2021194733A1 (en) 2021-09-30
US20210304488A1 (en) 2021-09-30
JP2023518715A (ja) 2023-05-08
EP4128167A4 (en) 2024-04-24
EP4128167A1 (en) 2023-02-08

Similar Documents

Publication Publication Date Title
US10102662B2 (en) Primitive culling using automatically compiled compute shaders
KR102480787B1 (ko) 순서에 관계 없는 캐시 리턴
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
US11978234B2 (en) Method and apparatus of data compression
US11972518B2 (en) Hybrid binning
US11741653B2 (en) Overlapping visibility and render passes for same frame
US20210304488A1 (en) Sampling for partially resident textures
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
US20240104685A1 (en) Device and method of implementing subpass interleaving of tiled image rendering
US20210398349A1 (en) Fine grained replay control in binning hardware
US11900499B2 (en) Iterative indirect command buffers
US20210407182A1 (en) Load instruction for multi sample anti-aliasing
KR20230162006A (ko) 두 레벨 비닝을 통한 포스트 깊이 가시성 수집