KR100965637B1 - 상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법 - Google Patents

상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법 Download PDF

Info

Publication number
KR100965637B1
KR100965637B1 KR1020080053316A KR20080053316A KR100965637B1 KR 100965637 B1 KR100965637 B1 KR 100965637B1 KR 1020080053316 A KR1020080053316 A KR 1020080053316A KR 20080053316 A KR20080053316 A KR 20080053316A KR 100965637 B1 KR100965637 B1 KR 100965637B1
Authority
KR
South Korea
Prior art keywords
lod
resident
mipmap
texture
extrapolated
Prior art date
Application number
KR1020080053316A
Other languages
English (en)
Other versions
KR20080108051A (ko
Inventor
윌리엄 피. 주니어 뉴할
Original Assignee
엔비디아 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엔비디아 코포레이션 filed Critical 엔비디아 코포레이션
Publication of KR20080108051A publication Critical patent/KR20080108051A/ko
Application granted granted Critical
Publication of KR100965637B1 publication Critical patent/KR100965637B1/ko

Links

Images

Classifications

    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/60Analysis of geometric attributes
    • 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)
  • Geometry (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

물리 메모리에 저장된 저해상도 밉맵들을 보외하여 고해상도 비상주 밉맵들이 고 대기시간 저장 리소스로부터 검색되고 상주 밉맵들로 변환되는 동안 보외된 텍스쳐 값들을 생성하는 데 이용되도록 멀티 스레드 그래픽 프로세서가 구성된다. 보외된 텍스쳐 값들은 일시적으로 이용 불가능한 고해상도 밉맵 레벨 텍스쳐 데이터 대신에 저해상도 밉맵 레벨 텍스쳐 데이터를 이용하는 것에 비해 더 선명하게 나타나는 개선된 이미지를 제공한다. 보외 확대 또는 보외 축소 텍스쳐 필터링이 이용될 때를 결정하기 위해 보외 임계 LOD가 이용된다. 보외 임계 LOD는 비상주 밉맵이 상주 밉맵으로 변환될 때 보외 필터링을 이용하는 것으로부터 보간 필터링을 이용하는 것으로 부드럽게 천이하는 데 이용될 수 있다.
보외 필터링, 보간 필터링, 보외 임계 LOD, 상주 밉맵, 비상주 밉맵, 텍스쳐, 프로세서

Description

상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법{EXTRAPOLATION OF NONRESIDENT MIPMAP DATA USING RESIDENT MIPMAP DATA}
본 발명은 일반적으로 텍스쳐 맵핑에 관한 것이며, 보다 구체적으로는 보외법을 이용하여, 이용가능하지 않은 밉맵들에 대한 텍스쳐 맵 값들을 계산하는 것에 관한 것이다.
가상 메모리의 이용이 보다 일반화됨에 따라, 그래픽 프로세싱 중에 액세스될 수 있는 텍스쳐 맵들의 수는 텍스쳐 맵들이 통상적으로 저장되는 물리 메모리(로컬 또는 시스템)의 양에 의해 더 이상 제한되지는 않는다. 텍스쳐 데이터는 다른 저장 리소스들, 예컨대 디스크 드라이브, CD 드라이브, 또는 심지어 물리 메모리보다 액세스 대기시간이 큰 원격 서버 등에 저장될 수 있다. 텍스쳐 데이터는 프로세싱 중에 필요에 따라 검색될 수 있다. 그러나, 물리 메모리로부터 텍스쳐 데이터를 검색하는 것과는 달리, 텍스쳐 데이터가 다른 저장 리소스들로부터 검색되는 기간 중에 화질이 손상될 수 있다.
상기 밉맵들이 대형이기 때문에 상기 다른 저장 리소스들에 텍스쳐의 고 해상도 밉맵들을 저장하는 것이 매우 바람직하다. 텍스쳐의 저해상도 밉맵들은 물리 메모리에 저장될 수 있으며, 고해상도 밉맵들이 상기 다른 저장 리소스들로부터 검색되는 중에 이미지들을 생성하는 데 이용될 수 있다. 그 결과, 텍스쳐 맵 데이터는 흐리게 나타나고, 그 후 고해상도 밉맵들이 물리 메모리에 이용가능해질 때에 선명해진다.
따라서, 당해 기술 분야에서 요구되는 것은 고 대기시간 저장 리소스로부터 고해상도 밉맵들이 검색되는 중에 이용되는 저 해상도 텍스쳐 맵 데이터의 외관을 향상시키기 위한 시스템 및 방법이다. 또한, 일단 고 대기시간 저장 리소스로부터 고 해상도 밉맵이 검색되면, 보외 필터링의 이용으로부터 보간 필터링의 이용으로 부드럽게 천이하여 필터링된 텍셀 값들을 생성하는 것이 바람직하다.
발명의 요약
고 해상도 밉맵들을 비상주 밉맵으로부터 상주 밉맵으로 변환하기 위해 고 대기시간 저장 리소스로부터 고 해상도 밉맵들이 검색되는 중에, 물리 메모리에 저장된 저 해상도 밉맵들을 보외하여 보외된 텍스쳐 값들을 생성하는 멀티-스레드 그래픽 프로세서가 구성된다. 보외된 텍스쳐 값들은, 고 해상도 밉맵 레벨의 텍스쳐 데이터 대신에 저 해상도 밉맵 레벨의 텍스쳐 데이터를 이용하는 것에 비해 보다 선명하게 보여지는 향상된 이미지를 제공한다. 2개의 상주 LOD 밉맵을 보외하여 비상주 LOD 밉맵이 상주하는 경우에 필터링으로부터 생성되는 향상된 콘트라스트 및 디테일(detail)을 근접시키는 밉맵 필터를 이용하여 필터링된 텍스쳐 값들이 생성된다.
보외된 확대 또는 축소 텍스쳐 필터링이 이용되는 시점을 결정하는 데에는 보외 임계 LOD가 이용된다. 보외 임계 LOD는 비상주 밉맵이 상주 밉맵으로 변환될 때에 보외 필터링의 이용으로부터 보간 필터링의 이용으로 부드럽게 천이시키는 데 이용될 수 있다. 이상적인 밉맵의 LOD와 보외 임계 LOD(최고 해상도 상주 밉맵의 LOD 이상의 값) 간의 차로서 델타LOD(디테일의 레벨)가 계산된다. 고 액세스 대기시간 저장 리소스에 저장되어 있는 비상주 밉맵과는 대조적으로 (저 액세스 대기시간) 물리 메모리에는 상주 밉맵이 저장되어 있다. 델타LOD는 고 해상도 밉맵 텍스쳐 데이터 대신에 사용할 보외된 텍스쳐 값들을 생성하는 데 이용되는 보외 가중치를 결정하는 데 이용된다.
텍스쳐 맵의 비상주 밉맵 레벨을 텍스쳐 맵의 상주 밉맵 레벨로 변환하는 본 발명의 방법의 다양한 실시예들은, 비상주 밉맵 레벨을 디스플레이용 이미지의 렌더링에 사용할 상주 밉맵 레벨로 변환하라는 요청을 수신하는 단계, 비상주 메모리 저장 장치로부터 상주 메모리 저장 장치로 비상주 밉맵 레벨의 복사를 개시하는 단계, 및 비상주 밉맵 레벨의 복사가 완료된 경우에 이미지의 필터링 텍셀 값들을 생성하는 데 사용되는 보외 임계 LOD를 갱신하는 단계를 포함한다.
본 발명에 따르면, 고 대기시간 저장 리소스로부터 고해상도 밉맵들이 검색되는 중에 이용되는 저 해상도 텍스쳐 맵 데이터의 외관을 향상시키기 위한 시스템 및 방법이 제공된다.
이하의 설명에서는, 본 발명의 보다 상세한 이해를 제공하기 위해 다수의 구체적인 상세 내용이 개시된다. 그러나, 본 발명이 이들 하나 이상의 구체적인 상세 내용이 없이 실시될 수 있다는 것은 당업자에게는 자명할 것이다. 다른 경우에서, 본 발명을 모호하게 하는 것을 회피하기 위해 공지의 특징들은 기술하지 않았다.
도 1은 본 발명의 하나 이상의 양태에 따른 각종 LOD(level of detail)에 대한 텍스쳐 이미지의 밉맵들의 개념도를 나타낸다. 각각의 밉맵은 특정의 해상도 또는 LOD를 위해 텍스쳐 이미지를 사전 필터링한 버전이며, LOD0 밉맵(110)은 최고의 해상도를 갖고 LODN 밉맵(190)은 최저의 해상도를 갖는다. 즉, LOD 지표가 증가함에 따라, 대응하는 밉 레벨의 해상도가 감소한다. 물리 메모리에서 이용가능한 것보다 더 큰 어드레스 공간을 나타내기 위해 가상 메모리 맵핑이 사용되는 경우, 어드레스가능한 텍스쳐 데이터의 전부가 물리 메모리 내에 상주하는 것은 아니다. 도 1에 도시된 바와 같이, LOD0 밉맵(110), LOD1 밉맵(120), 및 LOD2 밉맵(130)은 물리 메모리 내에 저장되지 않으므로 비상주 밉맵들(100)이다. LOD3 밉맵(150), LOD4 밉맵(160) 및 LODN 밉맵(190)을 포함하는 상주 밉맵들(140)은 물리 메모리 내에 저장되기 때문에, 이들 밉맵들 내에 저장된 텍스쳐 데이터는 짧은 대기시간을 가지며 액세스될 수 있다.
요구되는 밉맵들의 전부가 메모리 내에 상주하지는 않는 LOD에서 소프트웨어 어플리케이션이 텍스쳐 필터링을 요구할 때, 텍스쳐 유닛은 요구되는 밉맵들로부터 텍셀들을 페치(fetch)하고, 최신 기술에서 통상적인 바 대로, 상주 밉맵 레벨들로부터 페치된 텍셀들 간에 보간된 값을 생성하는 필터를 적용한다. 소프트웨어 어플리케이션이 물리 메모리로부터 페이지 아웃(page out)된 밉맵 레벨, 즉 비상주 밉맵에 액세스하려고 시도할 때, 본 발명의 실시예들은 2개의 최인접 상주 밉맵들로부터 텍셀들을 페치하고 상주 밉맵 레벨들로부터 페치된 텍셀들로부터 보외된 값을 생성하는 필터를 적용한다. 보외된 텍스쳐 값들이 계산되고, 비상주 밉맵이 물리 메모리로 페이지 인(page into)되어 상주 밉맵이 될 때까지 이미지들을 생성하는 데 사용된다.
예를 들어, 택스쳐 맵핑에 대하여 계산된 LOD가 LOD2이고 LOD2 밉맵(130)이 비상주이면, 도 2a와 관련하여 설명되는 바와 같이, 상주 밉맵들인 LOD3 밉맵(150) 및 LOD4 밉맵(160)을 이용하여 보외된 텍스쳐 값들이 계산된다. LOD2와 같은 비상주 LOD에 대하여 보외된 텍스쳐 값들은 보외 축소 필터를 이용하여 계산된다. 축소 필터는 텍셀들 대 픽셀들의 비율(ratio of texels to pixels)이 1보다 작을 때 사용된다. 일단 LOD2가 상주 LOD 밉맵으로 변환되면, 단일 프레임에서 보외 필터에서 종래의 보간 필터로 전환되는 대신에, 다수의 프레임에 걸쳐 필터 가중치들이 LOD2 텍셀들을 취하도록 조정되어 부드러운 시각적 천이를 제공할 수 있다. 계산된 LOD가 LOD0보다 작은 경우, 즉 LOD0보다 높은 해상도를 갖는 경우, 보외된 텍스쳐 값들은 보외 확대 필터를 이용하여 계산된다. 확대 필터는 텍셀들 대 픽셀들의 비율이 1보다 클 때 사용된다.
종래의 시스템에서, 본 기술 분야의 통상의 기술자에게 공지된 기술인 "언샤프 마스킹(unsharp masking)" 또는 "샤픈 텍스쳐(sharpen texture)"는, 계산된 LOD가 0보다 작을 때, 즉, 원하는 텍스쳐 해상도가 LOD0보다 높을 때, LOD0와 LOD1 사이에서 보외하여 LOD0로부터 저주파수 성분들의 기여분을 공제함으로써, 텍스쳐 룩업(lookup)들의 선명도를 강화시키는 데 사용된다. 본 발명은 또한 보외법(확대화 보외법)을 사용하여 0보다 작은 계산된 LOD들에 대한 텍셀 값들을 생성하지만, 새로운 보외 필터형, 예컨대, 보외 밉맵된 선형(extrapolated mipmapped linear) 및 보외 밉맵된 최근접형(extrapolated mipmapped nearest-neighbor)도 이용한다. 또한, 축소 보외법은 LOD0 이하의 LOD 값들에 대해서뿐만 아니라, 임의의 비상주 텍스쳐들에 대한 텍스쳐 값들을 계산하기 위해서도 수행된다.
도 2a는 본 발명의 하나 이상의 양태들에 따른, 비상주 밉맵들(100)과 같은 비상주 밉맵 레벨에 대한 보외된 텍스쳐 값을 생성하기 위한 방법 단계들의 흐름도이다. 단계 200에서, 본 방법은 본 기술 분야의 통상의 기술자들에게 공지된 기술들을 이용하여 이상적인 LOD를 계산한다. 이상적인 LOD의 정수 부분은 적용된 텍스쳐의 해상도와 가장 일치하는 밉맵 레벨에 대응한다. 단계 210에서, 본 방법은 이상적인 LOD 밉맵이 비상주 밉맵인지 여부를 판정하고, 비상주 밉맵이 아니라면, 이상적인 LOD 밉맵은 상주이고, 단계 225에서, 텍셀들은 파인(fine) 및 코어스(coarse) 밉맵들로부터 판독된다. 단계 210의 상세는 도 2b와 관련하여 설명된다.
종래에, 파인 밉맵은 이상적인 LOD 밉맵의 정수 부분에 대응하고 코어스 밉 맵은 정수 부분 + 1 LOD 밉맵에 대응한다. 단계 228에서, 필터 유형이 보외 밉맵된 선형인 경우, 본 방법은 파인 및 코어스 밉맵들에 대하여 쌍선형으로(bilinearly) 필터링된 텍셀 값들을 계산하고, 그 후 이상적인 LOD의 소수 부분을 이용하여 쌍선형으로 필터링된 텍셀 값들을 보간하여, 필터링된 텍셀 값을 생성한다. 필터 유형이 보외 밉맵된 최근접형인 경우, 가장 근접한 텍셀 값이 파인 및 코어스 밉맵들로부터 선택되어 2점-샘플링된 텍셀 값들을 생성한다. 그 후, 2점-샘플링된 텍셀 값들은 이상적인 LOD의 소수 부분을 이용하여 쌍선형으로 보간되어, 필터링된 텍셀 값을 생성한다. 단계 225 및 228은 종래의 텍스쳐 맵 필터링 기술들을 이용하여 수행된다.
단계 210에서, 본 방법이 이상적인 LOD 밉맵이 비상주 밉맵이라고 판정하면, 그 후 단계 230에서, 본 방법은 디바이스 드라이버에게, 이미지를 생성하는데 사용하기 위하여, 텍스쳐에 대한 하나 이상의 밉맵들이 물리 메모리로 페이지 인(page in)되어 그 밉맵들을 비상주 밉맵들에서 상주 밉맵들로 변환하여야 한다는 것을 통지한다. 단계 210에서, 이상적인 LOD가 0보다 작고 LOD0 밉맵이 상주하지 않아서, 텍셀들 대 픽셀들의 비율이 1보다 크며 보외된 확대 필터가 사용되어야 한다는 것을 나타내면, 본 방법은 이상적인 LOD 밉맵이 비상주라고 판정할 수 있다. 이상적인 LOD가 0보다 크고 이상적인 LOD에서 가장 높은 상주 밉맵을 뺀 것이 0보다 작아서, 텍셀들 대 픽셀들의 비가 1보다 작다는 것을 나타내면, 보외된 축소 필터가 사용되어야 한다. 이상적인 LOD가 LOD0과 같으면, 보외 확대 필터가 사용될 수 있다.
단계 235에서, 본 방법은 이상적인 LOD와 보외 임계 LOD와의 차로서 델타LOD를 계산하고, 즉, 델타LOD = 이상적인 LOD - 보외 임계 LOD이다. 예를 들어, 도 1을 참조하면, 이상적인 LOD가 LOD1(LOD0 밉맵(120)에 대응)일 때, 보외 임계 LOD가 LOD3(LOD3 밉맵(150)에 대응)이기 때문에, 델타LOD는 -2이다. 이상적인 LOD와 보외 임계 LOD가 소수 성분을 가질 수 있기 때문에, 델타LOD 또한 소수 성분을 가질 수 있음에 유의한다.
단계 240에서, 본 방법은 델타LOD를 이용하여 보외 가중치를 결정한다. 테이블은 델타LOD 값들에 대응하는 보외 가중치 값들을 저장한다. 본 발명의 일부 실시예들에서, 테이블은 보외 가중치 값들을 결정하는 데 이용되는 함수를 지정하도록 프로그램될 수 있다. 본 발명의 일부 실시예들은, 64(LOD, 가중치)쌍까지 LOD의 감소순으로 테이블에 로딩되도록 한다. 디폴트로 이 테이블은 6개의 쌍{(0,0), (-1,0.25), (-2, 0.5), (-4, 1.125), (-8, 2.0), (-16, 3.0)}을 포함한다.
테이블(0)의 마지막 엔트리인 -16보다 작은 델타LOD가 주어지면, 보외 가중치는 테이블(3.0)의 마지막 엔트리의 가중치, 즉 3이 될 것이다. 델타LOD가 0보다 작지만, 어플리케이션에 의해 지정된 테이블 내의 제1 엔트리보다 큰 경우, 보외 가중치는 테이블의 제1 엔트리의 가중치가 될 것이다. 테이블에서 2개의 LOD 값들, 작은 값 (LOD=-4, 가중치=1.125)과 큰 값 (LOD=-8, 가중치=2.0)의 사이에 해당하는 델타LOD 값 -5가 주어지면, 보외 가중치가 선형적으로 보간된다.
Figure 112008040663180-pat00001
단계 250에서 보외 가중치는, 코어스(coarse) LOD 밉맵과 파인(fine) LOD 밉맵으로부터 판독된 텍셀들을 이용하여 필터링된 텍셀을 생성하는 데 이용된다.
단계 245에서, 본 방법은 지정된 필터 유형이 보외 밉맵된 선형인 경우, 코어스 LOD 밉맵으로부터 4개의 텍셀들과 파인 LOD 밉맵으로부터 4개의 텍셀들을 판독한다. 지정된 필터 유형이 보외 밉맵된 최근접형(nearest-neighbor)인 경우, 본 방법은 파인 LOD 밉맵으로부터의 단일 텍셀과 코어스 LOD 밉맵으로부터 단일 텍셀을 판독한다. 파인 LOD 밉맵은 LOD가 절단된(truncated) 보외 임계치 LOD(보외 임계치 LOD의 정수 부분)와 동일한 밉맵이고, 코어스 LOD 밉맵은 파인 LOD에 1을 더한 것과 동일한 LOD를 갖는 저 해상도의 상주 밉맵이다.
단계 250에서, 필터 유형이 보외 밉맵된 선형인 경우, 본 방법은 텍셀 값들, Tfine 및 Tcoarse를 생성하기 위해 텍스쳐 맵 좌표들의 소수 부분(fractional portion)들을 이용하여 코어스 및 파인 LOD 밉맵들로부터 판독된 텍셀들을 쌍선형으로 보간한다. 필터 유형이 보외 밉맵된 최근접형인 경우, 본 방법은 파인 LOD 밉맵으로부터 판독된 텍셀을 Tfine로서, 코어스 LOD로부터 판독된 텍셀을 Tcoarse로서 제공한다. 그 후, 단계 250에서 본 방법은 Tfine, Tcoarse 및 보외 가중치인 W를 이용하여 보외된 텍셀값을 이하의 수학식 2를 이용하여 계산한다.
Figure 112008040663180-pat00002
보외된 텍셀 값은 추가의 보외된 텍셀값들과 결합되어 이방성 텍스쳐 맵핑 또는 그외의 필터링된 텍스쳐 함수들에 대한 필터링된 텍셀 값들을 생성할 수 있다. 그 후, 보외된 텍셀 값은 저장 및/또는 표시될 렌더링 이미지를 생성하는 데 이용된다.
도 2b는 본 발명의 하나 이상의 양태에 따른, 이상적인 LOD에 대응하는 밉맵이 상주인지의 여부를 판정하기 위한 도 2a의 방법의 단계 210의 흐름도이다. 단계 212에서, 본 방법은 이상적인 LOD가 0보다 작은, 즉, LOD0보다 작은지 여부를 판정하고, 그러한 경우에는, 단계 214에서 본 방법은 LOD0 밉맵이 상주 밉맵인지의 여부를 판정한다. 단계 214에서 본 방법이 LOD0 밉맵이 상주한다고 판정하면, 단계 216에서 확대 텍스쳐 필터에 대해 지정된 필터 유형이 단계 228에서 사용된다. 단계 214에서 본 방법이 LOD0 밉맵이 상주하지 않는다고 판정하면, 단계 217에서 보외된 확대 텍스쳐 필터에 대해 지정된 필터 유형이 단계 250에서 사용된다.
단계 212에서 본 방법이 이상적인 LOD가 0 이상인지의 여부를 판정하면, 단계 218에서 본 방법은 이상적인 LOD가 보외 임계치 LOD 이상인지의 여부를 판정한다. 단계 218에서 본 방법이 이상적인 LOD 밉맵이 보외 임계치 LOD 이상이라고 판정하면, 단계 220에서 축소 텍스쳐 필터에 대해 지정된 필터 유형이 사용되어 단계 228에서 보간법을 이용하여 필터링된 텍셀 값을 계산한다. 그 외의 경우, 단계 221에서, 보외된 축소 필터에 대해 지정된 필터 유형은 단계 250에서 보외법을 이 용하여 필터링된 텍셀값을 계산하는 데 이용된다.
도 2c는 본 발명의 하나 이상의 양태에 따른, 텍셀값이 상주 밉맵으로부터 보외되어야 하는지의 여부를 판정하기 위한 방법의 단계들을 나타내는 흐름도이다. 그래픽 데이터를 프로세싱하는 데 사용되는 셰이더 프로그램은 술어(predicates) 또는 조건 코드를 이용하여 픽셀 셰이더 프로그램에서 후속하는 분기 거동을 결정하도록 구성될 수 있다. 술어 또는 조건 명령어들은, 명령어에 의해 지정된 셰이더 프로그램 술어 또는 조건 코드가 제1 값을 갖는 경우에 하나의 경로가 실행되고, 셰이더 프로그램 술어 또는 조건 코드가 다른 값을 갖는 경우에는 다른 경로가 실행되는 조건 실행 경로들을 포함시키는 데 이용될 수 있다. 단계들 200, 210, 및 230은 도 2a와 결합하여 설명하는 경우에 완성된다. 단계 265에서 본 방법은, 이상적인 LOD에 대응하는 밉맵이 비상주 밉맵임을 나타내도록 셰이더 프로그램 조건 값(술어 또는 조건 코드)을 설정한다. 본 발명의 그외의 실시예들에서, 본 방법은 또한 셰이더 프로그램 조건 값으로서 델타LOD를 계산하고 저장한다. 단계 270에서, 셰이더 프로그램 명령어들이 실행되고 보간되거나, 또는 보외된 텍셀 값들이 계산된다. 구체적으로, 디폴트 조건 값이 사용되는 경우, 셰이더 프로그램은 보간된 텍셀값을 생성하기 위해 종래의 보간을 행하는 제1 명령어들의 세트를 실행한다. 셰이더 프로그램 조건 값이, 이상적인 밉맵이 비상주 밉맵임을 나타내는 경우, 상이한 명령어들의 세트가 사용되어 보외된 텍셀값을 생성한다.
시스템 개요
도 3은 본 발명의 하나 이상의 양태를 구현하도록 구성되는 컴퓨터 시스템을 나타내는 블록도이다. 도 3은 본 발명의 일 실시예에 따른 컴퓨터 시스템(300)의 블록도이다. 컴퓨터 시스템(300)은 메모리 브리지(305)를 포함하는 버스 경로를 통해 통신하는 시스템 메모리(304) 및 CPU(central processing unit)(302)를 포함한다. 본 발명의 일부 실시예에서, 시스템 메모리(304)에 저장된, 상주 밉맵(resident mipmap)들(325)과 같은 텍스처 데이터는, 그 데이터가 결정론적인 대기시간(deterministic latency)을 가지고 병렬 프로세싱 서브시스템(312)에 제공될 수 있기 때문에 "상주"로 간주된다. 본 발명의 다른 실시예들에서, 시스템 메모리(304)에 저장된 텍스처 데이터는 적당한 대기시간을 갖고 병렬 프로세싱 서브시스템(312)에 제공될 수 없기 때문에, "비상주"로 간주된다. 적당한 대기시간은 쌍방향 프레임 레이트(interactive frame rate)를 지원하는 데 필요하다.
시스템 메모리(304)는 밉맵들과 같은 데이터의 위치를 지정하는 명령어 스트림, 및 프로그램 명령어들을 병렬 프로세싱 서브시스템(312)에 제공하도록 구성되는 디바이스 드라이버(322)를 포함하기도 한다. 프로그램 명령어들 및 데이터는 소프트웨어 어플리케이션에 의해 생성되고 시스템 메모리(304) 또는 시스템(300)의 다른 디바이스들 내의 메모리에 저장될 수 있다. 디바이스 드라이버(322)는 병렬 프로세싱 서브시스템(312)의 특정 능력들에 기초하여 병렬 프로세싱 서브시스템(312)이 실행하는 명령어들을 변환하도록 CPU(302)에 의해 실행된다. Direct3D 또는 OpenGL과 같은 종래의 그래픽 어플리케이션 프로그래밍 인터페이스(application programming interface; API)일 수 있는 API에 의해 명령어들이 지정될 수 있다.
예를 들면, 노스브리지 칩일 수 있는 메모리 브리지(305)는 버스 또는 다른 통신 경로(306)(예를 들면, HyperTransport 링크)를 경유하여 I/O(input/output) 브리지(307)에 접속된다. 예를 들면, 사우스브리지 칩일 수 있는, I/O 브리지(307)는 하나 이상의 사용자 입력 디바이스(308)(예를 들면, 키보드, 마우스)로부터 사용자 입력을 수신하고 그 입력을 경로(306) 및 메모리 브리지(305)를 경유하여 CPU(302)에 전달한다. 병렬 프로세싱 서브시스템(312)은 버스 또는 다른 통신 경로(313)(예를 들면, PCI 익스프레스(PCI Express), 가속 그래픽 포트(Accelerated Graphics Port), 또는 HyperTransport 링크)를 경유하여 메모리 브리지(305)에 연결되는데, 일 실시예에서 병렬 프로세싱 서브시스템(312)은 픽셀들을 디스플레이 디바이스(310)(예를 들면, 종래의 CRT 또는 LCD 기반 모니터)에 전달하는 그래픽 서브시스템이다. 시스템 디스크(314)는 I/O 브리지(307)에 접속되기도 한다. 일부 밉맵, 특히 더 많은 저장 공간을 필요로 하는 고 해상도 레벨들은, 원격 서버, CD 드라이브, DVD 드라이브 등 중 하나 또는 디스크(314)와 같은 고 대기시간 저장 장치에 저장된다. 비상주 밉맵들(335)과 같은 이러한 밉맵들은, 쌍방향 렌더링 동안 병렬 프로세싱 서브시스템(312)에 의해 액세스될 수 있는 상주 밉맵들로 될 필요가 있을 때 더 저 대기시간 메모리 저장 장치로 로딩된다.
스위치(316)가 I/O 브리지(307)와, 네트워크 어댑터(318)와 같은 다른 컴포넌트들 사이 및 각종 애드-인(add-in) 카드들(320 및 321) 사이에 접속을 제공한다. USB 또는 다른 포트 접속들, CD 드라이브들, DVD 드라이브들, 필름 레코딩 디바이스들 등을 포함하는 다른 컴포넌트들(명백히 도시되지는 않음)이 I/O 브리 지(307)에 접속될 수도 있다. 도 3의 다양한 컴포넌트를 상호접속하는 통신 경로들은 PCI(Peripheral Component Interconnect), PCI 익스프레스(PCI-E), AGP(Accelerated Graphics Port), HyperTransport 또는 임의의 다른 버스 또는 점 대 점(point-to-point) 통신 프로토콜(들)과 같은 임의의 적합한 프로토콜들을 사용하여 구현될 수 있고, 상이한 디바이스 사이의 접속들은 본 기술분야에서 알려진 상이한 프로토콜을 사용할 수 있다.
도 4에 병렬 프로세싱 서브시스템(312)의 실시예가 도시된다. 병렬 프로세싱 서브시스템(312)은, 로컬 병렬 프로세싱(parallel-processing; PP) 메모리(404)에 각각이 연결되는 하나 이상의 병렬 프로세싱 유닛(PPU)들(402)을 포함한다. 일반적으로, 병렬 프로세싱 서브시스템은 U개의 PPU를 포함하고, 여기서 U≥1 이다. (본 명세서에서, 유사한 물체들의 복수의 인스턴스는 그 물체를 식별하는 참조번호 및 필요한 경우에 인스턴스를 식별하는 삽입구적인(parenthetical) 숫자들을 이용하여 표시된다.) PPU들(402) 및 PP 메모리들(404)은 예를 들면, 프로그램가능 프로세서들, ASIC(application specific integrated circuit)들, 및 메모리 디바이스들과 같은 하나 이상의 집적 회로 디바이스를 이용하여 구현될 수 있다.
PPU(402)(0)에 대하여 상세하게 도시된 바와 같이, 각 PPU(402)는 통신 경로(313)를 경유하여 시스템(300)의 나머지와 통신하고, 메모리 브리지(305)에 접속(또는, 대안적인 일 실시예에서, CPU(302)에 직접 접속)하는 호스트 인터페이스(406)를 포함한다. 일 실시예에서, 통신 경로(313)는 PCI-E 링크이고, 본 기술분야에서 알려진 바와 같이 전용 레인들이 각 PPU(402)에 할당된다. 다른 통신 경 로들이 사용될 수도 있다. 호스트 인터페이스(406)는 통신 경로(313)에서 송신용 패킷들(또는 다른 신호들)을 발생시키고 통신 경로(313)로부터의 모든 인입 패킷(incoming packet)들(또는 다른 신호들)을 수신하고 그것들을 PPU(402)의 적절한 컴포넌트들로 보낸다. 예를 들면, 프로세싱 태스크들에 관련된 커맨드들은 프론트 엔드 유닛(412)로 지향될 수 있고, 메모리 동작들(예를 들면, PP 메모리(404)에 대한 판독 또는 기입)에 관련된 커맨드들은 메모리 인터페이스(414)로 지향될 수 있다. 호스트 인터페이스(406), 프론트 엔드 유닛(412), 및 메모리 인터페이스(414)는 일반적으로 종래의 설계에 따른 것일 수 있고, 본 발명에 중요하지 않기 때문에 상세한 설명은 생략된다.
각 PPU(402)는 바람직하게는, 고도의 병렬 프로세서(hilghy parallel processor)를 구현한다. PPU(402)(0)에 대해 자세하게 도시된 바와 같이, PPU(402)는 어떤 숫자 C개의 코어들(408)을 포함하고, 여기서 C≥1 이다. 각 프로세싱 코어(408)는 다수(예를 들어, 수십 또는 수백개)의 스레드를 동시에 실행하는 것이 가능하고, 각 스레드는 프로그램의 인스턴스이며, 멀티스레딩 프로세싱 코어(multithreaded processing core)(408)의 일 실시예가 아래에 기술된다. 코어들(408)이 작업 분배 유닛(410)을 경유하여 실행될 프로세싱 태스크들을 수신하고, 작업 분배 유닛(410)은 프론트 엔드 유닛(412)로부터 프로세싱 태스크들을 정의하는 커맨드들을 수신한다. 작업 분배 유닛(410)은 작업을 분배하기 위한 다양한 알고리즘을 구현할 수 있다. 예를 들면, 일 실시예에서, 작업 분배 유닛(410)은 새로운 프로세싱 태스크를 수용하기에 충분한 리소스들을 갖는지 어떤지의 여부를 나 타내는 "준비(ready)" 신호를 각 코어(408)로부터 수신한다. 새로운 프로세싱 태스크가 도착하는 경우, 작업 분배 유닛(410)은 준비 신호를 어서트하는 코어(408)에 태스크를 할당한다; 만약 어떤 코어(408)도 준비 신호를 어서트하지 않는다면, 작업 분배 유닛(410)은 코어(408)에 의해 준비 신호가 어서트될 때까지 새로운 프로세싱 태스크를 보유한다. 본 기술분야의 통상의 기술자들은 다른 알고리즘들이 사용될 수도 있고 작업 분배 유닛(410)이 인입 프로세싱 태스크들을 분배하는 특정한 방식은 본 발명에서 중요하지 않다는 것을 인식할 것이다.
코어들(408)은 다양한 외부 메모리 디바이스에 대하여 판독 또는 기입하기 위하여 메모리 인터페이스(414)와 통신한다. 일 실시예에서, 메모리 인터페이스(414)는 호스트 인터페이스(406)에 접속될 뿐 아니라, 로컬 PP 메모리(404)와 통신하도록 구성된 인터페이스를 포함하고, 이로써 코어들은 시스템 디스크(314)를 포함하여, 시스템 메모리(304) 또는 PPU(402)에 한정되지 않는 다른 메모리와 통신할 수 있다. 메모리 인터페이스(414)는 일반적으로 종래의 설계에 따른 것일 수 있고, 상세한 설명은 생략된다.
코어들(408)은 선형 및 비선형 데이터 변환, 비디오 및/또는 오디오 데이터의 필터링, 모델링 연산들(예를 들면, 위치, 속도 및 물체들의 다른 속성들을 결정하기 위해 물리 법칙들을 적용하는 것), 이미지 렌더링 동작들(예를 들면 버텍스 셰이더(vertex shader), 지오메트리 셰이더(geometry shader) 및/또는 픽셀 셰이더(pixel shader) 프로그램들) 등을 포함하지만 이에 제한되지 않는 광범위한 어플리케이션들에 관련된 프로세싱 태스크들을 실행하도록 프로그래밍될 수 있다. PPU 들(402)은 시스템 메모리(304) 및/또는 로컬 PP 메모리들(404)에서 내부(온칩) 메모리로, 상주 밉맵(425)과 같은 데이터를 전송할 수 있고, 그 데이터를 프로세싱할 수 있고, 결과 데이터를 다시 시스템 메모리(304) 및/또는 로컬 PP 메모리들(404)에 기입할 수 있고, 그러한 데이터는 예를 들면, CPU(302) 또는 다른 병렬 프로세싱 서브시스템(312)을 포함하는 다른 시스템 컴포넌트들에 의해 액세스될 수 있다.
도 3을 다시 참조하면, 일부 실시예에서, 병렬 프로세싱 서브시스템(312) 내의 PPU들(402)의 일부 또는 전부는, 메모리 브리지(305) 및 버스(313)를 경유하여 CPU(302) 및/또는 시스템 메모리(304)에 의해 공급된 그래픽 데이터로부터 픽셀 데이터를 발생시키는 것과, 픽셀 데이터를 저장하고 갱신하기 위해 (예를 들면 종래의 프레임 버퍼 및 밉맵들을 포함하는 그래픽 메모리로서 사용될 수 있는) 로컬 PP 메모리(404)와 상호작용하는 것과, 디스플레이 디바이스(310)에 픽셀 데이터를 전달하는 것 등에 관련된 다양한 태스크를 수행하도록 구성될 수 있는 렌더링 파이프라인들을 갖는 그래픽 프로세서들이이다. 일부 실시예에서, PP 서브시스템(312)은 그래픽 프로세서들로서 동작하는 하나 이상의 PPU들(402) 및 범용 계산을 위해 사용되는 하나 이상의 다른 PPU들(402)을 포함할 수 있다. PPU들은 동일하거나 상이할 수 있고, 각 PPU는 자신의 전용 PP 메모리 디바이스(들)를 갖거나 전용 PP 메모리 디바이스(들)을 갖지 않을 수 있다.
동작시, CPU(302)는 다른 시스템 컴포넌트들의 동작들을 제어 및 조정하는 시스템(300)의 마스터 프로세서이다. 특히, CPU(302)는 PPU들(402)의 동작을 제어하는 커맨드들을 발행한다. 일부 실시예에서, CPU(302)는 각 PPU(402)에 대한 커 맨드들의 스트림을, 시스템 메모리(304), PP 메모리(404), 또는 CPU(302) 및 PPU(402) 둘 다에 액세스가능한 다른 저장 위치에 위치될 수 있는 푸시버퍼(pushbuffer)(도 3에 명백하게 도시되지 않음)에 기입한다. PPU(402)는 푸시버퍼로부터의 커맨드 스트림을 판독하고 CPU(302)의 동작과 비동기적으로(asynchronously) 실행한다.
본 명세서에서 도시된 시스템이 예시적인 것이고 변형들 및 수정들이 가능하다는 것이 이해될 것이다. 브리지들의 개수 및 배열을 포함하는 접속 토폴로지는, 원하는대로 수정될 수 있다. 예를 들면, 일부 실시예에서, 시스템 메모리(304)는 브리지를 통해서 보다는 오히려 직접 CPU(302)에 접속되고, 다른 디바이스들이 메모리 브리지(305) 및 CPU(302)를 경유하여 시스템 메모리(304)와 통신한다. 다른 대안적인 토폴로지들에서, 병렬 프로세싱 서브시스템(312)은 메모리 브리지(305)에 접속하기보다는 오히려 I/O 브리지(307)에 접속되거나 CPU(302)에 직접 접속된다. 또다른 실시예들에서, I/O 브리지(307) 및 메모리 브리지(305)는 단일 칩에 집적될 수 있다. 본 명세서에 도시된 특정 컴포넌트들은 옵션이다; 예를 들면, 임의의 개수의 애드-인 카드들 또는 주변 디바이스들이 지원될 수 있다. 일부 실시예에서, 스위치(316)는 제거되고, 네트워크 어댑터(318) 및 애드-인 카드들(320, 321)이 I/O 브리지(307)에 직접 접속된다.
시스템(300)의 나머지에 대한 PPU(402)의 접속이 변할 수도 있다. 일부 실시예에서, PP 시스템(312)은 시스템(300)의 확장 슬롯에 삽입될 수 있는 애드-인 카드로서 구현된다. 다른 실시예들에서, PPU(402)는 메모리 브리지(305) 또는 I/O 브리지(307)와 같은 버스 브리지와 단일 칩 상에 집적될 수 있다. 또다른 실시예들에서, PPU(402)의 일부 또는 모둔 요소들이 CPU(302)와 함께 단일 칩 상에 집적될 수 있다.
PPU는 로컬 메모리를 포함하지 않고 로컬 PP 메모리가 임의의 양만큼 제공될 수 있고, 로컬 메모리와 시스템 메모리를 임의로 조합하여 사용할 수 있다. 예를 들면, PPU(402)는 UMA(unified memory architecture) 실시예의 그래픽 프로세서일 수 있다; 그러한 실시예들에서, 전용 그래픽(PP) 메모리는 제공되지 않거나, 거의 제공되지 않고, PPU(402)는 상주 밉맵들(325)을 저장하기 위해 배타적으로 또는 거의 배타적으로 시스템 메모리를 사용할 것이다. UMA 실시예들에서, PPU는 브리지 칩 또는 프로세서 칩에 집적될 수 있거나 PPU를 예를 들면 브리지 칩을 경유하여 시스템 메모리에 접속하는 고속 링크(예를 들면, PCI-E)를 갖는 별개의 칩으로서 제공될 수 있다.
위에서 언급된 바와 같이, 임의의 개수의 PPU들이 병렬 프로세싱 서브시스템에 포함될 수 있다. 예를 들면, 복수의 PPU들이 단일 애드-인 카드 상에 제공될 수 있거나, 복수의 애드-인 카드가 통신 경로(313)에 접속될 수 있거나, 하나 이상의 PPU가 브리지 칩에 집적될 수 있다. 멀티-PPU 시스템의 PPU들은 서로 동일하거나 상이할 수 있다. 예를 들면, 상이한 PPU가 상이한 개수의 코어들, 상이한 양의 로컬 PP 메모리 등을 가질 수 있다. 복수의 PPU가 존재할 때, 그들은 단일 PPU를 이용하여 가능한 것보다 더 높은 스루풋(throughput)에서 데이터를 프로세싱하도록 병렬로 동작될 수 있다.
하나 이상의 PPU를 포함하는 시스템은 데스크탑, 랩탑, 또는 핸드헬드 개인 용 컴퓨터들, 서버들, 워크스테이션들, 게임 콘솔들, 임베디드 시스템(embedded system)들 등을 포함하는 다양한 구성들 및 폼 팩터들로 구현될 수 있다.
코어 개관
도 5는 본 발명의 하나 이상의 양태에 따른, 도 4의 병렬 프로세싱 서브시스템(312)을 위한 병렬 프로세싱 유닛(420)의 블록도이다. PPU(402)는 다수의 스레드를 병렬로 실행하도록 구성된 코어(408)(또는 복수의 코어(408))를 포함하고, 여기서 "스레드"라는 용어는 입력 데이터의 특정한 세트 상에서 실행되는 특정한 프로그램의 인스턴스를 가리킨다. 일부 실시예에서, SIMD(single-instruction, multiple-data) 명령어 발행 기술들이 복수의 종속적인 명령 유닛들을 제공하지 않고 다수의 스레드의 병렬 실행을 지원하는 데 사용된다.
일 실시예에서, 각 코어(408)는 단일 명령 유닛(512)으로부터 SIMD 명령어들을 수신하도록 구성된 P(예를 들면, 8, 16 등)개의 병렬 프로세싱 엔진들(502)의 어레이를 포함한다. 각 프로세싱 엔진(502)은 바람직하게는 기능 유닛들(예를 들면, 산술 논리 유닛(arithmetic logic unit)들 등)의 동일한 세트를 포함한다. 본 기술분야에 공지되어 있듯이, 기능 유닛들은 파이프라인이 설치되어 이전의 명령어가 완료되기 전에 새로운 명령어가 발행되는 것을 허용한다. 기능 유닛들의 임의의 조합이 제공될 수 있다. 일 실시예에서, 기능 유닛들은 정수 및 부동 소수점 계산(예를 들면, 덧셈 및 곱셈), 비교 연산들, 부울 논리 연산(Boolean operation)들(AND, OR, XOR), 비트 시프팅(bit-shifting), 및 다양한 대수 함수들(예를 들면, 평면 보간(planar interpolation), 삼각 함수, 지수 함수 및 로그 함수들 등)을 포함하는 다양한 연산들을 지원하고; 동일한 기능 유닛 하드웨어가 상이한 연산들을 수행하는 것을 레버리지할(leveraged) 수 있다.
각 프로세싱 엔진(502)은 그것의 로컬 입력 데이터, 중간 결과 등을 저장하기 위해 LRF(local register file)(504)의 공간을 사용한다. 일 실시예에서, 로컬 레지스터 파일(504)은 물리적으로 또는 논리적으로 P개의 레인들로 분할되고, 각각은 (각 엔트리가 예를 들면, 32 비트 워드를 저장할 수 있는 경우) 소정 개수의 엔트리들을 갖는다. 하나의 레인은 각 프로세싱 엔진(502)에 할당되고, 상이한 레인들 내의 대응하는 엔트리들은 SIMD 실행을 용이하게 하기 위해 동일한 프로그램을 실행하는 상이한 스레드들에 대한 데이터로 채워질 수 있다. 일부 실시예에서, 각 프로세싱 엔진(502)은 그것에 할당된 레인의 LRF 엔트리들만을 액세스할 수 있다. 로컬 레지스터 파일(504)의 엔트리들의 총수는 바람직하게는 프로세싱 엔진(502)당 복수의 동시적인 스레드들을 지원할 만큼 충분히 크다.
각 프로세싱 엔진(502)은 코어(408)의 모든 프로세싱 엔진(502) 사이에서 공유되는 온칩 공유 메모리(506)에 액세스할 수도 있다. 공유 메모리(506)는 원하는 만큼 클 수 있고, 일부 실시예에서, 임의의 프로세싱 엔진(502)은 공유 메모리(506)의 임의의 위치에 대하여 동등하게 낮은 대기시간(예를 들면, 로컬 레지스터 파일(504)에 액세스하는 것에 필적함)을 갖고 판독 또는 기입할 수 있다. 일부 실시예에서, 공유 메모리(506)는 공유 레지스터 파일로서 구현되고, 다른 실시예들에서, 공유 메모리(506)는 공유 캐시 메모리를 사용하여 구현될 수 있다.
공유 메모리(506) 외에, 일부 실시예가 예를 들면, 종래의 RAM 또는 캐시로서 구현될 수 있는, 부가적인 온칩 파라미터 메모리 및/또는 캐시(들)(508)을 제공할 수도 있다. 파라미터 메모리/캐시(508)는 예를 들면 상태 파라미터들, 및/또는 복수의 스레드가 필요로 할 수 있는 다른 데이터(예를 들면, 다양한 상수들)를 보유하기 위해 사용될 수 있다. 프로세싱 엔진들(502)은 메모리 인터페이스(414)를 통하여 칩 외부의(off-chip) "글로벌" 메모리(520)에 액세스할 수도 있으며, 글로벌 메모리(520)는, 예를 들면, PP 메모리(404) 및/또는 시스템 메모리(304)를 포함할 수 있고, 시스템 메모리(304)는 전술된 바와 같이 호스트 인터페이스(406)를 경유하여 메모리 인터페이스(414)에 의해 액세스가능하다.
PPU(402) 외부의 임의의 메모리가 글로벌 메모리(520)로서 이용될 수 있다는 것이 이해될 것이다. 도 5에 나타낸 바와 같이, 글로벌 메모리(520)는 PP 메모리(404), 시스템 메모리(304) 및 시스템 디스크(314)를 포함한다. 이전에 기술된 바와 같이, 상주 밉맵(mipmap)들과 같은 글로벌 메모리(520)에 저장된 텍스쳐 데이터는 상주 텍스쳐 데이터로 간주되고, 비상주 밉맵들(335)과 같은 글로벌 메모리(520)에 저장된 다른 텍스쳐 데이터는 비상주 텍스쳐 데이터로 간주된다. 비상주 텍스쳐 데이터는 시스템 디스크(314)에서 시스템 메모리(304) 또는 PP 메모리(404)로 복사됨에 따라, 텍스쳐 데이터는 상주 텍스쳐 데이터가 된다. 도 3의 CPU(302)에서 실행되는 드라이버 프로그램은 어떤 밉맵들이 상주 밉맵들이고, 어떤 밉맵들이 비상주인가를 지정하는데 이용될 수 있다. 본 발명의 다른 실시예들에서, 텍셀 어드레스의 적어도 일부분에 기초하여 어떤 밉맵이 상주이거나 비상주인 지가 결정된다. 프로세싱 엔진들(502)은 (명확히 도시되지 않은) 상호접속을 통해 임의의 프로세싱 엔진(502)이 글로벌 메모리(520)를 액세스하도록 하는 메모리 인터페이스(414)에 연결될 수 있다.
일 실시예에서, 각각의 프로세싱 엔진(502)은, 예를 들어, 로컬 레지스터 파일(504)에 할당된 레인(lane)의 상이한 부분에서의 각각의 스레드와 연관된 현재 상태 정보를 유지함으로써, 멀티스레드되어 동시에 G개(예를 들어, 24)까지의 스레드들을 실행할 수 있다. 프로세싱 엔진들(502)은 바람직하게는 하나의 스레드로부터 다른 스레드로 신속히 전환되도록 설계되어, 상이한 스레드들로부터의 명령어들이 효율의 손실 없이 임의의 시퀀스에서 발행될 수 있다.
명령어 유닛(512)은, 임의의 주어진 프로세싱 주기에 대해, 동일한 명령어(INSTR)가 모든 P 프로세싱 엔진들(502)에 발행되도록 구성된다. 따라서, 단일 클록 주기의 레벨에서, 코어(408)는 P-형 SIMD 마이크로아키텍처를 구현한다. 각각의 프로세싱 엔진(502)도 멀티스레드되어 동시에 G개까지의 스레드들을 지원하기 때문에, 본 실시예의 코어(408)는 동시에 P*G개까지의 스레드들을 실행할 수 있다. 예로서, P=16이고, G=24이면, 코어(408)는 584까지의 동시 스레드들을 지원한다.
명령어 유닛(512)은 동일한 명령어를 모두 P개의 프로세싱 엔진들(502)로 병렬로 발행하기 때문에, 코어(408)는 바람직하게는 "SIMD 스레드 그룹들" 내의 스레드들을 프로세싱하는데 이용된다. 본원에 이용된 바와 같이, "SIMD 스레드 그룹"은 상이한 입력 데이터에 대해 동일 프로그램을 실행하는 P개까지의 스레드들의 그룹을 지칭하고, 그 그룹 중 하나의 스레드는 각각의 프로세싱 엔진(502)에 할당된 다. SIMD 스레드 그룹은 더 적은 P개의 스레드들을 포함할 수 있는데, 이 경우 SIMD 스레드 그룹이 프로세싱되고 있을 때 프로세싱 엔진들(502) 중 일부가 주기들 동안 정지할 것이다. 더 많은 P개의 스레드들을 포함할 수도 있는데, 이 경우 SIMD 스레드 그룹은, 연속하는 클록 주기들에 걸쳐 프로세싱이 발생할 것이다. 각각의 프로세싱 엔진(502)은 동시에 G개까지의 스레드들을 지원할 수 있기 때문에, G개까지의 SIMD 스레드 그룹들이 임의의 주어진 시간에 코어(408)에서 실행될 수 있게 된다.
각각의 클록 주기 동안, G개의 SIMD 스레드 그룹들 중 선택된 하나를 구성하는 모든 P개의 스레드들에 하나의 명령어가 송신된다. 어떤 스레드가 현재 활성인지를 나타내기 위해, 명령어와 함께 관련 스레드에 대한 "활성 마스크"가 포함될 수 있다. 예를 들어, 명령어를 실행할 때, 로컬 레지스터 파일(504)에서 할당된 레인의 어떤 부분이 이용되어야 하는지를 결정하기 위해, 프로세싱 엔진(502)은 텍스쳐 식별자로서 활성 마스크를 이용한다. 따라서, 소정의 주기에서, 코어(408)의 모든 프로세싱 엔진들(502)은 동일한 SIMD 스레드 그룹 중 상이한 스레드들에 대해 명목상 동일한 명령어를 실행한다. (일부 예들에서, SIMD 스레드 그룹 중 일부 스레드들은 예를 들어, 조건 또는 술어 명령어들, 프로그램의 분기들에서의 발산(divergence) 등으로 인해, 일시적으로 정지될 수 있다.)
코어(408)의 동작은 바람직하게는 코어 인터페이스(503)를 통해 제어된다. 일부 실시예에서, 코어 인터페이스(503)는 프로세싱될 데이터(예를 들어, 프리미티브 데이터, 버텍스 데이터, 및/또는 픽셀 데이터)뿐만 아니라, 작업 분배 유 닛(410)으로부터 데이터가 프로세싱되는 방법(예를 들어, 어떤 프로그램이 실행될 것인지)을 정의하는 커맨트들과 상태 파라미터들을 수신한다. 스레드들 또는 SIMD 스레드 그룹들은 삼각 래스터화기(triangle rasterizer)들과 같은 고정-함수 유닛들에 의해 또는 다른 스레드들에 의해 개시될 수 있다. 코어 인터페이스(503)는 프로세싱될 데이터를 공유 메모리(506)로 로딩하고 파라미터들을 파라미터 메모리(508)로 로딩할 수 있다. 코어 인터페이스(503)는 또한 명령어 유닛(512)의 각각의 새로운 스레드 또는 SIMD 스레드 그룹을 초기화하고, 그후 명령어 유닛(512)에 신호를 보내어 스레드들의 실행을 시작한다. 스레드 또는 SIMD 스레드 그룹의 실행이 완료될 때, 코어(408)는 바람직하게는 코어 인터페이스(503)에 통지한다. 코어 인터페이스(503)는 그 후, 예를 들어, 공유 메모리(506)로부터의 출력 데이터를 검색하고 및/또는 부가적인 스레드들 또는 SIMD 스레드 그룹들의 실행을 위해 코어(408)를 준비하기 위해 다른 프로세스들을 초기화할 수 있다.
본원에 설명된 코어 아키텍처는 예시적이고, 변경들 및 수정들이 가능하는 것이 이해될 것이다. 임의 수의 프로세싱 엔진들이 포함될 수 있다. 일부 실시예들에서, 각각의 프로세싱 엔진은 그 자신의 로컬 레지스터 파일을 갖고, 스레드 당 로컬 레지스터 파일 엔트리들의 할당은 원하는 바 대로 고정되거나 설정가능할 수 있다. 또한, 하나의 코어(408)만을 나타내었지만, PPU(402)는 임의 수의 코어들(408)들을 포함할 수 있고, 코어들(408)은 바람직하게는 서로 설계가 동일하기 때문에 실행 거동은 코어(408)가 특정 프로세싱 태스크(task)를 수신하는 지에 의존하지 않는다. 각각의 코어(408)는 바람직하게는 다른 코어들(408)에 대해 독립 적으로 동작하고, 그 자신의 프로세싱 엔진들, 공유 메모리 등을 갖는다.
스레드 어레이들 및 협력 스레드 어레이들
일부 실시예들에서, 도 5의 멀티스레드된 프로세싱 코어(408)는 스레드 어레이들을 이용하여 범용 계산들을 실행할 수 있다. 본원에 이용된 바와 갈이, "스레드 어레이"는 출력 데이터 세트를 생성하기 위해 입력 데이터 세트에 대해 동일 프로그램을 동시에 실행하는 다수(n0)의 스레드들로 구성된 그룹이다. 스레드 어레이의 각각의 스레드는 실행 동안 스레드에 액세스할 수 있는 고유 스레드 식별자("스레드 ID")를 할당한다. 스레드 ID는 스레드의 프로세싱 거동의 다양한 양태들을 제어한다. 예로서, 스레드 ID는 스레드가 프로세스되는 부분이 입력 데이터 세트의 어떤 부분인지를 결정하고 및/또는 스레드가 생성되거나 기록되는 부분이 출력 데이터 세트의 어떤 부분인지를 결정하기 위해 이용될 수 있다.
일부 실시예들에서, 스레드 어레이들은 "협력" 스레드 어레이들, 즉 CTA들이다. 스레드 어레이들의 다른 타입들에 있어서, CTA는 입력 데이터 세트에 대해 동일한 프로그램(본원에 "CTA 프로그램"으로서 지징됨)을 동시에 실행하여 출력 데이터 세트를 생성하는 다중 스레드들의 그룹이다. CTA에서, 스레드들은 스레드 ID에 의존하는 방식으로 서로 데이터를 공유함으로써 협력할 수 있다. 예로서, CTA에서, 데이터는 하나의 스레드에 의해 생성될 수 있고, 다른 하나에 의해 소멸될 수 있다. 일부 실시예들에서, 동기화 명령어들은 데이터가 공유될 지점들에서 CTA 프로그램 코드에 삽입될 수 있어, 데이터는, 소멸 스레드가 그것에 액세스하기 전에 생성 스레드에 의해 실제 생성되었다는 것을 보장할 수 있다. CTA의 스레드들 사 이에서 공유되는 데이터가 존재하는 경우 그 범위는 CTA 프로그램에 의해 결정되고, 따라서, CTA들을 이용하는 특정 어플리케이션에서, CTA의 스레드들은 CTA 프로그램에 의존하여, 서로 데이터를 실제 공유할 수 있거나, 공유하지 않을 수 있다는 것이 이해될 것이다.
일부 실시예들에서, CTA의 스레드들은 도 5의 공유 메모리(506)를 이용하여 입력 데이터 및/또는 동일한 CTA에서의 다른 스레드들과의 중간 결과들을 공유한다. 예로서, CTA 프로그램은 특정 데이터가 기록될 공유 메모리(506)에 어드레스를 계산하는 명령어를 포함할 수 있는데, 그 어드레스는 스레드 ID의 함수이다. 각각의 스레드는 그 자신의 스레드 ID를 이용하여 함수를 연산하고 대응하는 위치를 기록한다. 어드레스 함수는 바람직하게는, 상이한 스레드들이 상이한 위치들을 기록하도록 정의되고; 함수가 결정론적인 한, 임의의 스레드에 의해 기록된 위치는 예측가능하다. CTA 프로그램은 데이터가 판독될 공유 메모리(506) 내의 어드레스를 계산하는 명령어를 포함할 수도 있는데, 그 어드레스는 스레드 ID의 함수이다. 적당한 함수들을 정의하고 동기화 기술들을 제공함으로써, 데이터는 CTA의 하나의 스레드에 의해 공유 메모리(506) 내의 주어진 위치에 기록될 수 있고, 예측가능한 방식으로 동일한 CTA의 상이한 스레드에 의해 해당 위치로부터 판독될 수 있다. 결과적으로, 스레드들 간에 공유하는 데이터의 임의의 원하는 패턴이 지원될 수 있고, CTA의 임의의 스레드는 동일한 CTA의 임의의 다른 스레드와 데이터를 공유할 수 있다.
CTA들(또는 다른 타입의 스레드 어레이들)은 바람직하게는, 데이터-병렬 분 해에 적합한 계산들을 수행하는데 이용된다. 본원에 이용된 바와 같이, "데이터-병렬 분해(data-parallel decomposition)"는, 출력 데이터를 생성하기 위해 입력 데이터에 대해 병렬로 동일한 알고리즘 다중 시간들을 실행함으로써 계산 문제가 해결되는 임의의 상황을 포함한다; 예를 들어, 데이터-병렬 분해의 하나의 공통 일례는 출력 데이터 세트의 상이한 부분들을 생성하기 위해, 동일한 프로세싱 알고리즘을 입력 데이터 세트의 상이한 부분들에 적용하는 것을 포함한다. 데이터-병렬 분해에 대해 보정가능한 문제들의 예들은 행렬 대수, 다차원의 선형 및/또는 비선형 변환들(예를 들어, 고속 푸리에 변환), 및 다차원의 컨볼루션 필터들을 포함하는 다수의 필터링 알고리즘들, 다차원의 분리가능한 필터들 등을 포함한다. 입력 데이터 세트의 각각의 부분에 적용되는 프로세싱 알고리즘은 CTA 프로그램에 지정되고, CTA의 각각의 스레드는 입력 데이터 세트의 하나의 부분에 대해 동일한 CTA 프로그램을 실행한다. CTA 프로그램은 광범위한 수학적 및 논리적 연산들을 이용하여 알고리즘들을 구현할 수 있고, 프로그램은 조건 또는 분기 실행 경로들 및 직접 및/또는 간접 메모리 액세스를 포함할 수 있다. 도 2B와 관련하여 이전에 설명된 바와 같이, 그래픽 데이터를 프로세싱하는데 이용된 쉐이더 프로그램은 술어 또는 조건 명령어들을 이용하여 조건 실행 경로들을 포함하도록 구성될 수 있다. 예로서, 계산된 델타LOD 값에 기초하여, 쉐이더 프로그램으로 하여금 필터링된 텍셀 값을 생성하기 위해 보외법을 수행하기 위한 명령어들을 실행하게 하는 술어 또는 조건 코드가 결정된다. 술어 또는 조건 코드의 다른 값에 대해, 쉐이더 프로그램은 필터링된 텍셀 값을 생성하기 위해 종래의 보간법을 수행하기 위한 명 령어들을 실행한다.
하나의 실시예에서, 도 3의 CPU(302)에 대해 실행되는 드라이버 프로그램은 메모리(예를 들어, 시스템 메모리(304))의 (명확히 도시되지 않은) 푸시버퍼에 CTA를 정의하는 커맨드들을 기록하고, 그 커맨드들은 PPU(402)에 의해 메모리로부터 판독된다. 커맨드들은 바람직하게는, CTA의 스레드들의 수, 텍스쳐용 밉맵들이 상주하는 CTA를 이용하여 프로세싱될 입력 데이터 세트의 글로벌 메모리(520) 내에서의 위치, 실행될 CTA 프로그램의 글로벌 메모리(520) 내에서의 위치, 및 출력 데이터가 기록될 글로벌 메모리(520) 내에서의 위치와 같은 상태 파라미터들과 연관된다. 상태 파라미터들은 커맨드들과 함께 푸시버퍼에 기록될 수 있다. 커맨드들에 응답하여, 코어 인터페이스(503)는 코어(408)에(예를 들어, 파라미터 메모리(508)에) 상태 파라미터들을 로딩하고, 그 후, CTA 파라미터들에 지정된 수의 스레드들이 개시될 때까지 스레드들의 개시를 시작한다. 일 실시예에서, 코어 인터페이스(503)는, 스레드들이 개시될 때, 스레드들에 스레드 ID들을 실질적으로 할당한다. 보다 일반적으로, CTA의 모든 스레드들은 동일한 코어(408)에서 동일한 프로그램을 실행하기 때문에, 각각의 유효 스레드 ID가 하나의 스레드에만 할당되는 한, 임의의 스레드가 임의의 스레드 ID에 할당될 수 있다. (수치 식별자들을 포함하지만, 이에 한정되지 않는) 임의의 고유 식별자는 스레드 ID로서 이용될 수 있다. 일 실시예에서, CTA가 n0개의 스레드들을 포함하면, 스레드 ID들은 단순히 연속하는 0에서 n0-1의 (1차원적) 인덱스 값들이다. 다른 실시예들에서, 다차원 인덱 싱 스킴들이 이용될 수 있다. 데이터 공유가 스레드 ID들을 참조하여 제어되는 한, 프로세싱 엔진들에 대한 스레드들의 특정 할당은 CTA 실행의 결과에 영향을 주지 않을 것임을 주의해야 한다. 따라서, CTA 프로그램은 그것이 실행될 특정 하드웨어에 종속될 수 있다.
그래픽 파이프라인 아키텍처
도 6A는 본 발명의 하나 이상의 양태들에 따른, 그래픽 프로세싱 파이프라인(600)의 개념도이다. 도 4의 PPU(402)는 그래픽 프로세싱 파이프라인(600)을 형성하도록 구성될 수 있다. 예로서, 코어(408)는 버텍스 프로세싱 유닛(644), 지오메트리 프로세싱 유닛(648), 및 프래그먼트 프로세싱 유닛(660)의 함수들을 수행하도록 구성될 수 있다. 데이터 어셈블러(642), 프리미티브 어셈블러(646), 래스터화기(655) 및 래스터 연산 유닛(665)의 함수들은 코어(408)에 의해 수행될 수도 있고 또는 호스트 인터페이스(406)에 의해 수행될 수도 있다.
데이터 어셈블러(642)는 고차(high-order) 표면들, 프리미티브들 등에 대한 버텍스 데이터를 수집하고 버텍스 프로세싱 유닛(644)에 그 버텍스 데이터를 출력한다. 버텍스 프로세싱 유닛(644)은 버텍스 쉐이더 프로그램들을 실행하여 그 버텍스 쉐이더 프로그램들에 의해 지정된 대로 버텍스 데이터를 변환하도록 구성된 프로그램가능한 실행 유닛이다. 예로서, 버텍스 프로세싱 유닛(644)은 버텍스 데이터를, 객체-기반 좌표 표시(객체 공간)으로부터 월드 공간 또는 NDC(normalized device coordinates) 공간과 같은 선택적 기반의 좌표계로 변환하도록 프로그램될 수 있다. 버텍스 프로세싱 유닛(644)은 버텍스 데이터를 프로세싱하는데 이용하기 위해, 메모리 인터페이스(414)를 통해 PP 메모리(404)에 저장되는 데이터를 판독할 수 있다.
프리미티브 어셈블러(646)는 버텍스 프로세싱 유닛(644)으로부터의 프로세스된 버텍스 데이터를 수신하고, 지오메트리 프로세싱 유닛(648)에 의한 프로세싱을 위해, 예를 들어, 점들, 라인들, 삼각형들 등과 같은 그래픽 프리미티브들을 구성한다. 지오메트리 프로세싱 유닛(648)은 지오메트리 쉐이더 프로그램들을 실행하여, 그 지오메트리 쉐이더 프로그램들에 의해 지정된 바와 같이 프리미티브 어셈블러(646)로부터 수신된 그래픽 프리미티브들을 변환하도록 구성된 프로그램가능한 실행 유닛이다. 예로서, 지오메트리 프로세싱 유닛(648)은 그래픽 프리미티브들을 하나 이상의 새로운 그래픽 프리미티브들로 하위 분할하고, 새로운 그래픽 프리미티브들을 래스터화하는데 이용되는 평면 방정식 계수들과 같은 파라미터들을 계산하도록 프로그램될 수 있다. 지오메트리 프로세싱 유닛(648)은 파라미터들 및 새로운 그래픽 프리미티브들을 래스터화기(655)로 출력한다. 지오메트리 프로세싱 유닛(648)은 지오메트리 데이터를 프로세싱하는데 이용하기 위해, 메모리 인터페이스(414)를 통해 PP 메모리(404)에 저장되는 데이터를 판독할 수 있다.
래스터화기(655) 스캔은 새로운 그래픽 프리미티브들을 변환하여, 프래그먼트들 및 커버리지 데이터를 프래그먼트 프로세싱 유닛(660)으로 출력한다. 프래그먼트 프로세싱 유닛(660)은 프래그먼트 쉐이더 프로그램들을 실행하여, 그 프래그먼트 쉐이더 프로그램들에 의해 지정된 바와 같이 래스터화기(655)로부터 수신된 프래그먼트들을 변환하도록 구성된 프로그램가능한 실행 유닛이다. 예로서, 프래 그먼트 프로세싱 유닛(660) 및 텍스쳐 유닛(610)은 원근 교정, 텍스쳐 맵핑, 밉맵 보외법, 쉐이딩, 블렌딩 등과 같은 연산들을 수행하도록 프로그램되어, 래스터 연산 유닛(665)에 출력되는 쉐이딩된 프래그먼트들을 생성할 수 있다. 프래그먼트 프로세싱 유닛(660) 및 텍스쳐 유닛(610)은 예를 들어, 쌍선형(bilinear), 삼선형(trilinear), 이방성(anisotropic) 등과 같은 텍스쳐 필터링 연산들을 수행하도록 프로그램될 수도 있다.
프래그먼트 프로세싱 유닛(660)은, 프래그먼트 데이터를 프로세싱하는데 이용하기 위해, 메모리 인터페이스(414)를 통해 PP 메모리(404)에 저장되는 데이터를 판독할 수 있다. 메모리 인터페이스(414)는 그래픽 메모리에 저장된 데이터에 대한 판독 요청들을 생성하고 임의의 압축된 데이터를 압축 해제한다. 래스터 연산 유닛(665)은 스텐실, z 테스트 등과 같은 근거리 및 원거리 평면 클리핑(near and far plane clipping) 및 래스터 연산들을 선택적으로 수행하고, 그래픽 메모리에의 저장을 위해 프로세싱된 그래픽 데이터로서 픽셀 데이터를 출력하는 고정 함수 유닛이다. 프로세스된 그래픽 데이터는 디스플레이 디바이스(310)상의 디스플레이를 위해 그래픽 메모리에 저장될 수 있다.
텍스쳐 유닛
도 6B는 본 발명의 하나 이상의 양태들에 따른, 도 6A의 텍스쳐 유닛(610)의 블록도이다. 텍스쳐 유닛(610)은 LOD 유닛(615), 텍스쳐 샘플러 유닛(620), 어드레스 생성 유닛(625) 및 필터 유닛(630)을 포함한다. 텍스쳐 유닛(610)은 텍스쳐 맵 식별자 및 텍스쳐 맵 좌표들, 예를 들어 s, t 등을 포함하는 프로세싱을 위한 프래그먼트 데이터를 수신한다. 텍스쳐 맵 좌표들은 이상적인 LOD를 결정하기 위해, 본 기술분야의 당업자들에 알려진 기술들을 이용하여, LOD 유닛(615)에 의해 프로세스된다(도 2a 및 2c의 단계(200)).
애플리케이션은 텍스쳐 이미지 상태 데이터 구조의 멤버들로서 텍스쳐 필터들의 각각에 대한 필터 유형을 특정한다. 텍스쳐 필터들은 이 기술분야의 상태에 일반적인 것들(확대 및 축소) 및 2개의 새로운 텍스쳐 필터들, 즉, 보외 확대(extrapolated magnification) 및 보외 축소(extrapolated minification)를 포함한다. 필터 유형들은 이 기술분야의 상태에 일반적인 것들(최인접형(nearest-neighbor), 선형, 가장 근사한 밉필터링을 갖는 밉맵 최인접형(mipmapped nearest-neighbor with nearest mipfiltering), 선형 밉필터링을 갖는 밉맵 최인접형, 가장 근사한 밉필터링을 갖는 밉맵 선형, 선형 밉필터링을 갖는 밉맵 선형, 및 투명한 블랙(transparent black))을 포함한다. 투명한 블랙 필터 유형은 어떠한 필터링도 하지 않으며, 단순히 술어값(predicate value) 또는 조건 코드(condition code)가 셰이더(shader) 프로그램으로 하여금 교대 작용(alternate action)을 취하게 할 때 유용한 R=G=B=A=0을 리턴한다. OpenGL 그래픽 API(applications programming interface)에서, 이들 필터 유형들은 GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR라고 지칭된다. 보외 확대 및 보외 축소 필터들에 대한 이미지 품질을 개선하도록 지정될 수 있는 추가적인 새로운 필터 유형들에는, 보외 밉맵 최인접형 및 보외 밉맵 선형이 있다.
디바이스 드라이버(322)는 LOD가 상주 또는 비상주 밉맵에 대응하는지 여부를 결정하는 데 필요한 정보를 LOD 유닛(615)에 제공한다. 이 정보는 텍스쳐 이미지 데이터 구조에 저장되고 LOD 유닛(615)에 제공되는 보외 임계 LOD이다. 본 발명의 바람직한 실시예에서, 보외 임계 LOD는 보외 확대 또는 보외 축소 필터링이 선택되는 (소수 비트들(fractional bits)을 포함한) LOD를 나타내는 텍스쳐 이미지 데이터 구조에 저장된 실수이다. 보외 임계 LOD는 드라이버(322)가 새로운 밉맵 레벨들이 비상주 밉맵들로부터 상주 밉맵들로 변환될 때 새로운 상주 밉맵 해상도로 갑자기 스냅핑(snapping)하는 대신에 보외 필터링으로부터 보간 필터링으로 부드럽게 천이할 수 있게 한다. 본 발명의 대안적인 실시예에서, 보외 임계 LOD는 텍스쳐 이미지 데이터 구조에 저장된 최저 LOD 상주 밉맵 레벨을 나타내는 정수값이다.
LOD 유닛(615)은 이상적인 LOD를 보외 임계 LOD와 비교하여 어떤 텍스쳐 필터, 예를 들어, 확대, 축소, 보외 확대, 또는 보외 축소가 텍스쳐 샘플러 유닛(620)에 의해 텍스쳐 이미지를 샘플링하고 필터링하기 위해 이용될 것인지를 선택함으로써 (도 2a, 도 2b, 및 도 2c의) 단계(210)를 수행한다. LOD 유닛(615)은 텍스쳐 샘플러 유닛(620)에 텍스쳐 필터, 선택된 텍스쳐 필터 유형, 이상적인 LOD, 텍스쳐 맵 좌표, 및 이 기술분야의 상태에 일반적인 다른 샘플링 파라미터들을 전달한다. 또한, LOD 유닛(615)은 어드레스 생성 유닛(625)에 텍스쳐 필터 유형 및 텍스쳐 맵 식별자를 출력한다.
LOD 유닛(615)이 보외 축소 또는 보외 확대 텍스쳐 필터에 대해 지정된 텍스 쳐 필터 유형을 선택하면, LOD 유닛(615)은 애플리케이션이 비상주 밉맵 레벨로부터 텍셀들의 필터링을 요청하였음을 호스트 인터페이스(406)(도 4)를 통해 디바이스 드라이버(322)(도 3)에 알리고, 요청된 밉맵 레벨을 지정한다. 디바이스 드라이버(322)는 도 7과 관련하여 설명되는 바와 같이, 비상주 밉맵의 상주 밉맵으로의 변환을 개시한다.
선택된 텍스쳐 필터가 보외 확대 또는 보외 축소이면, 텍스쳐 샘플러 유닛(620)은 이상적인 LOD와 보외 임계 LOD 사이의 차이를 계산하는 것에 의해 델타 LOD(deltaLOD)를 계산한다(도 2a 및 도 2c의 단계 235). 텍스쳐 샘플러 유닛(620)은 그 다음에 델타 LOD의 함수로서 보외 가중치(extrapolation weight)를 계산한다.
본 발명의 일 실시예에서, 텍스쳐 샘플러 유닛(620)은 LOD를 감소시키는 순서로(플러스에서 마이너스로) 저장된 (LOD, 가중치) 쌍들을 포함하는 가중치 테이이블(627)을 포함한다. 델타 LOD가 가중치 테이블(627)의 최저 LOD 값보다 작으면, 최저 LOD를 갖는 그 테이블의 엔트리로부터의 가중치 값이 보외 가중치로서 선택된다. 델타 LOD가 가중치 테이블(627)의 최고 LOD 값보다 크면, 최고 LOD를 갖는 그 테이블의 엔트리로부터의 가중치 값이 보외 가중치로서 선택된다. 델타 LOD가 가중치 테이블(627)의 엔트리의 LOD 값과 같으면, 그 엔트리의 가중치 값이 보외 가중치로서 선택된다. 본 발명의 일부 실시예들에서, 델타 LOD가 가중치 테이블(627)의 2개의 엔트리 사이에 있으면, 보외 가중치는 2개의 가장 근사한 가중치 값들을 이용하여 선형 보간을 통해 계산된다. 본 발명의 다른 실시예들에서, 델타 LOD가 가중치 테이블(627)의 2개의 인접한 엔트리들의 LOD 값들 사이에 있으면, 보외 가중치는 Catmull-Rom 입방 스플라인(cubic spline) 또는 이 기술분야의 기술자에게 알려져 있는 임의의 다른 보간 스플라인을 이용하여 계산된다.
본 발명의 일부 실시예들에서, 가중치 테이블(627)의 내용들은 정적이다. 본 발명의 다른 실시예들에서, 디바이스 드라이버(322)는 애플리케이션 프로그램에 의해 지정된 보외 필터에 따라 가중치 테이블(627)을 로딩한다. 본 발명의 다른 실시예들에서, 디바이스 드라이버(322)는 텍스쳐 샘플러 데이터 구조 내로 가중치 테이블(627)(또는 보외 확대 및 보외 축소를 위한 별도의 가중치 테이블들)을 로딩한다. 텍스쳐 샘플러 데이터 구조는 PPU(402) 내의 레지스터들에 저장될 수 있거나, 또는 텍스쳐 샘플러 데이터 구조는 PP 메모리(404)에 저장되고 PPU(402) 내에 캐시(cache)될 수 있다.
이상적인 LOD가 상주 밉맵 레벨에 대응하면, 텍스쳐 샘플러 유닛(620)은 파인(그리고 필요한 경우, 코어스) 밉맵 레벨(들)을 선택하고, 선택된 텍스쳐 필터 유형을 이용하여, 보간 텍셀 값을 생성하기 위해 이 기술분야의 당업자에게 알려져 있는 기술들을 이용하여 선택된 밉맵 레벨(들)에서 픽셀 풋프린트를 샘플링한다. LOD 가중치는 이상적인 LOD의 소수 부분에 대응한다. 이상적인 LOD가 비상주 밉맵 레벨에 대응하면, 텍스쳐 샘플러 유닛(620)은 보외 임계값(이 값은 보통 최저 LOD 상주 밉맵 레벨 및 최고 해상도 상주 밉맵 레벨임)을 절단(truncate)하여 보외 임계값의 정수 부분을 생성한다. 정수 부분은 파인 밉맵 레벨 LOD(LODfine)이고, 파인 밉맵 레벨+1(이것은 보통 제2 최저 LOD 상주 밉맵 레벨 및 다음 최고 해상도 상 주 밉맵 레벨임)은 코어스 밉맵 레벨 LOD(LODcoarse)이다.
필터 유형이 보외 밉맵 최인접형일 때, 텍스쳐 샘플러 유닛(620)은 텍스쳐 공간에서 픽셀 풋프린트를 샘플링하여, 어드레스 생성 유닛(625)에 밉레벨들 LODfine 및 LODcoarse(lowestResidentMipmap 및 lowestResidentMipmap+1에 대응함)에 대한 최인접 샘플들을 출력한다. 필터 유형이 보외 밉맵 선형일 때, 텍스쳐 샘플러 유닛(620)은 텍스쳐 공간에서 픽셀 풋프린트를 샘플링하여, 어드레스 생성 유닛(625)에 밉레벨들 LODfine 및 LODcoarse(lowestResidentMipmap 및 lowestResidentMipmap+1에 대응함)에 대한 샘플들을 출력한다. 텍스쳐 샘플러 유닛(620)은 필터 유형이 보외 밉맵 선형 또는 보외 밉맵 최인접형일 때 LODfine 밉레벨을 샘플링하기 위한 LOD 가중치로서 1+보외 가중치를 이용하고, LODcoarse 밉레벨을 샘플링하기 위한 LOD 가중치로서 -보외 가중치를 이용한다.
선택된 필터 유형, LOD 가중치, 이방성 가중치, 파인 밉맵 LOD 레벨(LODfine), 코어스 밉맵 LOD 레벨(LODcoarse), 및 샘플들(텍스쳐 맵 좌표 및 선택된 필터 유형에 대응함)은 텍스쳐 샘플러 유닛(620)에 의해 어드레스 생성 유닛(625)에 출력된다. 어드레스 생성 유닛(625)은 이 기술분야의 당업자에게 알려져 있는 기술들을 이용하여 선택된 필터 유형에 따라 각각의 텍셀에 대한 uv 가중치(쌍선형 또는 최인접형)를 생성한다. 샘플의 필터 유형이 보외 밉맵 선형인 경우, 어드레스 생성 유닛(625)은 각각의 샘플 내의 텍셀들에 대한 쌍선형 (u,v) 가중치를 계산한다. 샘플의 필터 유형이 보외 밉맵 최인접형(extrapolated mipmapped nearest)인 경우, 어드레스 생성 유닛(625)은 각각의 샘플 내의 텍셀들 에 대한 최인접 가중치를 계산한다. 어드레스 생성 유닛(625)은 샘플들, 텍스쳐 맵 식별자, LODfine 및 LODcoarse를 이용하여 어드레스들을 결정하고 상주 밉맵들로부터 텍셀들을 판독한다. 가상 메모리 어드레싱이 이용될 때, 메모리 인터페이스(414)에 의해 추가적인 어드레스 변환이 수행되어 텍셀들을 판독하는데 필요한 물리 어드레스를 결정할 수 있다.
본 발명의 일 실시예에서, 밉맵으로부터 판독된 텍셀을 스케일링하기 위해 이용되는 각각의 텍셀 가중치는 텍셀의 밉레벨의 LOD 가중치, 풋프린트에 대한 이방성 필터 가중치[이방성 가중치(anisoweight)], 및 uv 가중치의 조합이다. 어드레스 생성 유닛(625)은 텍셀 uv 가중치와 이방성 가중치와 LOD 가중치를 곱함으로써 텍셀 가중치를 계산하고, 그 결과를 텍스쳐 필터 유닛(630)에 전달한다. 텍셀들은 필터 유닛(630)에 리턴되고 어드레스 생성 유닛(625)에 의해 계산된 텍셀 가중치에 의해 스케일링된다.
필터 가중치들의 합이 1이 되는 본 발명의 실시예들에서, 필터 유닛(630)은 텍스쳐 컬러 누산기 레지스터 내로 스케일링된 텍셀 값들을 축적한다. 최종 픽셀의 최종 텍셀이 가중되고 축적되었을 때, 텍스쳐 유닛(610)은 프래그먼트 프로세싱 유닛(660)에 텍스쳐 컬러 누산기 레지스터의 내용들을 리턴한다. 필터 가중치들의 합이 1이 되지 않는 본 발명의 실시예들에서, 필터 유닛(630)은 텍스쳐 컬러 누산기 레지스터 내로 스케일링된 텍셀 값들을 축적하고 텍스쳐 가중치 누산 레지스터 내로 텍셀 가중치들을 축적한다. 최종 텍셀이 가중화되고 축적되었을 때, 필터 유닛(630)은 컬러 누산기 레지스터의 내용들을 가중치 누산기 레지스터의 내용들에 의해 나누고, 그 결과로 생긴 필터링된 텍스쳐 값을 프래그먼트 프로세싱 유닛(660)에 리턴한다.
텍스쳐 유닛(610)은 조건부 실행 경로들을 선택하기 위해 픽셀 셰이더 프로그램에 의해 바람직하게 액세스 가능한 방식으로 픽셀당 상태 정보(per-pixel status information)를 리턴하도록 구성될 수 있다. 본 발명의 일 실시예에서, 텍스쳐 유닛(610)은, 픽셀을 텍스쳐링하는 동작이 텍스쳐 유닛(610)에 보외 필터링을 이용하도록 요청하였고 그 결과로 생긴 값들이 픽셀 셰이더 프로그램에서의 후속 분기 거동(branch behavior)을 결정하는 데 이용될 수 있는 술어들(predicates) 또는 조건 코드들을 설정하였는지의 여부를, 픽셀마다 전달할 수 있다. 셰이더 프로그램은 입방 필터링을 수행하기 위해 동일한 텍스쳐로부터의 추가적인 텍스쳐 판독들에 의해 비상주 밉맵들의 텍셀들을 조건부로 처리할 수 있거나, 또는 종합 디테일(synthetic detail)를 추가하기 위해 다른 텍스쳐들로부터의 텍스쳐 판독들을 발행할 수 있거나, 또는 다른 동작들을 수행할 수 있다.
도 7은 본 발명의 하나 이상의 양태들에 따른, 비상주 밉맵 레벨로부터 상주 밉맵 레벨로 변환하는 방법 단계들의 흐름도이다. 단계(700)에서, 디바이스 드라이버(322)는 비상주 밉맵을 상주 밉맵으로 변환하라는 요청을 수신한다. 단계(710)에서, 디바이스 드라이버(322)는 PP 메모리(404)와 같은 텍스쳐 유닛(610)에 의해 액세스 가능한 상주 메모리에의 비상주 밉맵의 복사를 개시한다. 단계(720)에서, 디바이스 드라이버(322)는 변환이 완료되었는지, 즉, 밉맵이 복사되었는지를 판정하고, 그렇지 않은 경우에는 단계(720)가 반복된다. 본 발명의 일부 실시예들에서, 최고 해상도 상주 밉맵 레벨이 비상주 밉맵의 복사가 완료되었음을 확인하도록 변경된 시점을 리소스 관리자가 나타낼 수 있다.
일단 밉맵이 복사되었다면, 단계(730)에서 디바이스 드라이버(322)는 보외 임계 LOD를 갱신한다. 본 발명의 일부 실시예들에서, 보외 임계는 최저 상주 밉맵 레벨의 값과 같도록 갱신된다. 본 발명의 다른 실시예들에서, 보외 임계 LOD는 비상주 밉맵 레벨이 상주 밉맵 레벨로 변환될 때 새로운 상주 밉맵 해상도로 갑자기 스냅핑하는 대신에 보외 필터링으로부터 보간 필터링으로 부드럽게 천이하도록 몇 개의 프레임에 걸쳐서 감소된다. 예를 들어, 3.0의 보외 임계 LOD는 최저 상주 밉맵 레벨과 같은 2.0의 값에 도달할 때까지 0.1만큼 순차적으로 감소될 수 있다. 단계(740)에서, 디바이스 드라이버(322)는 보외 임계 LOD의 최종 값에 도달했는지를 판정하고, 도달하지 않은 경우, 단계(730)가 반복된다. 그렇지 않으면, 단계(750)에서, 비상주 밉맵 레벨의 상주 밉맵 레벨로의 변환이 완료된다.
보외 필터링이 가능하게 되고 필터링에 필요한 텍셀들이 비상주 밉맵 레벨들로부터 나오는 경우, 보외 필터링을 이용하여 생성된 텍셀들은 이상적인 밉레벨과 상주 밉레벨 사이의 차이에 비례하여 더 선명하게 보이는 개선된 이미지를 제공한다. 이것은 고해상도 밉맵 텍스쳐 데이터 대신에 저해상도 밉맵 텍스쳐 데이터를 이용하는 것에 비해 더 적절한 상세 정도를 시사한다. 병렬 프로세싱 서브시스템(312)은, 고해상도 밉맵들, 예를 들어, 비상주 밉맵(325 및 335)이 비상주 메모리, 예를 들어, 시스템 디스크(314), 시스템 메모리(304) 등으로부터 검색되는 동안 다중 스레드들을 처리하여 보외 텍스쳐 값들을 생성하기 위해 병렬로 상주 밉맵 들로부터 디테일을 보외하도록 구성된다.
본 발명의 일 실시예는 컴퓨터 시스템과 이용하기 위한 프로그램 제품으로서 구현될 수 있다. 프로그램 제품의 프로그램(들)은 (본 명세서에 설명된 방법들을 포함하는) 실시예들의 기능들을 정의하며, 다양한 컴퓨터 판독가능한 저장 매체 상에 포함될 수 있다. 예시적인 컴퓨터 판독가능한 저장 매체는, (i) 정보가 영구적으로 저장되는 기입 불가능한 저장 매체(non-writable storage media)(예를 들어, CD-ROM 드라이브에 의해 판독가능한 CD-ROM 디스크들과 같은 컴퓨터 내의 판독 전용 메모리 디바이스들, 플래시 메모리, ROM 칩들 또는 임의 유형의 고체 상태 불휘발성 반도체 메모리), 및 (ii) 변경할 수 있는 정보가 저장되는 기입 가능한 저장 매체(예를 들어, 디스켓 드라이브 또는 하드 디스크 드라이브 내의 플로피 디스크, 또는 임의 유형의 고체 상태 랜덤 액세스 반도체 메모리)를 포함하지만, 이것으로 한정되지 않는다.
본 발명은 특정 실시예들을 참조하여 전술하였다. 그러나, 이 기술분야의 통상의 기술자는, 첨부된 특허청구범위에 정의된 바와 같이 본 발명의 더 넓은 사상 및 범위로부터 벗어나지 않고 본 발명에 대해 다양한 수정 및 변경이 행해질 수 있다는 것을 이해할 것이다. 따라서, 전술한 설명 및 도면들은 한정적인 의미보다는 예시적인 의미로 고려되어야 한다.
전술한 바와 같이 간략히 요약한 본 발명에 대하여 전술한 본 발명의 특징이 보다 상세히 이해될 수 있도록, 실시예들을 참조하여 설명할 것이며, 그 중 일부는 첨부 도면에서 설명된다. 그러나, 첨부 도면들은 본 발명의 전형적인 실시예들만을 도시하므로, 본 발명의 범위를 한정하는 것으로 고려되어서는 안되고 본 발명은 다른 균등한 실시예들을 수용할 수 있음을 주의해야 한다.
도 1은 본 발명의 하나 이상의 양태에 따른, 각종 LOD(level of detail)에 대한 텍스쳐의 밉맵들의 개념도.
도 2a는 본 발명의 하나 이상의 양태에 따른, 비상주 밉맵 레벨에 대한 보외된 텍스쳐 값을 생성하는 방법의 단계들을 나타내는 흐름도.
도 2b는 본 발명의 하나 이상의 양태에 따른, 이상적인 LOD에 대응하는 밉맵이 상주하는지의 여부를 판정하기 위한 도 2a의 방법의 단계 210의 흐름도.
도 2c는 본 발명의 하나 이상의 양태에 따른, 텍스쳐 맵 값이 상주 밉맵 레벨로부터 보외되어야 하는지 여부를 판정하기 위한 방법의 단계들을 나타내는 흐름도.
도 3은 본 발명의 하나 이상의 양태를 구현하도록 구성되는 컴퓨터 시스템을 나타내는 블록도.
도 4는 본 발명의 하나 이상의 양태에 따른 도 3의 컴퓨터 시스템에 대한 병렬 프로세싱 서브시스템의 블록도.
도 5는 본 발명의 하나 이상의 양태에 따른 도 4의 병렬 프로세싱 서브시스 템에 대한 병렬 프로세싱 유닛의 블록도.
도 6a는 본 발명의 하나 이상의 양태에 따른 그래픽 프로세싱 파이프라인의 개념도.
도 6b는 본 발명의 하나 이상의 양태에 따른 도 6a의 텍스쳐 유닛의 블록도.
도 7은 본 발명의 하나 이상의 양태에 따른, 비상주 밉맵 레벨을 상주 밉맵 레벨로 변환하는 방법의 단계들을 나타내는 흐름도.
<도면의 주요 부분에 대한 부호의 설명>
140: 상주 밉맵
100: 비상주 밉맵
304: 시스템 메모리
300: 시스템
321: 애드인 카드

Claims (10)

  1. 텍스쳐 맵의 비상주(nonresident) 밉맵(mipmap) 레벨을 상기 텍스쳐 맵의 상주(resident) 밉맵 레벨로 변환하기 위한 방법으로서,
    디스플레이용 이미지를 렌더링할 때 사용하기 위해 상기 비상주 밉맵 레벨을 상주 밉맵 레벨로 변환하라는 요청을 수신하는 단계;
    비상주 메모리 저장장치로부터 상주 메모리 저장장치로의 상기 비상주 밉맵 레벨의 복사를 개시하는 것에 의해 상기 비상주 밉맵 레벨을 상기 상주 밉맵 레벨로 변환하는 단계;
    상기 비상주 밉맵 레벨의 상기 복사가 완료되기 전에 상주 밉맵 레벨로부터 텍셀(texel) 값들을 판독하기 위하여 보외(extrapolation) 임계 LOD(level of detail) 값을 사용하여 상기 이미지의 필터링된 텍셀 값들을 계산하는 단계; 및
    상기 비상주 밉맵 레벨의 상기 복사가 완료되면 상기 이미지의 상기 필터링된 텍셀 값들을 생성하는데 사용되는 상기 보외 임계 LOD 값을 갱신하는 단계
    를 포함하는 텍스쳐 맵의 밉맵 레벨 변환 방법.
  2. 제1항에 있어서,
    보외 필터를 델타LOD 가중치 쌍들로 나타내는 가중치 테이블을 로딩하는 단계를 더 포함하고,
    상기 가중치 테이블 내의 각 엔트리는 보외 가중치 및 대응하는 델타LOD 값을 포함하는, 텍스쳐 맵의 밉맵 레벨 변환 방법.
  3. 제2항에 있어서,
    상기 가중치 테이블은 보외된 축소 텍스쳐 필터를 위한 보외 필터를 나타내고, 보외된 확대 텍스쳐 필터를 위한 보외 필터를 나타내는 추가 가중치 테이블을 로딩하는 단계를 더 포함하는 텍스쳐 맵의 밉맵 레벨 변환 방법.
  4. 제1항에 있어서,
    상기 텍스쳐 맵의 이상적인 밉맵에 대응하는 이상적인 LOD를 계산하는 단계 - 상기 이상적인 밉맵은 상기 이미지에 적용된 텍스쳐의 해상도와 정확하게 일치하는 밉맵 레벨을 가짐 - ;
    상기 이상적인 LOD와 상기 보외 임계 LOD 사이의 차인 델타LOD를 계산하는 단계; 및
    상기 델타LOD에 기초하여, 상기 이미지의 상기 필터링된 텍셀 값들을 생성하는데 사용되는 보외 가중치를 결정하는 단계를 더 포함하고,
    상기 비상주 밉맵 레벨의 상기 복사의 개시는 상기 이상적인 LOD를 계산하는 단계 이후에 수행되는, 텍스쳐 맵의 밉맵 레벨 변환 방법.
  5. 제4항에 있어서,
    상기 보외 가중치, 그 LOD가 상기 보외 임계 LOD의 정수 부분과 동등한 밉맵으로부터의 텍셀 값들, 및 저해상도 상주 밉맵 레벨로부터의 텍셀 값들을 이용하여 상기 이미지의 필터링된 텍셀 값들을 계산하는 단계를 더 포함하는 텍스쳐 맵의 밉맵 레벨 변환 방법.
  6. 제1항에 있어서,
    상기 갱신 단계는 보외 필터링을 이용하는 것에서 보간 필터링을 이용하는 것으로 부드럽게 천이(smoothly transition)하고, 그리함으로써 상기 필터링된 텍셀 값들을 생성하도록, 상기 보외 임계 LOD 값의 최종 값이 상기 비상주 밉맵 레벨의 LOD 보다 크거나 같은 값에 도달할 때까지 상기 보외 임계 LOD 값을 연속해서 감분시키는 단계를 포함하는, 텍스쳐 맵의 밉맵 레벨 변환 방법.
  7. 컴퓨터 시스템이 텍스쳐 맵의 비상주 밉맵 레벨을 상기 텍스쳐 맵의 상주 밉맵 레벨로 변환하는 방법을 수행하기 위한 명령어들을 포함하는 컴퓨터-판독가능 매체로서,
    상기 방법은,
    디스플레이용 이미지를 렌더링할 때 사용하기 위해 상기 비상주 밉맵 레벨을 상주 밉맵 레벨로 변환하라는 요청을 수신하는 단계;
    비상주 메모리 저장장치로부터 상주 메모리 저장장치로의 상기 비상주 밉맵 레벨의 복사를 개시하는 것에 의해 상기 비상주 밉맵 레벨을 상기 상주 밉맵 레벨로 변환하는 단계;
    상기 비상주 밉맵 레벨의 상기 복사가 완료되기 전에 상주 밉맵 레벨로부터 텍셀 값들을 판독하기 위하여 보외 임계 LOD 값을 사용하여 상기 이미지의 필터링된 텍셀 값들을 계산하는 단계; 및
    상기 비상주 밉맵 레벨의 상기 복사가 완료되면 상기 이미지의 상기 필터링된 텍셀 값들을 생성하기 위해 사용되는 상기 보외 임계 LOD 값을 갱신하는 단계
    를 포함하는, 컴퓨터-판독가능 매체.
  8. 제7항에 있어서,
    상기 방법은 보외 필터를 델타LOD 가중치 쌍들로 나타내는 가중치 테이블을 로딩하는 단계를 더 포함하고,
    상기 가중치 테이블 내의 각 엔트리는 보외 가중치 및 대응하는 델타LOD 값을 포함하는, 컴퓨터-판독가능 매체.
  9. 제8항에 있어서,
    상기 가중치 테이블은 보외된 축소 텍스쳐 필터를 위한 보외 필터를 나타내고,
    상기 방법은 보외된 확대 텍스쳐 필터를 위한 보외 필터를 나타내는 추가 가중치 테이블을 로딩하는 단계를 더 포함하는, 컴퓨터-판독가능 매체.
  10. 제7항에 있어서,
    상기 방법은,
    상기 텍스쳐 맵의 이상적인 밉맵에 대응하는 이상적인 LOD를 계산하는 단계 - 상기 이상적인 밉맵은 상기 이미지에 적용된 텍스쳐의 해상도와 정확하게 일치하는 밉맵 레벨을 가짐 - ;
    상기 이상적인 LOD와 상기 보외 임계 LOD 사이의 차인 델타LOD를 계산하는 단계;
    상기 델타LOD에 기초하여 상기 이미지의 상기 필터링된 텍셀 값들을 생성하는데 사용되는 보외 가중치를 결정하는 단계; 및
    상기 보외 가중치, 그 LOD가 상기 보외 임계 LOD의 정수 부분과 동등한 밉맵으로부터의 텍셀 값들, 및 저해상도 상주 밉맵 레벨로부터의 텍셀 값들을 이용하여 상기 이미지의 필터링된 텍셀 값들을 계산하는 단계를 더 포함하고,
    상기 비상주 밉맵 레벨의 상기 복사의 개시는 상기 이상적인 LOD를 계산하는 단계 이후에 수행되는, 컴퓨터-판독가능 매체.
KR1020080053316A 2007-06-07 2008-06-05 상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법 KR100965637B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/759,598 US7948500B2 (en) 2007-06-07 2007-06-07 Extrapolation of nonresident mipmap data using resident mipmap data
US11/759,598 2007-06-07

Publications (2)

Publication Number Publication Date
KR20080108051A KR20080108051A (ko) 2008-12-11
KR100965637B1 true KR100965637B1 (ko) 2010-06-23

Family

ID=40092691

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080053316A KR100965637B1 (ko) 2007-06-07 2008-06-05 상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법

Country Status (6)

Country Link
US (1) US7948500B2 (ko)
JP (1) JP4799588B2 (ko)
KR (1) KR100965637B1 (ko)
CN (1) CN101344961B (ko)
DE (1) DE102008026431B4 (ko)
TW (1) TWI377520B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8952962B2 (en) 2011-09-14 2015-02-10 Samsung Electronics Co., Ltd. Graphics processing method and apparatus using post fragment shader

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7944453B1 (en) * 2007-06-07 2011-05-17 Nvidia Corporation Extrapolation texture filtering for nonresident mipmaps
WO2009113034A1 (en) * 2008-03-12 2009-09-17 Nxp B.V. Look-ahead task management
US8217957B1 (en) * 2008-05-01 2012-07-10 Rockwell Collins, Inc. System and method for digital image storage and representation
KR20100046797A (ko) * 2008-10-28 2010-05-07 삼성전자주식회사 텍스쳐 팩터를 이용한 3차원 그래픽 데이터 처리 장치 및 그 방법
KR101508388B1 (ko) * 2008-12-15 2015-04-06 엘지전자 주식회사 밉맵 생성 장치 및 방법
US9013498B1 (en) * 2008-12-19 2015-04-21 Nvidia Corporation Determining a working set of texture maps
GB2469526B (en) * 2009-04-17 2015-06-24 Advanced Risc Mach Ltd Generating and resolving pixel values within a graphics processing pipeline
US8823724B2 (en) * 2009-12-31 2014-09-02 Nvidia Corporation Sparse texture systems and methods
US8681169B2 (en) * 2009-12-31 2014-03-25 Nvidia Corporation Sparse texture systems and methods
US8860743B2 (en) * 2009-12-31 2014-10-14 Nvidia Corporation Sparse texture systems and methods
US8610737B2 (en) * 2010-05-27 2013-12-17 National Taiwan University Graphic processing unit (GPU) with configurable filtering module and operation method thereof
US9727385B2 (en) 2011-07-18 2017-08-08 Apple Inc. Graphical processing unit (GPU) implementing a plurality of virtual GPUs
US20130063462A1 (en) * 2011-09-08 2013-03-14 Microsoft Corporation Tile-based image processing using mipmaps
US8274524B1 (en) * 2011-09-28 2012-09-25 Google Inc. Map rendering using interpolation of style parameters across zoom levels
US9690620B2 (en) * 2011-12-01 2017-06-27 National University Of Singapore Polymorphic heterogeneous multi-core architecture
US8654124B2 (en) * 2012-01-25 2014-02-18 Google Inc. Texture fading for smooth level of detail transitions in a graphics application
CN102799456B (zh) 2012-07-24 2015-11-25 上海晨思电子科技有限公司 一种游戏引擎加载资源文件的方法、装置和计算机
US9111393B2 (en) * 2012-11-26 2015-08-18 Nvidia Corporation System, method, and computer program product for sampling a hierarchical depth map
US9349210B2 (en) * 2012-11-30 2016-05-24 Arm Limited Methods of and apparatus for using textures in graphics processing systems
US9659401B2 (en) 2012-11-30 2017-05-23 Arm Limited Methods of and apparatus for using textures in graphics processing systems
US9734598B2 (en) * 2013-01-15 2017-08-15 Microsoft Technology Licensing, Llc Engine for streaming virtual textures
US9165396B2 (en) * 2013-02-26 2015-10-20 Nvidia Corporation Graphics processing unit with a texture return buffer and a texture queue
US9607356B2 (en) 2013-05-02 2017-03-28 Arm Limited Graphics processing systems
US9070200B2 (en) 2013-05-02 2015-06-30 Arm Limited Graphics processing systems
US9767595B2 (en) 2013-05-02 2017-09-19 Arm Limited Graphics processing systems
US9741089B2 (en) 2013-05-02 2017-08-22 Arm Limited Graphics processing systems
US9626789B2 (en) * 2013-05-07 2017-04-18 Advanced Micro Devices, Inc. Implicit texture map parameterization for GPU rendering
US9542724B1 (en) * 2013-07-09 2017-01-10 Google Inc. Systems and methods for stroke rendering on digital maps
CN104331527B (zh) * 2013-07-22 2018-10-02 腾讯科技(深圳)有限公司 图片生成方法及装置
US9514563B2 (en) 2013-08-30 2016-12-06 Arm Limited Graphics processing systems
US20150279055A1 (en) * 2014-03-28 2015-10-01 Nikos Kaburlasos Mipmap compression
US9652882B2 (en) * 2014-04-05 2017-05-16 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location
US9495767B2 (en) 2014-05-15 2016-11-15 Google Inc. Indexed uniform styles for stroke rendering
KR20160032597A (ko) * 2014-09-16 2016-03-24 삼성전자주식회사 텍스쳐를 처리하는 방법 및 장치
US9934606B2 (en) * 2014-09-16 2018-04-03 Intel Corporation Deferred coarse pixel shading
KR102313020B1 (ko) 2014-11-27 2021-10-15 삼성전자주식회사 그래픽스 프로세싱 유닛과 이를 포함하는 장치
CN105574808B (zh) * 2015-12-11 2018-10-26 中国航空工业集团公司西安航空计算技术研究所 一种流水线纹理贴图单元系统
CN105957133B (zh) * 2016-05-10 2018-06-05 网易(杭州)网络有限公司 一种加载贴图的方法和装置
KR20180048081A (ko) * 2016-11-02 2018-05-10 삼성전자주식회사 텍스쳐 처리 방법 및 장치
US10460502B2 (en) 2016-12-14 2019-10-29 Samsung Electronics Co., Ltd. Method and apparatus for rendering object using mipmap including plurality of textures
GB2557657B (en) * 2016-12-14 2020-08-12 Samsung Electronics Co Ltd Mipmap rendering
CN106875483A (zh) * 2017-01-26 2017-06-20 北京航空航天大学 一种直升机地震救援仿真场景模块化构建方法和系统
US9990909B1 (en) 2017-07-12 2018-06-05 Rtom Corporation Cymbal
KR102489266B1 (ko) 2018-08-13 2023-01-17 엘지전자 주식회사 모바일 디바이스 및 그 제어 방법
CN111311720B (zh) * 2018-12-12 2023-05-23 网易(杭州)网络有限公司 一种纹理图像的处理方法和装置
US11164293B2 (en) * 2019-01-30 2021-11-02 National Cheng Kung University Adaptive enhancement method for image contrast based on level of detail
US10540802B1 (en) * 2019-01-31 2020-01-21 Advanced Micro Devices, Inc. Residency map descriptors
GB2583154B (en) * 2019-10-17 2021-04-28 Imagination Tech Ltd Texture filtering
CN111179403A (zh) * 2020-01-21 2020-05-19 南京芯瞳半导体技术有限公司 并行生成纹理映射Mipmap图像的方法、装置及计算机存储介质
US11915337B2 (en) * 2020-03-13 2024-02-27 Advanced Micro Devices, Inc. Single pass downsampler
US20210304488A1 (en) * 2020-03-25 2021-09-30 Advanced Micro Devices, Inc. Sampling for partially resident textures
EP4111419A4 (en) * 2020-04-02 2023-09-13 Sony Group Corporation SUPER-RESOLUTION BLOCK-COMPRESSED TEXTURE FOR TEXTURE MAPPING APPLICATIONS
US11158110B1 (en) * 2021-01-06 2021-10-26 Arm Limited Graphics texture mapping
CN113450444B (zh) * 2021-07-09 2023-03-24 网易(杭州)网络有限公司 生成光照贴图的方法、装置、存储介质及电子设备
GB2610371A (en) * 2021-07-22 2023-03-08 Imagination Tech Ltd Texture filtering

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001005950A (ja) 1999-06-21 2001-01-12 Fuji Photo Film Co Ltd 画像サーバ装置および画像転送方法
JP2003308544A (ja) 2002-04-18 2003-10-31 Taito Corp ミップマップデータの高速読出方式
JP2004078296A (ja) 2002-08-09 2004-03-11 Victor Co Of Japan Ltd 画像生成装置
KR100601880B1 (ko) 2005-04-27 2006-07-18 에스케이 텔레콤주식회사 Gpu를 이용하여 실시간 3차원 그래픽 이미지를점진적으로 전송하는 방법

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438654A (en) * 1993-07-09 1995-08-01 Silicon Graphics, Inc. System and method for sharpening texture imagery in computer generated interactive graphics
CA2229027A1 (en) 1995-08-04 1997-02-20 Microsoft Corporation Method and system for rendering graphical objects to image chunks and combining image layers into a display image
US5943242A (en) * 1995-11-17 1999-08-24 Pact Gmbh Dynamically reconfigurable data processing system
US7266725B2 (en) * 2001-09-03 2007-09-04 Pact Xpp Technologies Ag Method for debugging reconfigurable architectures
DE19651075A1 (de) * 1996-12-09 1998-06-10 Pact Inf Tech Gmbh Einheit zur Verarbeitung von numerischen und logischen Operationen, zum Einsatz in Prozessoren (CPU's), Mehrrechnersystemen, Datenflußprozessoren (DFP's), digitalen Signal Prozessoren (DSP's) oder dergleichen
US6338106B1 (en) * 1996-12-20 2002-01-08 Pact Gmbh I/O and memory bus system for DFPS and units with two or multi-dimensional programmable cell architectures
DE19654595A1 (de) * 1996-12-20 1998-07-02 Pact Inf Tech Gmbh I0- und Speicherbussystem für DFPs sowie Bausteinen mit zwei- oder mehrdimensionaler programmierbaren Zellstrukturen
DE19654593A1 (de) * 1996-12-20 1998-07-02 Pact Inf Tech Gmbh Umkonfigurierungs-Verfahren für programmierbare Bausteine zur Laufzeit
US6542998B1 (en) * 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
DE19704728A1 (de) * 1997-02-08 1998-08-13 Pact Inf Tech Gmbh Verfahren zur Selbstsynchronisation von konfigurierbaren Elementen eines programmierbaren Bausteines
DE19704742A1 (de) * 1997-02-11 1998-09-24 Pact Inf Tech Gmbh Internes Bussystem für DFPs, sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen, zur Bewältigung großer Datenmengen mit hohem Vernetzungsaufwand
DE19861088A1 (de) * 1997-12-22 2000-02-10 Pact Inf Tech Gmbh Verfahren zur Reparatur von integrierten Schaltkreisen
DE19807872A1 (de) * 1998-02-25 1999-08-26 Pact Inf Tech Gmbh Verfahren zur Verwaltung von Konfigurationsdaten in Datenflußprozessoren sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstruktur (FPGAs, DPGAs, o. dgl.
US6373496B1 (en) * 1998-08-12 2002-04-16 S3 Graphics Co., Ltd. Apparatus and method for texture mapping
AU5686299A (en) * 1998-08-20 2000-03-14 Raycer, Inc. Method and apparatus for generating texture
US6452603B1 (en) * 1998-12-23 2002-09-17 Nvidia Us Investment Company Circuit and method for trilinear filtering using texels from only one level of detail
US7061500B1 (en) * 1999-06-09 2006-06-13 3Dlabs Inc., Ltd. Direct-mapped texture caching with concise tags
US6744438B1 (en) * 1999-06-09 2004-06-01 3Dlabs Inc., Ltd. Texture caching with background preloading
JP2001022948A (ja) * 1999-07-08 2001-01-26 Sega Corp 画像処理装置および画像処理方法、並びに記録媒体
ATE476700T1 (de) * 2000-06-13 2010-08-15 Richter Thomas Pipeline ct-protokolle und -kommunikation
US7210129B2 (en) * 2001-08-16 2007-04-24 Pact Xpp Technologies Ag Method for translating programs for reconfigurable architectures
US7444531B2 (en) * 2001-03-05 2008-10-28 Pact Xpp Technologies Ag Methods and devices for treating and processing data
RU2216781C2 (ru) * 2001-06-29 2003-11-20 Самсунг Электроникс Ко., Лтд Основанные на изображениях способ представления и визуализации трехмерного объекта и способ представления и визуализации анимированного объекта
US20030030646A1 (en) * 2001-08-10 2003-02-13 Yeh Kwo-Woei Trilinear texture filtering method with proper texel selection
US7434191B2 (en) * 2001-09-03 2008-10-07 Pact Xpp Technologies Ag Router
WO2003054796A2 (en) * 2001-12-20 2003-07-03 Koninklijke Philips Electronics N.V. Image rendering apparatus and method using mipmap texture mapping
WO2003088203A1 (en) 2002-04-11 2003-10-23 Genoa Color Technologies Ltd. Color display devices and methods with enhanced attributes
JP4388895B2 (ja) * 2002-09-06 2009-12-24 ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト リコンフィギュアラブルなシーケンサ構造
EP1494175A1 (en) * 2003-07-01 2005-01-05 Koninklijke Philips Electronics N.V. Selection of a mipmap level
JP4170283B2 (ja) 2004-11-01 2008-10-22 株式会社ソニー・コンピュータエンタテインメント 描画処理装置および描画処理方法
JP2006244426A (ja) 2005-03-07 2006-09-14 Sony Computer Entertainment Inc テクスチャ処理装置、描画処理装置、およびテクスチャ処理方法
US7372468B1 (en) * 2005-10-11 2008-05-13 Nvidia Corporation Anisotropic texture filtering with a modified number of texture samples
CN100468461C (zh) * 2005-11-10 2009-03-11 北京航空航天大学 逼真三维地形几何模型的实时绘制方法
US7561156B2 (en) * 2006-02-08 2009-07-14 INOVO Limited Adaptive quadtree-based scalable surface rendering
US7528551B2 (en) * 2007-02-26 2009-05-05 Semiconductor Components Industries, L.L.C. LED control system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001005950A (ja) 1999-06-21 2001-01-12 Fuji Photo Film Co Ltd 画像サーバ装置および画像転送方法
JP2003308544A (ja) 2002-04-18 2003-10-31 Taito Corp ミップマップデータの高速読出方式
JP2004078296A (ja) 2002-08-09 2004-03-11 Victor Co Of Japan Ltd 画像生成装置
KR100601880B1 (ko) 2005-04-27 2006-07-18 에스케이 텔레콤주식회사 Gpu를 이용하여 실시간 3차원 그래픽 이미지를점진적으로 전송하는 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8952962B2 (en) 2011-09-14 2015-02-10 Samsung Electronics Co., Ltd. Graphics processing method and apparatus using post fragment shader

Also Published As

Publication number Publication date
US20080303841A1 (en) 2008-12-11
US7948500B2 (en) 2011-05-24
JP4799588B2 (ja) 2011-10-26
CN101344961A (zh) 2009-01-14
JP2008305408A (ja) 2008-12-18
TWI377520B (en) 2012-11-21
KR20080108051A (ko) 2008-12-11
DE102008026431A1 (de) 2009-01-08
TW200905608A (en) 2009-02-01
CN101344961B (zh) 2011-06-15
DE102008026431B4 (de) 2014-06-12

Similar Documents

Publication Publication Date Title
KR100965637B1 (ko) 상주 밉맵 데이터를 이용한 비상주 밉맵 데이터의 보외법
US9978171B2 (en) Control of a sample mask from a fragment shader program
US8941653B2 (en) Order-preserving distributed rasterizer
US8692829B2 (en) Calculation of plane equations after determination of Z-buffer visibility
KR101091374B1 (ko) 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템
US9495781B2 (en) Early sample evaluation during coarse rasterization
US8704836B1 (en) Distributing primitives to multiple rasterizers
US9830741B2 (en) Setting downstream render state in an upstream shader
US9953455B2 (en) Handling post-Z coverage data in raster operations
KR101009557B1 (ko) 하이브리드 멀티샘플/수퍼샘플 안티에일리어싱
US8271734B1 (en) Method and system for converting data formats using a shared cache coupled between clients and an external memory
US8624910B2 (en) Register indexed sampler for texture opcodes
US8570324B2 (en) Method for watertight evaluation of an approximate catmull-clark surface
US8605102B1 (en) Rasterization tile coalescer and reorder buffer
US8605085B1 (en) System and method for perspective corrected tessellation using parameter space warping
US9633458B2 (en) Method and system for reducing a polygon bounding box
US8427493B2 (en) Draw commands with built-in begin/end
US7944453B1 (en) Extrapolation texture filtering for nonresident mipmaps
US9058672B2 (en) Using a pixel offset for evaluating a plane equation
US9916680B2 (en) Low-power processing in depth read-only operating regimes
US9013498B1 (en) Determining a working set of texture maps
US8947444B1 (en) Distributed vertex attribute fetch
US9406101B2 (en) Technique for improving the performance of a tessellation pipeline
US9111360B2 (en) Technique for improving the performance of a tessellation pipeline
US9501847B1 (en) Parallel line stipple computation

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130522

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140521

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150519

Year of fee payment: 6