KR101231291B1 - 자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법 - Google Patents

자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법 Download PDF

Info

Publication number
KR101231291B1
KR101231291B1 KR1020087031260A KR20087031260A KR101231291B1 KR 101231291 B1 KR101231291 B1 KR 101231291B1 KR 1020087031260 A KR1020087031260 A KR 1020087031260A KR 20087031260 A KR20087031260 A KR 20087031260A KR 101231291 B1 KR101231291 B1 KR 101231291B1
Authority
KR
South Korea
Prior art keywords
slot
resource
shader
shaders
cost
Prior art date
Application number
KR1020087031260A
Other languages
English (en)
Other versions
KR20090024178A (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 KR20090024178A publication Critical patent/KR20090024178A/ko
Application granted granted Critical
Publication of KR101231291B1 publication Critical patent/KR101231291B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing

Landscapes

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

Abstract

그래픽 파이프라인에서 쉐이더들과 연관된 특정 슬롯들에 자원들을 결합하기 위한 기법들 및 기술들이 제공된다. 각각의 쉐이더에 의해 사용되는 자원들 간의 자원 종속성들이 결정될 수 있고, 이러한 자원 종속성들에 기초하여 공통 자원/슬롯 연관성들이 계산될 수 있다. 각각의 공통 자원/슬롯 연관성은 슬롯들 중 특정 슬롯과 연관될 자원들 중 특정 자원을 식별한다.
그래픽 파이프 라인, 쉐이더, 자원 종속성, 자원 결합, 자원/슬롯 연관성

Description

자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법{FAST RECONFIGURATION OF GRAPHICS PIPELINE STATE}
스크린 상의 3차원(3D) 그래픽의 렌더링 및 표시는 통상적으로 많은 계산 및 컴퓨테이션을 필요로 한다. 간단한 그래픽 시스템에서, 컴퓨테이션은 중앙 처리 장치(CPU) 및 그래픽 처리 장치(GPU)에 의한 소정 레벨의 협동 또는 분담 처리에 따라 이루어진다. 하나의 예시적인 시나리오에서, CPU에서 명령어가 처리되고, 소정의 초기 컴퓨테이션들이 발생한 후, 렌더링될 개체를 정의하는 한 세트의 좌표점들 또는 정점들은 그래픽 파이프라인에서 GPU에 의한 추가 처리를 위해 비디오 메모리에 저장된다. 그래픽 프로그래머들이 한 세트의 이용 가능한 그래픽 API들을 통해 그래픽 애플리케이션들을 개발할 때, 일반적으로 프로그래머는 한 세트의 알고리즘 요소들에 의해 조작될 한 세트의 정점들을 지시한다. 이 데이터는 그래픽 파이프라인 내로 전송되며, 각각의 정점은 그래픽 파이프라인에서 일정 세트의 GPU 서브유닛들을 통해 스트리밍된다. 테셀레이터(tesselator)라고 하는 이러한 서브유닛들 중 하나는 표현되는 개체의 표면을 효율적으로 커버하도록 설계된 소정의 알고리즘들에 따라 그래픽 데이터를 간단한 다각형들로 분해한다. 이후, 때때로 쉐이더(shader) 또는 "쉐이더 프로그램"으로 지칭되는 하나 이상의 프로그래머블 쉐이더 유닛이 데이터를 조작하고, 그래픽 데이터에 대해 특수 연산들을 수행할 수 있다. 쉐이더들은 예를 들어 정점 쉐이더(들), 기하 쉐이더(들) 및 픽셀 쉐이더(들)를 포함할 수 있다.
단일 쉐이더가 쉐이더 상수들의 상이한 조합들을 수신할 수 있으며, 제공되는 특정 쉐이더 상수들의 조합에 따라 쉐이더에 의해 생성되는 출력이 변할 것이다. 이러한 쉐이더 상수들은 예를 들어 픽셀들이 어떻게 조합되는지, 데이터가 어떻게 입출력되는지, 그리고 텍스처(texture)의 경우에 텍스처로부터 어떻게 값들이 추출되는지를 지정할 수 있다. 쉐이딩 프로세스는 컴퓨테이션 집약적이고 복잡한 프로세스이다. 이러한 특정 쉐이더들이 그래픽 파이프라인에서 동작할 때, 각각의 스테이지에서 발생하는 연산들로 인해 규칙적인 병목들이 존재한다.
"상태"는 쉐이더 프로그램에 의해 해석되고 있는 자원들을 지칭한다. 임의의 주어진 사례에서, 그래픽 파이프라인은 거대한 양의 동적 상태(렌더링 상태, 쉐이더들, 쉐이더 상수 변수들, 자원/메모리 결합들 등)를 포함한다. 상태의 상이한 조합들은 다양한 시뮬레이션된 자료들 및 비주얼 효과들을 가능하게 한다.
이러한 상태의 하나의 성분은 쉐이더 프로그램을 실행하기 전에 GPU로 향해야 하는 한 세트의 쉐이더 상수들이다. 그래픽 파이프라인을 구현하는 데 사용되는 하드웨어는 임의의 주어진 사례에서 하나의 구성에만 있을 수 있으므로, 상태(예를 들어, 쉐이더 상수들)를 설정하고 GPU에 명령들을 발행하는 데 소모되는 시간을 줄이는 것이 바람직하다.
소정의 쉐이더들은 쉐이더 상수들의 그룹들 또는 집합들을 유지하는 상수 버 퍼들(상수 레지스터들과 대조적임)을 사용한다. 상수 버퍼들은 쉐이더 상수들이 보다 빠르게 GPU로 설정될 수 있게 하는데, 이는 쉐이더 상수들의 집합들이 함께 그룹화되기 때문이다.
이러한 진보에도 불구하고, 상태를 효율적으로 관리하여 중복 평가 및 장치 상태 변경을 피하는 것이 바람직할 것이다. 예를 들어, 상태를 GPU로 보다 효율적으로 설정하기 위해 상이한 쉐이더들에서 사용되는 상수 버퍼들(또는 다른 자원들)을 효율적으로 배열하기 위한 기술들을 제공하는 것이 바람직할 것이다.
<발명의 요약>
다수의 자원을 포함하는 종속 트리를 재구성하기 위한 기술들이 제공된다. 종속 트리는 상이한 쉐이더 자원들 간의 관계 또는 종속성의 추적을 유지한다. 각각의 특정 자원은 종속 트리 내의 부모 개체의 슬롯을 향한다. 이러한 기술들에 따르면, 종속 트리 내의 종속성들 각각이 스캐닝되고, 종속 트리의 각각의 상이한 재구성(쉐이더들의 리맵핑 또는 리빌딩)과 연관된 비용이 계산된다. 종속 트리의 각각의 재구성은 소정 자원들(CB들)이 향하는 특정 슬롯들을 변경한다. 이어서, 보다 높은 레벨의 상태들 사이에서 전이하도록 장치 재구성의 양을 줄이거나 최소화하는 종속 트리의 특정 재구성이 선택될 수 있다. 즉, 현재 로딩된 쉐이더들 사이에서 전이/스위칭하기 위해 재지향되어야 하는 슬롯들의 수를 최소화하는 종속 트리의 특정 재구성이 선택될 수 있다. 일 구현에서, 이러한 기술들은 오프라인 콘텐츠 생성 및 저장 동안에 수행될 수 있다(예를 들어, 쉐이더 세트가 의외로 빨리 알려지는 경우, 쉐이더들이 분석되고, 종속성들이 리맵핑된 후, 쉐이더들이 디 스크에 다시 저장된다). 대안 구현에서, 본 방법은 애플리케이션 실행 시간/로딩 시간에 동적으로 수행된다(예를 들어, 쉐이더 세트가 재빨리 알려지지 않는 경우).
이 요약은 아래의 상세한 설명에서 더 설명되는 개념들의 선택을 간단한 형태로 소개하고자 제공된다. 이 요약은 청구 발명의 중요한 특징들 또는 필수적인 특징들을 식별하고자 하는 의도도 없고, 청구 발명의 범위를 제한하는 데 사용하고자 하는 의도도 없다.
그래픽 파이프라인의 성능을 최적화하는 데 사용하기 위한 시스템들 및 방법들이 첨부 도면들을 참조하여 더 설명된다.
도 1은 본 발명이 구현될 수 있는 다양한 컴퓨팅 장치를 갖는 예시적인 네트워크 환경을 나타내는 블록도이다.
도 2는 본 발명의 구현될 수 있는 예시적인 비제한적인 컴퓨팅 장치를 나타내는 블록도이다.
도 3은 그래픽 처리 장치(GPU) 및 관련 그래픽 파이프라인을 위한 예시적인 하드웨어 구성을 포함하는 그래픽 서브유닛을 포함하는 예시적인 그래픽 시스템을 나타내는 도면이다.
도 4는 공통 쉐이더 코어의 하드웨어 및 소프트웨어 컴포넌트들의 예시적인 비제한적인 실시예를 나타내는 블록도이다.
도 5A는 종속 트리의 예시적인 비제한적인 블록도이다.
도 5B는 예시적인 비제한적인 그래픽 파이프라인에서 다수의 상이한 쉐이더 프로그램에 대한 다수의 상수 버퍼의 할당을 나타내는 예시적인 비제한적인 블록도이다.
도 6은 그래픽 파이프라인에서 쉐이더들과 연관된 특정 슬롯들에 자원들을 최적으로 결합하기 위한 예시적인 비제한적인 흐름도이다.
도 7은 공통 자원/슬롯 연관성을 계산하기 위한 예시적인 비제한적인 흐름도이다.
도 8은 자원/슬롯 결합을 결정하기 위한 예시적인 비제한적인 흐름도이다.
도 9는 각각의 자원을 제1 슬롯에 결합하기 위한 비용을 계산하기 위한 예시적인 비제한적인 흐름도이다.
아래의 상세한 설명은 단지 예시적일 뿐, 본 발명 또는 본 발명의 응용 및 이용을 제한하고자 하는 의도는 없다. 본 명세서에서 사용될 때, "예시적"이라는 단어는 "예, 사례 또는 실례로서 기능하는" 것을 의미한다. 본 명세서에서 "예시적인" 것으로 설명되는 임의의 구현은 다른 구현들보다 바람직하거나 이로운 것으로 해석될 필요는 없다. 후술하는 모든 구현들은 이 분야의 전문가들이 본 발명을 실시하거나 이용할 수 있도록 하기 위해 제공되며, 청구범위에 의해 정의되는 본 발명의 범위를 제한하고자 하는 의도는 없다. 또한, 전술한 배경, 간단한 요약 또는 아래의 상세한 설명에서 제공되는 임의의 명시적이거나 암시적인 이론에 얽매이고자 하는 의도는 없다.
용어
본 명세서에서 사용될 때, "쉐이더"라는 용어는 일반적으로 쉐이딩을 수행하는 GPU의 하드웨어 서브유닛을 지칭하거나, GPU로 다운로드된 후에 메모리, 예를 들어 레지스터 저장 장치에 로딩되어 쉐이더(하드웨어)에 의해 쉐이딩을 수행하는 데 사용되는 명령어들 또는 토큰들의 세트를 지칭하는 데 사용될 수 있다. 또한, "쉐이더"라는 용어는 양자가 협동하는 것을 지칭할 수 있다. 또한, "서브유닛"이라는 용어가 "쉐이더"라는 용어와 관련하여 사용되는 경우, "쉐이더"라는 용어는 쉐이딩과 연관된 처리를 수행하는 GPU의 서브유닛을 지칭하는 것으로 해석되어야 한다. "쉐이더 프로그램"이라는 용어는 일반적으로 그래픽 파이프라인에 상주하고 실행되는 컴퓨터 프로그램들 또는 프로세스들을 지칭할 수 있는데, 이는 3D 온-스크린 환경에서 이미지 또는 개체의 최종 온-스크린 표면 특성들을 결정/정의하는 것을 돕는 데 사용될 수 있다. "쉐이더들"은 이들의 특정 태스크들을 수행하기 위해 초당 수 십억 번의 계산을 수행할 수 있다.
본 명세서에서 사용될 때, "자원들"이라는 용어는 쉐이더 프로그램에 의해 사용되는 입력들을 지칭할 수 있으며, 예를 들어 쉐이더 프로그램들에 의해 사용되는 텍스처, 샘플러, 상수 버퍼 또는 임의의 다른 자원을 포함할 수 있다.
본 명세서에서 사용될 때, "쉐이더 상수"라는 용어는, 쉐이더 프로그램 내에 공급되어, 쉐이더 프로그램이 사용되는 특정 쉐이더 상수들에 기초하여 상이한 결과들을 생성할 수 있게 하는 상이한 파라미터들 또는 변수들을 지칭할 수 있다. 쉐이더 프로그램들은 각각의 쉐이더 상수에 대해 상이한 값들의 범위를 수신할 수 있다. 쉐이더 상수 변수들은 그 쉐이더의 호출 동안 값들을 변경하지 않는다.
개요
쉐이더 상수들의 실행시간 사용 패턴들을 추적한 후에 쉐이더 상수들의 사용 패턴들에 관한 사용 패턴 데이터를 생성하기 위한 기술들이 제공된다. 이어서, 이들 사용 패턴 데이터는 소정의 발견적 방법(heuristics)이 주어질 때 최적 성능을 위해 데이터를 효율적으로 레이아웃하기 위한 최적화 알고리즘에 제공된다. 고려되는 팩터들은 예를 들어 값들의 클라이언트 갱신의 빈도, 소정 쉐이더들에 의한 용법, 및 결과적인 버퍼들의 크기 및 수를 포함한다.
예시적인 네트워크 및 분산 환경
이 분야의 통상의 전문가는 본 발명이 컴퓨터 네트워크의 일부로서 또는 분산 컴퓨팅 환경에 전개될 수 있는 임의의 컴퓨터 또는 다른 클라이언트 또는 서버 장치와 관련하여 구현될 수 있다는 것을 알 수 있다. 이와 관련하여, 본 발명은 임의 수의 메모리 또는 저장 유닛들, 및 본 발명에 따라 그래픽 파이프라인의 비제한적인 구현을 위한 프로세스들과 관련하여 사용될 수 있는 임의 수의 저장 유닛들 또는 볼륨들을 통해 발생하는 임의 수의 애플리케이션들 및 프로세스들을 갖는 임의의 컴퓨터 시스템 또는 환경에 관한 것이다. 본 발명은 원격 또는 로컬 저장 장치를 갖는 네트워크 환경 또는 분산 컴퓨팅 환경에 전개된 서버 컴퓨터들 및 클라이언트 컴퓨터들을 갖는 환경에 적용될 수 있다. 본 발명은 또한 원격 또는 로컬 서비스들과 관련하여 정보를 생성, 수신 및 전송하기 위한 프로그래밍 언어 기능, 해석 및 실행 능력들을 갖는 독립식 컴퓨팅 장치들에 적용될 수 있다. 게임 환경에서, 그래픽 파이프라인은 네트워크 또는 분산 컴퓨팅 환경에서 동작하는 컴퓨팅 장치들과 특히 관련되며, 따라서 본 발명에 따른 그래픽 파이프라인 기술들은 그러한 환경들에 매우 효율적으로 적용될 수 있다.
분산 컴퓨팅은 컴퓨팅 장치들 및 시스템들 사이의 교환에 의해 컴퓨터 자원들 및 서비스들의 공유를 제공한다. 이러한 자원들 및 서비스들은 정보의 교환, 파일들에 대한 캐시 저장 및 디스크 저장을 포함한다. 분산 컴퓨팅은 네트워크 접속을 이용하여, 클라이언트들이 전체 기업에 이익이 되도록 그들의 집합적인 능력을 이용하는 것을 가능하게 한다. 이와 관련하여, 다양한 장치들은 본 발명의 그래픽 파이프라인 프로세스들과 관련될 수 있는 애플리케이션들, 개체들 또는 자원들을 구비할 수 있다.
도 1은 예시적인 네트워크 또는 분산 컴퓨팅 환경의 개략도를 제공한다. 분산 컴퓨팅 환경은 컴퓨팅 개체들(10a, 10b 등) 및 컴퓨팅 개체들 또는 장치들(110a, 110b, 110c 등)을 포함한다. 이러한 개체들은 프로그램, 메소드, 데이터 스토어, 프로그래머블 로직 등을 포함할 수 있다. 개체들은 PDA, 오디오/비디오 장치, MP3 플레이어, 퍼스널 컴퓨터 등과 같은 동일 또는 상이한 장치들의 부분들을 포함할 수 있다. 각각의 개체는 통신 네트워크(14)를 통해 다른 개체와 통신할 수 있다. 이러한 네트워크는 도 2A의 시스템에 서비스들을 제공하는 다른 컴퓨팅 개체들 및 컴퓨팅 장치들을 포함할 수 있으며, 다수의 상호접속된 네트워크들을 나타낼 수 있다. 본 발명의 일 양태에 따르면, 각각의 개체(10a, 10b 등 또는 110a, 110b, 110c 등)는 본 발명에 따른 그래픽 파이프라인 프로세스들의 사용을 요청하기 위해 API 또는 다른 개체, 소프트웨어, 펌웨어 및/또는 하드웨어를 이용할 수 있는 애플리케이션을 포함할 수 있다.
또한, 110c와 같은 개체는 다른 컴퓨팅 장치(10a, 10b 등 또는 110a, 110b 등) 상에서 호스트될 수 있다는 것을 알 수 있다. 따라서, 묘사된 물리적 환경이 접속된 장치들을 컴퓨터들로서 도시할 수 있지만, 그러한 도시는 단지 예시적이며, 대안으로 PDA, 텔레비전, MP3 플레이어 등과 같은 다양한 디지털 장치, 인터페이스, COM 개체와 같은 소프트웨어 개체들 등을 포함하는 물리적 환경이 묘사되거나 기술될 수 있다.
분산 컴퓨팅 환경들을 지원하는 다양한 시스템, 컴포넌트 및 네트워크 구성이 존재한다. 예를 들어, 컴퓨팅 시스템들은 유선 또는 무선 시스템들에 의해, 로컬 네트워크들 또는 널리 분산된 네트워크들에 의해 서로 접속될 수 있다. 일반적으로, 많은 네트워크가 인터넷에 결합되며, 인터넷은 널리 분산된 컴퓨팅을 위한 기반구조를 제공하고, 많은 상이한 네트워크를 포함한다. 본 발명에 따른 그래픽 파이프라인에 부수하여 행해지는 예시적인 통신을 위해 임의의 기반구조가 이용될 수 있다.
홈 네트워킹 환경들에서는, 파워 라인, 데이터(무선 및 유선 양쪽), 음성(예를 들어, 전화) 및 오락 매체와 같이 고유 프로토콜을 각각 지원할 수 있는 적어도 4개의 상이한 네트워크 전송 매체가 존재한다. 조명 스위치 및 기구와 같은 대부분의 가정용 제어 장치들은 접속을 위해 파워 라인을 사용할 수 있다. 데이터 서비스들은 광대역(예를 들어, DSL 또는 케이블 모뎀)으로서 가정에 들어갈 수 있으며, 무선(예를 들어, HomeRF 또는 802.11B) 또는 유선(예를 들어, HomePNA, Cat5, 이더넷, 심지어 파워 라인) 접속을 이용하여 가정 내에서 액세스될 수 있다. 음성 트래픽은 유선(예를 들어, Cat3) 또는 무선(예를 들어, 셀 전화)으로 가정에 들어갈 수 있으며, Cat3 와이어링을 이용하여 가정 내에 분배될 수 있다. 오락 매체 또는 다른 그래픽 데이터는 위성 또는 케이블을 통해 가정에 들어갈 수 있으며, 통상적으로 동축 케이블을 이용하여 가정에 분배된다. IEEE 1394 및 DVI도 매체 장치들의 클러스터들에 대한 디지털 상호접속들이다. 프로토콜 표준들로서 출현할 수 있는 이들 및 다른 네트워크 환경들 모두는 인터넷을 통해 외부 세계에 접속될 수 있는 인트라넷과 같은 네트워크를 형성하기 위해 상호접속될 수 있다. 요컨대, 다양한 상이한 소스들이 데이터의 저장 및 전송을 위해 존재하며, 따라서 나아가서 컴퓨팅 장치들은 본 발명에 따른 그래픽 파이프라인을 이용하는 프로그램 개체들에 부수하여 액세스되거나 사용되는 데이터와 같은 데이터를 공유하는 방법들을 필요로 할 것이다.
인터넷은 일반적으로 컴퓨터 네트워킹 분야에 공지된 프로토콜들의 TCP/IP 스위트를 이용하는 네트워크들 및 게이트웨이들의 집합을 지칭한다. TCP/IP는 "전송 제어 프로토콜/인터넷 프로토콜"의 약어이다. 인터넷은 사용자들이 네트워크(들)를 통해 상호작용하고 정보를 공유할 수 있게 하는 네트워킹 프로토콜들을 실행하는 컴퓨터들에 의해 상호접속되는 지리적으로 분산된 원격 컴퓨터 네트워크들의 시스템으로서 설명될 수 있다. 이러한 널리 확산된 정보 공유로 인해, 인터넷과 같은 원격 네트워크들은 지금까지는 일반적으로 개발자들이 본질적으로 제한 없이 특수 동작들 또는 서비스들을 수행하기 위한 소프트웨어 애플리케이션들을 설계할 수 있는 개방 시스템으로 발전하여 왔다.
따라서, 네트워크 기반구조는 클라이언트/서버, 피어 대 피어 또는 하이브리드 아키텍처들과 같은 다양한 네트워크 토폴로지를 가능하게 한다. "클라이언트"는 그와 관련 없는 다른 클래스 또는 그룹의 서비스들을 이용하는 클래스 또는 그룹의 일원이다. 따라서, 컴퓨팅에 있어서, 클라이언트는 다른 프로그램에 의해 제공되는 서비스를 요청하는 프로세스, 즉 대략 한 세트의 명령어 또는 태스크이다. 클라이언트 프로세스는 다른 프로그램 또는 서비스 자체에 대한 어떠한 작업 상세도 알 필요 없이 요청된 서비스를 이용한다. 클라이언트/서버 아키텍처, 특히 네트워크화된 시스템에서, 일반적으로 클라이언트는 다른 컴퓨터, 예를 들어 서버에 의해 제공되는 공유 네트워크 자원들에 액세스하는 컴퓨터이다. 도 1의 예에서, 상황에 따라서는 어떠한 컴퓨터도 클라이언트, 서버 또는 양자로서 간주될 수 있지만, 컴퓨터들(110a, 110b 등)은 클라이언트로서 간주될 수 있고, 컴퓨터들(10a, 10b 등)은 서버로서 간주될 수 있는데, 서버(10a, 10b 등)는 클라이언트 컴퓨터들(110a, 110b 등)에서 복제되는 데이터를 유지한다. 이러한 임의의 컴퓨팅 장치는 본 발명의 그래픽 파이프라인의 구현에 고유한 그래픽 프로그래밍 기술들과 관련될 수 있는 데이터를 처리하거나 서비스들 또는 태스크들을 요청할 수 있다.
통상적으로, 서버는 인터넷과 같은 원격 또는 로컬 네트워크를 통해 액세스 가능한 원격 컴퓨터 시스템이다. 클라이언트 프로세스는 제1 컴퓨터 시스템에서 활성일 수 있으며, 서버 프로세스는 제2 컴퓨터 시스템에서 활성일 수 있는데, 이들은 통신 매체를 통해 서로 통신하여, 분산된 기능을 제공하고, 다수의 클라이언트가 서버의 정보 수집 능력을 이용할 수 있게 한다. 그래픽 파이프라인의 그래픽 프로그래밍 기술들에 따라 사용되는 임의의 소프트웨어 개체는 다수의 컴퓨팅 장치들 또는 개체들에 분산될 수 있다.
클라이언트(들) 및 서버(들)는 프로토콜 계층(들)에 의해 제공되는 기능을 이용하여 서로 통신한다. 예를 들어, 하이퍼텍스트 전송 프로토콜(HTTP)이 월드 와이드 웹(WWW) 또는 "웹"과 관련하여 사용되는 일반적인 프로토콜이다. 통상적으로, 인터넷 프로토콜(IP) 어드레스와 같은 컴퓨터 네트워크 어드레스 또는 유니버설 리소스 로케이터(URL)와 같은 다른 기준을 사용하여 서버 또는 클라이언트 컴퓨터들을 서로 식별할 수 있다. 네트워크 어드레스는 URL 어드레스로서 참조될 수 있다. 통신은 통신 매체를 통해 제공될 수 있는데, 예를 들어 클라이언트(들) 및 서버(들)는 고용량 통신을 위해 TCP/IP 접속(들)을 통해 서로 결합될 수 있다.
따라서, 도 1은 본 발명이 이용될 수 있고, 서버가 네트워크/버스를 통해 클라이언트 컴퓨터들과 통신하는 예시적인 네트워크 또는 분산 환경을 나타낸다. 구체적으로, 본 발명에 따르면, 다수의 서버(10a, 10b 등)가 LAN, WAN, 인트라넷, 인터넷 등일 수 있는 통신 네트워크/버스(14)를 통해 휴대형 컴퓨터, 핸드헬드 컴퓨터, 씬 클라이언트, 네트워크화된 기구, 또는 VCR, TV, 오븐, 조명등, 히터 등과 같은 다른 장치 등의 다수의 클라이언트 또는 원격 컴퓨팅 장치(110a, 110b, 110c, 110d, 110e 등)와 상호접속된다. 따라서, 본 발명은 본 발명의 그래픽 파이프라인을 이용하는 그래픽 인터페이스를 구현하는 것이 바람직한 임의의 컴퓨팅 장치에 적용될 수 있는 것으로 간주된다.
예를 들어, 통신 네트워크/버스(14)가 인터넷인 네트워크 환경에서, 서버들(10a, 10b 등)은 HTTP와 같은 다수의 공지 프로토콜 중 임의의 프로토콜을 통해 클라이언트들(110a, 110b, 110c, 110d, 110e 등)과 통신하는 웹 서버들일 수 있다. 서버들(10a, 10b 등)은 또한 분산 컴퓨팅 환경의 특성일 수 있는 바와 같이 클라이언트들(110a, 110b, 110c, 110d, 110e 등)로서 사용될 수 있다. 통신은 적절한 경우에 유선 또는 무선일 수 있다. 클라이언트 장치들(110a, 110b, 110c, 110d, 110e 등)은 통신 네트워크/버스(14)를 통해 통신하거나 통신할 수 없으며, 그들과 관련된 독립적인 통신들을 가질 수 있다. 예를 들어, TV 또는 VCR의 경우, 이들의 제어에 대한 네트워크화된 양태가 존재하거나 존재할 수 없다. 각각의 클라이언트 컴퓨터(110a, 110b, 110c, 110d, 110e 등) 및 서버 컴퓨터(10a, 10b 등)는 다양한 애플리케이션 프로그램 모듈 또는 개체(135)를 구비할 수 있으며, 파일들 또는 데이터 스트림들이 저장될 수 있거나, 파일들 또는 데이터 스트림들의 일부(들)가 다운로드, 전송 또는 이동될 수 있는 다양한 유형의 저장 소자들 또는 개체들에 대한 접속들 또는 액세스를 구비할 수 있다. 컴퓨터들(10a, 10b, 110a, 110b 등) 중 어느 하나 이상이 본 발명에 따라 처리되는 데이터를 저장하기 위한 데이터베이스 또는 메모리(20)와 같은 데이터베이스(20) 또는 다른 저장 소자의 유지 및 갱신을 담당할 수 있다. 따라서, 본 발명은 컴퓨터 네트워크/버스(14)에 액세스하고 상호작용할 수 있는 클라이언트 컴퓨터들(110a, 110b 등), 및 클라이언트 컴퓨터들(110a, 110b 등) 및 다른 유사한 장치들, 및 데이터베이스(20)와 상호작용할 수 있는 서버 컴퓨터들(10a, 10b 등)을 구비하는 컴퓨터 네트워크 환경에서 이용될 수 있다.
예시적인 컴퓨팅 장치
도 2 및 아래의 설명은 본 발명이 구현될 수 있는 적절한 컴퓨팅 환경의 간단한 일반적인 설명을 제공하는 것을 의도한다. 그러나, 모든 종류의 핸드헬드, 휴대형 및 다른 컴퓨팅 장치들 및 컴퓨팅 개체들이 본 발명과 관련하여, 즉 컴퓨팅 환경 내에 GPU가 존재하는 어느 곳에서나 사용하기 위해 고려된다는 것을 이해해야 한다. 아래에서는 범용 컴퓨터가 설명되지만, 이것은 단지 일례이며, 본 발명은 네트워크/버스 연동성 및 상호작용을 갖는 씬 클라이언트에서 구현될 수 있다. 따라서, 본 발명은 매우 적거나 최소한의 클라이언트 자원들이 관련된 네트워크화된 호스트된 서비스들의 환경, 예를 들어 클라이언트 장치가 기구 내에 배치된 개체와 같이 네트워크/버스에 대한 인터페이스로서만 사용되는 네트워크화된 환경에서 구현될 수 있다. 본질적으로, 데이터가 저장될 수 있거나, 데이터가 검색되거나 다른 컴퓨터로 전송될 수 있는 어느 곳이나 본 발명에 따른 그래픽 최적화 기술의 운용을 위한 바람직하거나 적절한 환경이다.
필요하지는 않지만, 본 발명은 장치 또는 개체에 대한 서비스들의 개발자에 의한 사용을 위해 운영 체제를 통해 구현될 수 있고, 그리고/또는 본 발명의 그래픽 인터페이스를 위한 그래픽 프로그래밍 기술들과 관련하여 동작하는 애플리케이션 소프트웨어 내에 포함될 수 있다. 소프트웨어는 일반적으로 클라이언트 워크스테이션, 서버 또는 다른 장치 등의 하나 이상의 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 일반적으로, 프로그램 모듈들의 기능은 다양한 실시예에서 필요에 따라 결합 또는 분산될 수 있다. 더욱이, 이 분야의 전문가들은 본 발명이 다른 컴퓨터 시스템 구성들 및 프로토콜들을 이용하여 실시될 수 있음을 알 것이다. 본 발명과 함께 사용하기에 적합할 수 있는 다른 공지된 컴퓨팅 시스템들, 환경들 및/또는 구성들은 퍼스널 컴퓨터(PC), 자동 입출금 장치, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 프로그램가능한 가전제품, 네트워크 PC, 기구, 조명등, 환경 제어 소자, 미니컴퓨터, 메인프레임 컴퓨터 등을 포함하지만, 이에 제한되는 것은 아니다. 본 발명은 통신 네트워크/버스 또는 다른 데이터 전송 매체를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서도 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 비롯한 로컬 및 원격 컴퓨터 저장 매체 둘다에 위치할 수 있으며, 클라이언트 노드들은 또한 서버 노드들로서 거동할 수 있다.
따라서, 도 2는 본 발명이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 일례를 도시하지만, 위에서 명백해진 바와 같이, 컴퓨팅 시스템 환경(100)은 적절한 컴퓨팅 환경의 일례에 불과하며, 본 발명의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 또한, 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안 된다.
도 2와 관련하여, 본 발명을 구현하는 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들은 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트를 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함할 수 있지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 (메자닌 버스(mezzanine bus)로도 알려진) PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 2는 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 단지 예로서, 도 2는 비이동식·비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(141), 이동식·비휘발성 자기 디스크(152)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(151), CD-ROM 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(156)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(155)를 도시한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 2에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 2에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 키보드(162), 및 일반적으로 마우스, 트랙볼(trackball) 또는 터치 패드로서 참조되는 포인팅 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수 있다. 노스브리지 등의 그래픽 인터페이스(182)도 시스템 버스(121)에 접속될 수 있다. 노스브리지는 CPU 또는 호스트 처리 장치(120)와 통신하는 칩셋이며, 가속 그래픽 포트(AGP) 통신을 담당한다. 하나 이상의 그래픽 처리 장치(GPU)(184)가 그래픽 인터페이스(182)와 통신할 수 있다. 이와 관련하여, GPU(184)는 일반적으로 레지스터 저장 장치와 같은 온칩 메모리 저장 장치를 포함하며, GPU(184)는 본 발명의 애플리케이션 변수들이 영향을 미칠 수 있는 비디오 메모리(186)와 통신한다. 그러나, GPU(184)는 코프로세서의 일례일 뿐이며, 따라서 다양한 코프로세싱 장치들이 컴퓨터(110) 내에 포함될 수 있고, 픽셀 및 정점 쉐이더들과 같은 다양한 절차 쉐이더들을 포함할 수 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 메모리(186)와 또한 통신할 수 있는 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터 외에, 컴퓨터는 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 접속을 사용하여 네트워크화된 또는 분산 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 퍼스널용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 도 2에는 메모리 저장 장치(181)만이 도시되어 있지만, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함한다. 도 2에 도시된 논리적 접속으로는 LAN(171) 및 WAN(173)이 있지만, 기타 네트워크/버스를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 2는 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며, 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
예시적인 분산 컴퓨팅 프레임워크 또는 아키텍처
다양한 분산 컴퓨팅 프레임워크가 개인 컴퓨팅 및 인터넷의 폭주를 고려하여 개발되었고 개발되고 있다. 개인들 및 직업 사용자들은 다 같이, 애플리케이션들 및 컴퓨팅 장치들에 대해 결함 없이 연동 가능한 웹-인에이블드 인터페이스를 제공받으며, 이는 컴퓨팅 활동들을 점점 웹 브라우저 또는 네트워크 지향적이 되게 한다.
예를 들어, 마이크로소프트(등록상표)의 관리식 코드 플랫폼, 즉 .NET는 서버들, 웹 기반 데이터 저장 등의 빌딩 블록 서비스들 및 다운로드 가능 장치 소프트웨어를 포함한다. 일반적으로, .NET 플랫폼은 (1) 전 범위의 컴퓨팅 장치들이 함께 작업하게 하고 사용자 정보가 그들 모두에서 자동 갱신되고 동기화되게 하는 능력, (2) HTML이 아니라 XML의 보다 많은 사용에 의해 가능해지는 웹 페이지들에 대한 향상된 상호작용 능력, (3) 예를 들어 이메일 등의 다양한 애플리케이션 또는 Office.NET 등의 소프트웨어의 관리를 위해 중앙 시작 포인트에서 사용자로의 제품들 및 서비스들의 맞춤형 액세스 및 전달을 특징으로 하는 온라인 서비스들, (4) 정보에 대한 액세스의 효율 및 용이성은 물론, 사용자들 및 장치들 사이의 정보의 동기화를 향상시키는 중앙식 데이터 저장, (5) 이메일, 팩스 및 전화 등의 다양한 통신 매체를 통합하는 능력, (6) 개발자들을 위해, 재사용 가능한 모듈들을 생성하여 생산성을 높이고 프로그래밍 에러들의 수를 줄이는 능력, 및 (7) 많은 다른 크로스-플랫폼 및 언어 통합 특징들을 또한 제공한다.
여기에 설명되는 소정의 예시적인 실시예들이 컴퓨팅 장치 상에 상주하는 소프트웨어와 관련하여 설명되지만, 본 발명의 하나 이상의 부분은 운영 체제, 애플리케이션 프로그래밍 인터페이스(API) 또는 "미들 맨" 개체, 제어 개체, 하드웨어, 펌웨어, 중간 언어 명령어 또는 개체들 등을 통해 구현될 수도 있으며, 따라서 방법들은 .NET 코드 등의 관리식 코드에 의해, 그리고 또한 다른 분산형 컴퓨팅 프레임워크들에서 가능하게 되는 모든 언어들 및 서비스들에 포함되거나, 그들에서 지원되거나, 그들을 통해 액세스될 수 있다.
예시적인 3D 그래픽 시스템의 컴포넌트들
도 3은 그래픽 처리 장치(GPU)(384') 및 관련 그래픽 파이프라인(384'-1)에 대한 예시적인 하드웨어 구성을 포함하는 비디오 카드와 같은 그래픽 서브유닛을 포함하는 그래픽 시스템(300)을 나타낸다. 예시적인 3D 그래픽 시스템(300)은 특히 중앙 처리 장치(CPU; 320) 및 그래픽 파이프라인(384'-1)(때때로 "렌더링 파이프라인"으로 참조됨)을 포함하는 그래픽 프로세서 장치(GPU; 384')(때때로 비주얼 처리 장치(VPU)로 참조됨)을 포함하는 그래픽 카드를 포함할 수 있다. GPU(384')는 예를 들어 AGP 또는 PCI 익스프레스 버스를 통해 CPU(320) 및 메인 RAM에 결합될 수 있다.
CPU(320)는 일반적으로 동시에 여러(예를 들어, 하나 이상) 스레드를 처리 또는 실행할 수 있는 동시 멀티스레딩(SMT) 프로세서와 같이 다수의 코어(예를 들어, 프로세서들)를 실행하는 단일 칩 멀티코어 프로세서 등의 임의의 프로세서일 수 있다. 여기서 사용될 때, "스레드"라는 용어는 명령어의 개별 시퀀스를 지칭한다. 따라서, 동시 멀티스레딩은 단일 프로세서가 여러 스레드를 동시에 처리하는 능력을 지칭한다. CPU(320) 내의 각각의 코어는 프로세서 명령어 세트에 대한 확장으로서 단일 명령어 다수 데이터(SIMD) 유닛을 가질 수 있다. 이 확장은 이러한 명령어 세트들을 이용하도록 특별히 코딩될 때 정수 및 부동 소수점 집약적인 애플리케이션들의 속도 향상을 돕는 특수 명령어를 포함할 수 있다. 3D 그래픽의 렌더링에 수반되는 계산들은 수학적으로 집약적이어서, CPU(320)에 상당히 부담을 줄 수 있다. CPU(320)에 대한 부담을 줄이기 위하여, GPU(384')를 제공하여 컴퓨터가 보다 효율적으로 동작하는 것을 돕는다.
그래픽이 래스터 출력 장치(예를 들어, 컴퓨터 모니터(191))로 출력되기 전에, 그러한 그래픽을 생성하는 데 사용되는 정보가 GPU(384') 및 그의 그래픽 파이프라인(384'-1)을 통과한다. GPU(384')는 초당 수십억 번의 기하 계산을 수행하도록 하드웨어로 그래픽 파이프라인(384'-1)을 구현한다.
GPU(384')는 그래픽의 조작 및 표시에 매우 효율적이며, 그의 고도로 병렬적인 구조는 소정 범위의 복잡한 알고리즘들에 대해 통상의 CPU들보다 GPU를 보다 효율적이게 한다. GPU(384')는 다수의 그래픽 프리미티브 동작들을, 호스트 CPU(320)를 이용하여 스크린에 직접 그리는 것보다 훨씬 빠르게 이들을 실행하는 방식으로 구현한다. CPU(320)로부터 이러한 부담을 덜어주는 것은 컴퓨터의 CPU(320)가 그래픽 데이터를 처리하기 위해 열심히 작업할 필요가 없음을 의미한다(예를 들어, 다른 작업들에 사용될 수 있는 사이클들을 자유롭게 한다). 대부분의 그래픽 기능들을 GPU(384')로 넘김으로써, CPU는 집중적인 실시간 그래픽 환경을 달성하기 위하여 훨씬 더 많은 계산을 수행할 수 있다. GPU(384')는 래스터 디스플레이 장치(예를 들어, 컴퓨터 모니터) 상의 그래픽 요소들(예를 들어, 텍스처를 가진 다각형들 및 이들에 적용되는 쉐이딩)의 디스플레이의 가속화를 담당한다. GPU(384')는 원시 기하 데이터를 처리하여, 궁극적으로 그 정보를 모니터(191) 상에 픽셀들로서 표현한다. 그래픽 파이프라인(384'-1)은 3D 장면의 표현을 수신하고, 그 표현을 다수의 처리 스테이지를 통해 실행함으로써 그 표현을 효율적으로 처리하며, 3D 장면들을 모니터(191)에서 2D 래스터 이미지들로서 렌더링한다.
GPU(384')는 실시간 2D 및 3D 그래픽을 처리하도록 구성된 하나 이상의 독립식 마이크로프로세서로서 구현될 수 있다. GPU(384')는 2D 및/또는 3D 컴퓨터 그래픽을 처리한 후 2D 또는 3D 이미지들을 렌더링하기 위해 (마더보드로부터) 분리된 그래픽 카드 상에 장착될 수 있다. GPU(384')는 그래픽 카드 상에서 직접 고성능 VRAM에 액세스할 수 있다. 대안으로, GPU(384')는 메인 메모리를 프레임 버퍼로서 사용하고 CPU를 프레임 렌더링을 돕는 데 사용할 수 있도록 PC 마더보드 상의 칩들 중 하나에 통합됨으로써 구현될 수 있다. GPU(384')는 예를 들어 퍼스널 컴퓨터 또는 게임 콘솔에 대한 전용 그래픽/비디오 렌더링 장치로서 사용될 수 있다.
3D 그래픽 렌더링에서, 그래픽 파이프라인(384'-1)은 GPU(384')가 애플리케이션으로부터의 3차원 이미지 데이터(예를 들어, 정점들, 텍스처들 및 다른 데이터)를 2차원 스크린 상에 표시되는 실제 이미지로 변환하기 위해 실행하는 다양한 처리 스테이지(예를 들어, 단계들의 시퀀스)를 지칭한다. 정점에 대해 제공되는 특성들은 예를 들어 x-y-z 좌표들, RGB 값들, 반투명성, 텍스처, 반사도 및 다른 특성들을 포함할 수 있다.
그래픽 파이프라인(384'-1) 내의 상이한 스테이지들은 결국에 렌더링되는 이미지를 생성하기 위하여 기하 프리미티브들의 엔드 포인트들(정점들) 또는 제어 포인트들에서 특성들로서 최초 제공되는 정보의 처리를 담당한다. 여기서 사용될 때, "프리미티브"라는 용어는 단일 3D 엔티티를 형성하는 정점들의 집합을 지칭할 수 있다. 가장 간단한 프리미티브는 3D 좌표계에서의 포인트들의 집합이며, 이는 포인트 리스트라고 한다. 3D 그래픽에서의 대표적인 프리미티브들은 라인 및 삼각형이다. 다른 유형의 프리미티브는 예를 들어 라인, 라인 리스트, 라인 스트립, 삼각형, 삼각형 리스트, 삼각형 스트립 및 삼각형 팬을 포함할 수 있다. 종종, 3D 프리미티브는 다각형이다. 다각형은 적어도 3개의 정점에 의해 묘사되는 닫힌 3D 형상이다. 가장 간단한 다각형은 삼각형이다. 삼각형은 대부분의 다각형을 구성하는 데 사용될 수 있는데, 이는 삼각형의 3개 정점 모두가 동일 평면 내에 있는 것이 보증되기 때문이다. 삼각형은 크고 복잡한 다각형 및 메쉬를 형성하는 데 사용될 수 있다.
그래픽 파이프라인(384'-1) 내의 모든 스테이지는 병렬로 작업하고 있다. 그래픽 파이프라인(384'-1)을 재구성함으로써 상이한 비주얼 효과들이 달성될 수 있다. 예를 들어, 그래픽 파이프라인은 표시될 기하(예를 들어, 삼각형들의 리스트)를 수신한 후, 그에 대해 필요한 기하 변환을 수행하고, 표시될 기하에 대한 칼라를 계산한 후, 표시될 기하를 렌더링할 수 있다.
파이프라인 스테이지
일반적으로, 그래픽 파이프라인(384'-1)은 다음의 논리적 스테이지들, 예를 들어 입력 어셈블러(IA), 정점 쉐이더들(384'-1a1, 384'-1a2), 관련 스트림 출력(384'-2)을 갖는 기하 쉐이더(384'-1a3), 래스터라이저(384'-1c), 픽셀 쉐이더(384'-1a4) 및 출력 병합기(OM)를 포함할 수 있다. 그래픽 파이프라인(384'-1)은 자원들의 사용을 최적화하고, 그래픽 파이프라인(384'-1) 내의 작업 부하를 균형화하고, IEEE에 따르는 정수 또는 부동 소수점 값들을 갖는 계산된 정보에 대한 액세스를 허가하고, 추가적인 프로그램 가능성을 제공하도록 구성될 수 있다.
그래픽 파이프라인(384'-1)의 예시적인 비제한적인 실시예는 다양한 구성으로 구성될 수 있는 다수의 유닛 또는 처리 코어(384'-1a)를 포함하는 동적 구성 가능한 공통 쉐이더 코어(들)를 사용한다. 공통 쉐이더 코어는, (상이한 쉐이더들에 대해) 동일한 하드웨어 유닛들이 쉐이더가 필요 없을 때 이를 파이프라인의 일부로서 재구성하거나 디스에이블하여 활성 상태를 유지하는 스테이지들을 위해 자원들을 자유롭게 함으로써 부하 균형을 제공함에 따라, 간단한 최적화를 가능하게 한다.
이러한 처리 코어들(384'-1a)은 실행되는 특정 애플리케이션에 따라 다양한 패턴으로 메모리 내에 판독되고 메모리 밖으로 기입될 수 있다. 유닛들(384'-1a) 각각은 그의 구성에 따라 정점 쉐이더 스테이지, 기하 쉐이더 스테이지 및/또는 픽셀 쉐이더 스테이지를 수행하는 데 사용될 수 있다. 이것은 파이프라인(384'-1)에 대해 요청되고 있는 태스크들에 가장 적합한 방식으로 픽셀 쉐이더들, 기하 쉐이더들 및 정점 쉐이더들을 할당하기 위하여 공통 쉐이더 코어들이 요청시에 그래픽 파이프라인(384'-1)의 상이한 스테이지들(또는 기능 블록들)에 대해 스케쥴되는 것을 가능하게 한다. 임의의 스테이지가 동적으로 인에이블 또는 디스에이블될 수 있고, 구성 또는 재구성될 수 있으며, 따라서 활성인 스테이지들을 위해 자원들을 자유롭게 하고 재설정할 수 있다. 따라서, 그래픽 칩의 기반 자원들은 그래픽 칩에 대해 요청되고 있는 태스크들을 위해 최적화될 수 있다.
도 3에 도시된 그래픽 파이프라인(384'-1)의 특정 구성은 정점 쉐이더들(384'-1a1, 384'-1a2), 연관된 스트림 출력(384'-2)을 갖는 기하 쉐이더(384'-1a3) 및 픽셀 쉐이더(384'-1a4)와 같은 복수의 공유 프로그래머블 코어 또는 공통 코어 요소(384'-1a)를 포함한다. 이러한 상이한 기능 스테이지들은 병렬로 동작하여 개별 특수 목적 프로세서들로서 기능한다. 그러한 특정 구현에 따라, 도 3에 도시된 추가적이거나 보다 적은 파이프라인 스테이지들이 존재할 수 있다. 더욱이, 소정의 정점 및 프리미티브 데이터의 처리 동안, 출력이 컴퓨터 모니터 상에 표시되기 전에, 도시된 파이프라인 스테이지들 중 일부만이 실제로 데이터를 처리할 수 있다.
입력 어셈블러(IA)
그래픽 파이프라인(384'-1)은 애플리케이션으로부터 들어오는 프리미티브 데이터 및 정점 데이터를 수신하여, 출력이 컴퓨터 모니터 또는 스크린 상에 표시되기 전에, 이 데이터를 다양한 파이프라인 스테이지를 통해 전달한다. 입력 어셈블러(IA)는 정점 메모리 버퍼들 및 인덱스 메모리 버퍼들로부터 소스 기하 데이터를 인출함으로써 삼각형, 라인 또는 포인트와 같은 정점 데이터를 그래픽 파이프라인(384'-1) 내에 도입한다.
"비 인덱스(non-indexed)" 또는 "인덱스(indexed)" 렌더링은 메모리에서 정점 데이터를 인출할 어드레스들을 산출하고, 이어서 결과들을 정점들 및 프리미티브들 내로 어셈블링하는 데 사용될 수 있다.
"비 인덱스" 렌더링은 각각의 버퍼 결합에서 시작 오프셋에서 유래되는, 정점 데이터를 포함하는 정점 버퍼(들)의 순차적 통과를 지칭한다. 정점 메모리 버퍼들(도 3에 도시되지 않음)은 애플리케이션으로부터 변환되지 않은 모델 정점들을 수신하고, 이들을 정점 데이터로서 저장할 수 있다. 버퍼들은 각각 개별 입력 슬롯에 결합된다. 모든 버퍼에 대한 데이터의 레이아웃은 입력 선언에 의해 지정되는데, 여기서 각각의 엔트리는 입력 슬롯, 구조 오프셋, 데이터 유형 및 (파이프라인 내의 제1 활성 쉐이더에 대한) 타겟 레지스터를 갖는 "요소"를 정의한다. 정점 메모리 버퍼들은 임의의 정점 유형을 포함할 수 있다. 정점 데이터는 각각의 버퍼로부터 "구조들의 어레이" 방식으로 액세스되는 다수의 버퍼로부터 유래될 수 있다. 정점들의 소정의 시퀀스가 버퍼들로부터 인출된 데이터로 구성된다. 정점 데이터의 시퀀스가 프리미티브들의 시퀀스를 표현하게 하기 위해 다양한 프리미티브 토폴로지가 이용될 수 있다. 예시적인 토폴로지들은 예를 들어 포인트 리스트, 라인 리스트, 삼각형 리스트, 삼각형 스트립이다.
"인덱스" 렌더링은 버퍼 내로의 시작 오프셋에서 유래되는, 스칼라 정수 인덱스들을 포함하는 단일 버퍼의 순차적 통과를 지칭한다. 그래픽 파이프라인(384'-1)에 의해 처리될 데이터는 또한 인덱스를 할당받을 수 있다. 인덱스 메모리 버퍼들(도 3에 도시되지 않음)은 애플리케이션으로부터 포인트, 라인, 삼각형 및 다각형을 포함하는 원시 인덱스 기하 프리미티브 데이터를 수신한다. 이러한 기하 프리미티브들은 인덱스 메모리 버퍼들과 함께 정점 데이터에서 참조될 수 있다. 각각의 인덱스는 정점 데이터를 포함하는 버퍼(들)로부터 데이터를 인출할 곳을 지시한다. 인덱스 메모리 버퍼들은 인덱스 데이터 또는 인덱스들을 포함하는데, 이들은 정점 메모리 버퍼들로의 정수 오프셋들이며, 현재의 데이터 입력 스트림들의 세트로부터 인덱스 프리미티브들을 인출하는 기술들을 이용하여 프리미티브들을 렌더링하는 데 사용된다. 인덱스 버퍼는 인덱스들을 포함하므로, 대응하는 정점 버퍼 없이는 사용될 수 없다. 인덱싱은 다수의 상황에서 유익할 수 있다. 예를 들어, 데이터를 처리하는 동안, 인덱스 값이 예를 들어 비디오 메모리 어드레싱 방식의 일부로서 사용될 수 있다(예를 들어, 인덱스는 처리를 위해 비디오 메모리의 부분들을 언제, 어디서 검색(및/또는 기입)할지를 나타낼 수 있다). 따라서, 쉐이더로 다운로드된 프로그램들은 비디오 메모리를 검색하거나 그에 기입하는 동안, 그리고 또한 그래픽 데이터를 처리하는 동안 그래픽 데이터와 연관된 인덱스 값들을 프로그램에서 사용할 수 있다.
정점 쉐이더 스테이지
입력 어셈블러(IA)는 데이터를 제1 공통 코어(384'-1a1)로 전송한다. 이 실시예에서, 제1 공통 코어(384'-1a1)는 정점 쉐이더 스테이지로서 구성된다. 정점 쉐이더 스테이지는 호스트로부터 프로그램을 통해 알고리즘 변환을 위해 지정되는 (그래픽 파이프라인의 비디오 메모리로부터의) 정점들의 스트림들에 대해 동작하거나 이들을 처리한다. 특히, 정점 쉐이더는 균일 변수들 및 정점 속성들과 같은 다양한 입력을 수신할 수 있다. 균일 변수들은 각각의 쉐이더 호출을 위한 상수 값들이다. 이와 달리, 정점 속성들은 정점 위치와 같은 정점에 대한 데이터(상이한 변수들의 특별 사례)이다.
정점 쉐이더들은 일반적으로 단일 입력 정점에 대해 동작하여, 단일 출력 정점을 생성하는데, 여기서 "정점"은 x, y 및 z 좌표를 이용하여 그의 위치에 의해 일반적으로 정의되는 3D 공간에서의 교점을 나타낸다. 정점 쉐이더 스테이지는 각각의 기하 정점이 스크린 상에 투영되기 전에 쇼트 프로그램에 의해 처리되는 것을 가능하게 할 수 있다. 예를 들어, 정점 쉐이더 스테이지는 벡터 공간 변환들 및 다른 선형화 가능 계산들을 행하기 위한 기술들을 정의함으로써 3D 공간에서 개체의 위치를 조작할 수 있다. 예를 들어, 정점 쉐이더 스테이지는 위치들, 칼라들 및 텍스처링 좌표들의 계산들을 개별 정점들에 적용할 수 있으며, 변환들, 스키닝(skinning) 및 조명 등의 동작들을 수행할 수 있다. 정점 쉐이더의 기능들의 소정 예들은 일반적으로 텍스처 좌표 변환들과 같이 후속 픽셀 쉐이더들에 대한 선형화 가능 속성들을 계산하는 임의 메쉬 변형 및 정점 변위들을 포함한다.
테셀레이터 스테이지
이어서, 데이터는 테셀레이터(384'-1b)로 전송될 수 있으며, 이 테셀레이터는 데이터에 대해 테셀레이션을 수행한다. 테셀레이션 단계는 옵션이며(점선 직사각형으로 표시됨), 소정의 실제 구현들에서는 전혀 행해지지 않는다는 것을 이 분야의 전문가들은 알 것이다. 일반적으로, 테셀레이션은 일 유형 또는 소수 유형의 합동 평면 형상들에 의한 갭들 또는 오버랩들 없는 제한된 기하 영역의 커버링을 포함하는 프로세스를 지칭한다. 테셀레이터(384'-1b)에 이어서, 파이프라인 내에는 다른 하나의 공통 코어가 존재하는데, 이는 데이터에 대한 포스트 테셀레이션 정점 쉐이딩을 수행하는 데 사용될 수 있다. 이 실시예에서 테셀레이션 단계들은 옵션이다.
기하 쉐이더 스테이지
제2 공통 코어에는 기하 쉐이더(384'-1a3)로서 구성되는 제3 공통 코어가 이어진다. 기하 쉐이더(384'-1a3)는 프리미티브들의 프로그래밍은 물론, 새로운 기하의 생성을 가능하게 한다. 기하 쉐이더(384'-1a3)는 정점들/포인트들, 라인들(2개 정점의 세트들) 및 삼각형들(3개 라인의 세트들)을 포함하는 상이한 유형들의 "프리미티브" 입력에 대해 동작하여, 입력되는 프리미티브들에 기초하여 파이프라인 내에 새로운 기하 구조를 생성할 수 있다. 기하 쉐이더의 입력들은 전체 프리미티브에 대한 정점들(라인들에 대한 2개의 정점, 삼각형에 대한 3개의 정점 또는 포인트에 대한 단일 정점) 플러스 에지 인접 프리미티브들에 대한 정점 데이터(라인에 대한 2개의 추가 정점, 삼각형에 대한 3개의 추가 정점)이다. 예를 들어, 기하 쉐이더(384'-1a3)는 하나의 프리미티브를 수신하고, 0, 1 또는 다수의 프리미티브를 출력할 수 있다. 기하 쉐이더(384'-1a3)는 선택된 단일 토폴로지를 형성하는 다수의 정점을 출력할 수 있다. 출력의 소정 예들은 삼각형 스트립, 라인 스트립 또는 포인트 리스트와 같은 토폴로지들을 포함한다. 방출되는 프리미티브들의 수는 기하 쉐이더(384'-1a3)의 임의 호출에서 다를 수 있다.
기하 쉐이더(384'-1a3)는 하나의 프리미티브를 취하여, 다수의 프리미티브를 출력할 수 있으며, 옵션으로 인접 정점들과 같은 인접 프리미티브들을 처리할 수 있다. 즉, 기하 쉐이더(384'-1a3)는 단독으로뿐만 아니라 소정의 추가 이웃 정점들과 관련해서도 전체 프리미티브에 대한 동작을 가능하게 한다. 예를 들어, 폴리라인 내의 하나의 라인 세그먼트는 그 세그먼트 앞뒤의 정점들을 판독하는 능력을 이용하여 처리될 수 있다. 이러한 능력(예를 들어, 프리미티브의 인접 정점들을 처리하는 능력)의 하나의 응용은 기하 쉐이더(384'-1a3)가 현재의 계산에서 3D 기하 공간 내의 이웃 포인트들에 대한 정보를 고려할 수 있다는 것이다.
기하 쉐이더(384'-1a3)에서 구현될 수 있는 알고리즘들은 포인트 스프라이트 또는 와이드 라인 테셀레이션, 펄/핀(fur/fin) 생성, 쉐도우 볼륨 생성, 다수의 텍스처 큐브 면들에 대한 단일 패스 렌더링 및 무게 중심 좌표의 프리미티브 데이터로서의 셋업을 포함할 수 있다(따라서, 픽셀 쉐이더는 맞춤형 속성 보간을 수행할 수 있다).
포인트 스프라이트 테셀레이션을 수행하기 위하여, 쉐이더는 단일 정점을 취하여, 사변형의 네 코너를 나타내는 4개의 정점 또는 2개의 출력 삼각형을 생성하며, 와이드 라인 테셀레이션을 수행하는 동안, 쉐이더는 2개의 라인 정점을 수신하여, 확대된 라인을 나타내는 사변형의 4개 정점을 생성한다. 또한, 기하 쉐이더는 인접 라인 정점들을 이용하여, 라인 엔드 포인트들에 대한 미터링을 수행할 수 있다.
기하 쉐이더는 또한 펄 또는 핀들을 생성하는 데 사용될 수 있으며, 이것은 펄 또는 핀 생성으로 제한되는 것이 아니라, 단일 토폴로지의 제3 방향으로 추가되는 임의의 추가 정점들을 포함한다. 예를 들어, 털, 비늘, 풀 등을 포함하며, 기하 구조를 기술하는 프리미티브들은 기하 쉐이더에 제공되고, 기하 쉐이더는 형상을 보완하기 위해 기하 구조를 임의로 성장시킨다. 따라서, 예를 들어 털과 관련하여, 기하 쉐이더에 입력된 삼각형들에 기초하여, 기하 쉐이더는 각각의 정점에서 털을 나타내는 소수의 정점들을 추가할 수 있다. 이롭게도, 기하 쉐이더에 대한 삼각형들의 스트림은 정점의 이웃들에 대한 정보를 포함하므로, 정점의 이웃들의 기하 구조의 근접성 및 특성들(칼라, 심도 등)이 처리 동안 고려될 수 있다. 기하 쉐이더의 다른 예시적인, 비제한적인 사용은 인접성 정보가 압출(extrusion) 여부를 결정하는 데 사용되는 쉐도우 볼륨 생성을 포함한다. 또한, 애플리케이션은 핀 또는 펄과 같은 소정의 기하 구조를 생성하고, 그 밖으로 쉐도우 볼륨들을 압출하기를 원할 수 있다. 이러한 경우들에서, 기하 쉐이더의 멀티 패스 기능은 데이터 스트림을 출력하고, 이를 스트림 출력을 이용하여 다시 계산하는 능력을 이용하여 이용될 것이다.
이 예시적인, 비제한적인 실시예에서, 기하 쉐이더(384'-1a3)로부터의 출력은 렌더링을 위해 래스터라이저(384'-1c)로 그리고/또는 스트림 출력(SO; 384'-2)을 통해 버퍼로 향한다. 스트림 출력(SO; 384'-2)을 "턴온"하는 것은 그래픽 파이프라인(384'-1)의 래스터화 기능들을 중지시키지 않으며, 단지 개발자에게 보다 큰 프로그램 능력을 제공함으로써 그래픽 파이프라인(384'-1)의 능력을 향상시킨다.
스트림 출력
스트림 출력(SO; 384'-2)은 데이터가 계속 래스터라이저(384'-1c)로 흐를 때에도 턴온 및 턴오프될 수 있는 그래픽 파이프라인(384'-1) 내의 "탭"과 같이 기능한다. 스트림 출력(SO; 384'-2)은 데이터가 래스터화를 위해 프레임 버퍼에 도달하기 전에 그래픽 파이프라인(384'-1) 내의 어느 곳으로나 탭핑될 수 있다.
스트림 출력(SO; 384'-2)이 오프될 때, 스트림 출력(SO; 384'-2)은 파이프라인에 영향을 미치지 않는다. 즉, 스트림 출력(SO)은 옵션이며, 애플리케이션은 단지 파이프라인이 데이터를 스트림 출력 버퍼로 판독하지 않고 데이터를 전송하는 것을 허가할 수 있다. 또한, 스트림 출력 버퍼는 스트림 데이터를 저장하는 데 사용될 수 있는 메모리의 유형의 일례이다. 마이크로프로세서 내의 캐시와 같이 상이한 메모리 유형들이 이러한 기능에 사용될 수 있는 시간들이 존재할 수 있다.
턴온시, 스트림 출력(SO; 384'-2)은 데이터가 파이프라인 내에 있는 동안 프로그래머들이 파이프라인 내로 "탭핑"하여 그 데이터를 다른 위치에 제공하는 것을 가능하게 한다.
예를 들어, 스트림 출력(SO; 384'-2)은 파이프라인 내의 어느 다른 곳에서의 재사용을 위해 프리미티브들을 하나 이상의 출력 버퍼로 스트리밍하여, 파이프라인 내에서의 회귀 프로그램 알고리즘들의 적용을 가능하게 할 수 있다. 스트림 출력(SO; 384'-2)을 통해 전송되는 데이터는 버퍼(들)에 연결될 수 있다. 이어서, 버퍼(들) 내의 데이터는 후속 패스들에서 그래픽 파이프라인(384'-1) 입력들로 재순환될 수 있다. 예를 들어, 스트림 출력(SO; 384'-2)에서 수신된 데이터는 호스트 또는 다른 동작에 의한 검색을 위해 버퍼 또는 메모리에 기입될 수 있다.
대안으로, 스트림 출력(SO; 384'-2)에서 수신된 데이터는 회귀 또는 루핑 기능을 수행하기 위해 입력 어셈블러(IA), 정점 쉐이더들((384'-1a1, 384'-1a2), 기하 쉐이더(384'-1a3) 또는 픽셀 쉐이더(384'-1a4)와 같은 파이프라인 내의 다른 엔티티로 재순환(예를 들어, 피드백 또는 피드 포워드)될 수 있다. 스트림 출력(SO; 384'-2)은 데이터가 그래픽 파이프라인(384'-1)의 다른 부분들로 프로그램에 의해 재순환되게 할 수 있다(예를 들어, 프로그래머는 데이터에 대해 회귀 동작들을 수행하거나(데이터를 동일 알고리즘들을 통해 회귀적으로 재순환시킴), 데이터를 통해 미리 정해진 횟수만큼 루핑하는 프로그램을 GPU로 다운로드할 수 있다). 예를 들어, 스트림 출력(SO; 384'-2)은 데이터를 쉐이더 자체로 재순환시켜 소정 데이터에 대해 멀티 패스 동작들이 수행되는 것을 가능하게 하는 데 사용될 수 있다. 이것은 그래픽 데이터에 대한 프로그램 회귀 및 루핑 알고리즘들을 인에이블할 수 있다. 데이터를 재순환시키는 또 하나의 방법은 데이터를 파이프라인을 통해 다시 전송하여 데이터를 입력 어셈블러(IA)에 다시 입력하는 것이다.
또한, 필요한 경우, 정보가 외부로 스트리밍되는 동안, 동일 데이터가 래스터라이저로 갈 수 있으며, 따라서 데이터의 렌더링이 느려지지 않거나, 이미지가 데이터에 대해 동작하는 회귀 알고리즘 요소들에 기초하여 변환될 때 이미지의 디스플레이가 가능해진다.
래스터라이저
그래픽 파이프라인(384'-1)의 다음 컴포넌트는 래스터라이저(384'-1c)이다. 래스터라이저(384'-1c)는 반드시 그래픽 파이프라인(384'-1) 내의 스테이지인 것은 아니며, 오히려 다양한 파이프라인(384'-1) 스테이지들 사이의 인터페이스이다. 래스터라이저(384'-1c)는 입력 위치들이 클립 공간 내에 제공되는 것으로 가정하며, 클립핑, 원근 분할, 뷰포트 또는 가위 선택, 프리미티브 셋업 및 픽셀 쉐이더(384'-1a4) 호출 방법의 결정을 포함할 수 있는 중요한 일정한 기능 동작들의 세트를 수행한다. 이러한 기능들 중 대부분은 소프트웨어 개발자들에 의해 조정될 수 있다.
픽셀 쉐이더 스테이지
제4 공통 코어(384'-1a4)가 래스터라이저에 이어지며, 이는 하나의 픽셀을 취하여 하나의 위치에 그 픽셀을 출력하는 픽셀 쉐이더로서 기능한다. 픽셀 쉐이더는 예를 들어 이미지 텍스처들(또는 텍스처 데이터)을 입력들로서 포함할 수 있는 쇼트 프로그램에 의해 각각의 픽셀이 처리되는 것을 가능하게 할 수 있다. 픽셀 쉐이더는 개발자들이 픽셀 레벨에서 조명, 칼라 및 표면을 변경함으로써 칼라들, 텍스처들 또는 심지어 형상들을 조작하는 것을 가능하게 할 수 있다. 픽셀 쉐이더들은 각 픽셀의 조명, 칼라 및 표면을 변경하는 데 사용될 수 있다. 이것은 또한 이러한 픽셀들로부터 형성되는 3D 개체들의 전체 칼라, 텍스처 및 형상에 영향을 미친다.
픽셀 쉐이더(384'-1a4)에 이용 가능한 입력 데이터는 원근 보정을 하거나 하지 않고 보간되거나 상수 퍼-프리미티브(per-primitive)로서 처리되도록 요소 단위로 선택될 수 있는 정점 속성들을 포함한다. 픽셀 쉐이더(384'-1a4)에 의해 생성되는 출력들은 현재 픽셀 위치에 대한 출력 데이터의 하나 이상의 4-벡터이거나, (픽셀이 폐기되는 경우) 무 칼라(no color)일 수 있다. 픽셀 쉐이더들이 가능하게 하는 효과들의 부분 리스트는 퍼-픽셀 반사, 퐁 스타일(Phong-style) 쉐이딩 또는 DOT3 효과들을 이용한 퍼-픽셀 조명 및 절차 텍스처를 포함한다.
출력 병합기
논리적 그래픽 파이프라인(384'-1)의 최종 단계인 출력 병합기(OM)에서, 다른 픽셀 처리 기능들이 최종 픽셀들을 렌더링하기 위해 수행될 수 있다. 이러한 기능들은 예를 들어 출력 자원들(렌더링 타겟들)의 결합, 가위 테스트를 이용한 픽셀 칼라 값들의 수정, 가시도 결정, 스루 뎁스 바이어스(through depth bias) 및/또는 스텐실 버퍼 기술들, 또는 알파 혼합 또는 포그, 쉐도우잉, 범프 맵핑, 환경 맵핑, 안티앨리어싱, 많은 자원 유형들 중 하나일 수 있는 렌더링 타겟(들)에 대한 출력(들)의 기입 또는 혼합 및 다중 요소 텍스처와 같은 기능들의 적용을 포함할 수 있다. 데이터에 대해 이러한 기능들을 수행한 후, 데이터는 궁극적으로 더 처리되고, 최종적으로 모니터(191)에 표시된다.
파이프라인 내의 쉐이더들의 공통 쉐이더 코어
도 4는 공통 쉐이더 코어(384'-1a)의 하드웨어 및 소프트웨어 컴포넌트들의 예시적인, 비제한적인 실시예를 나타내는 블록도이다. 공통 쉐이더 코어(384'-1a)는 예를 들어 도 3에 도시된 정점 쉐이더들(384'-1a1, 384'-1a2), 기하 쉐이더(384'-1a3) 또는 픽셀 쉐이더(384'-1a4)를 구현하는 데 사용될 수 있다.
공통 쉐이더 코어(384'-1a)는 그래픽 파이프라인(384'-1) 내의 임의 곳으로부터 일 수 있는 이전 스테이지인 입력 어셈블러(IA) 유닛으로부터, 또는 소정의 경우에는 특수화된 입력 소스로부터 입력 데이터를 수신한다.
이어서, 입력 데이터는 입력 레지스터(들)(409)에 임시 저장될 수 있다. 입력 레지스터(들)(409)는 예를 들어 동적으로 인덱스 가능한 어레이일 수 있다. 기하 쉐이더의 경우, 입력 레지스터(들)는 입력들을 예를 들어 [정점][요소] 쌍들로서 배열하는 2차원(2D) 어레이일 수 있다.
이어서, 입력 데이터는 쉐이더 코드(410)로 전송된다. 쉐이더 코드(410)는 흐름 제어 메커니즘들, 벡터 부동 소수점 및 정수 연산, 메모리 인출 또는 샘플 동작들을 처리하는 산술 논리 유닛(ALU), 및 입력 데이터에 대해 수행될 특정 변환들을 지정하는 쉐이더 기능 또는 프로그램을 제공한다. 쉐이더 코드(410)는 또한 샘플러들(413), 텍스처들(414) 및 상수 버퍼들(415)로부터의 정보와 같은 다수의 다른 입력들 또는 자원들을 수신할 수 있다. 쉐이더 코드(410)는 또한 임시 레지스터(411) 및 서브루틴 반환 어드레스 스택(412)과 양방향 통신을 갖는다.
쉐이더 코드(410)는 텍스처들을 어떻게 샘플링할지를 정의하는 샘플러들(413)로부터의 샘플들을 수신한다. 그러나, 메모리는 필터링 없이도 판독될 수 있고, 샘플러는 모든 실시예에서 필요한 것은 아니다. 샘플러 개체들은 정적으로 생성되므로, 샘플러는 하드웨어가 변경들을 추적하거나 파이프라인을 플러싱할 필요없이 파이프라인의 비상시에 다수의 샘플러에 대한 참조들을 유지할 수 있게 한다(이는 샘플러 개체들이 그들의 정의들을 유지하고 변경되지 않기 때문이다).
쉐이더 코드(410)는 텍스처들(414)로부터 텍스처 정보를 수신한다. 텍스처들(414)은 쉐이더 코드와 함께 텍스처 샘플링을 제공하도록 동작한다.
CPU는 특정 쉐이더 프로그램을 재구성하는 데 사용될 수 있는 쉐이더 상수들을 생성한다. 쉐이더 코드(410)는 상수 버퍼들(415)로부터 쉐이더 상수들을 수신한다. 상수 버퍼들(415)은 GPU 상의 메모리에 소정의 변수들(또는 "쉐이더 상수들")을 수집하거나 그룹화하기 위해 제공된다. 즉, 상수 입력 값들을 저장하기 위해 상수 레지스터들(c0...cN)의 어레이를 사용하는 대신에, 상수 버퍼들(415)을 사용하여 수치 쉐이더 상수 값들을 함께 그룹화할 수 있다. 상수 버퍼들은 텍스처들(414)보다 낮은 레이턴시 액세스 및 보다 빈번한 갱신들을 위해 최적화된다. 상수 버퍼들(415)은 개발자가 특정 그룹의 상수들 모두를 동시에 설정하는 것을 허가할 수 있다. 상수들은 개발자가 원하는 임의의 특정 순서로 배열될 수 있다. 상수 버퍼 내에 쉐이더 상수들을 함께 그룹화하는 것은 소정의 성능 이익들을 가져올 수 있다. 예를 들어, 통상적으로 2개의 쉐이더 상수가 동시에 함께 수정되고 사용되는 경우(예를 들어, 각각의 시나리오에서 동일 상태를 가짐), 이러한 쉐이더 상수들은 특정 상수 버퍼 내에 넣어질 수 있다.
특정 쉐이더 프로그램은 특정 슬롯들에 결합되는 소정 수의 상수 버퍼들을 필요로 할 수 있다. 일 구현에서는, 그래픽 파이프라인 내의 각각의 스테이지에 대해, 활성일 수 있는 상수 버퍼들에 대한 15개의 슬롯이 존재한다. 쉐이더 코드에서, cb# 레지스터는 "슬롯" #에서 상수 버퍼에 대한 플레이스홀더이다. 상수 버퍼는 cb#[인덱스]를 쉐이더 명령어에 대한 피연산자로서 사용하여 쉐이더에서 액세스되는데, '인덱스'는 인덱스 불가능(r#)하거나 또는 정적으로 인덱스(x#)될 수 있으며, 32비트 무부호 정수, 직접 32비트 무부호 정수 상수, 또는 함께 더해진 이 둘의 조합을 포함할 수 있다(예를 들어, "mov r0, cb3[x3[0].x+6]"은 x3[0].x가 1을 포함하는 것으로 가정하여 슬롯 3에 할당된 상수 버퍼에서 rO로 요소 7을 이동하는 것을 나타낸다). 애플리케이션들은 상이한 하드웨어가 가능한 최상의 성능을 쉽게 달성하는 것을 계속 가능하게 하면서, 원하는 어떠한 패턴 및 양으로도 상수들을 판독하는 쉐이더 코드를 작성할 수 있다.
임시 레지스터들(411)은 임시 저장 장치로서 기능한다. 예시적인, 비제한적인 구현에서, 임시 레지스터들(411)은 임시 저장 장치의 한도까지 요구되는 임의 크기 및 양의 임의의 인덱스 불가능 또는 인덱스 가능 어레이들을 유지할 수 있다.
이 비제한적인 특정 실시예에서, 서브루틴 반환 어드레스 스택(412)은 일정한 높이를 갖는다. 또한, 스택은 직접 쉐이더 액세스로부터 숨겨지며, 반환 어드레스들만을 투명하게 저장한다. 이것은 또한 회귀 알고리즘들의 정의를 허가한다.
데이터가 쉐이더 코드(410)를 통과한 후, 데이터는 출력 레지스터들(420)로 향한다. 이 예시적인, 비제한적인 구현에서, 출력 레지스터들(420)은 4개 벡터 출력의 동적 인덱스 가능 어레이로 구성된다. 또한, 소정의 스테이지들은 추가적인 특수 출력들을 가질 수 있다.
그래픽 파이프라인(384'-1) 내의 어느 스테이지에서 공통 쉐이더 코어(384'-1)가 구현되고 있는지에 따라, 출력 데이터는 존재할 경우 다음 쉐이더 스테이지로, 메모리 또는 다른 위치에 대한 스트림 출력(SO)으로서, 또는 출력 병합기(OM) 또는 렌더링 스테이지로 출력될 수 있다.
리스트된 데이터 구조들은 1D 어레이에서 2D 어레이 또는 리스트로 변경될 수 있다. 모든 데이터 구조들은 GPU의 크기 및 저장 능력에 따라 변할 수 있다. GPU 내에서, 저장 한계들 및 일정 높이들에 대한 변경들은 동적 할당 및 공간을 보존하기 위한 정보에 대한 압축 알고리즘들의 적용으로 인해 발생할 수 있다. 샘플러들 및 상수 버퍼들은 텍스처들과 같이 거동할 수 있지만, 자원 변경에 따라 이러한 컴포넌트들의 정의들은 변경될 수 있다. 텍스처들이 재정의되는 경우, 샘플러들 및 상수 버퍼들 양자는 변경될 수 있으며, 텍스처 기능들만으로 제한되지 않는다. 또한, 모든 데이터 구조는 속도 및 실익의 목적으로 새로운 최적화 알고리즘들을 구현할 수 있다. 여기에 설명되는 다양한 실시예는 정점 쉐이더, 픽셀 쉐이더 및 기하 쉐이더의 기능을 제공하도록 동적으로 구성될 수 있는 공통 코어들을 사용하는 그래픽 파이프라인의 예들일 뿐이다.
전술한 바와 같이, 상태의 상이한 조합들이 다양한 비주얼 효과를 가능하게 할 수 있다. 파이프라인 내의 상태 관리 시스템은 장치 상태를 추적하고, 장치 상태를 복잡한 상호 종속성을 갖는 다수의 요소로 구성되는 하이 레벨 "효과들"로 추상화한다. 효과들은 일련의 "기법들"로서 정의되고, 기법들은 "패스들"에 의존하고, 패스들은 상태 개체들 또는 쉐이더들에 의존하며, 상태 개체들 또는 쉐이더들은 상수 버퍼들 및 텍스처들에 의존한다. 효과들은 입력으로서 특정 텍스처들을 갖고 파이프라인 내의 특정 입력 슬롯들(결합 포인트들로도 지칭됨)에 결합되는 특정 상수 세트들에 대해 쉐이더 프로그램들이 실행될 것을 요구한다. 상태 관리 시스템은 "종속성 트리"를 이용하여, 다양한 유형의 상이한 쉐이더 자원들 사이의 관계 또는 종속성의 추적을 유지할 수 있다. 각각의 특정 자원(예를 들어, 상수 버퍼, 텍스처, 샘플러)은 종속성 트리 내의 부모 개체의 슬롯에 결합된다. 이와 관련하여, "슬롯"은 특정 쉐이더에 대한 종속성 트리 내의 슬롯을 지칭한다. 각각의 쉐이더는 상이한 종속성들 및 따라서 독립적인 슬롯들을 갖는 개별 트리들을 가질 것이다.
도 5A는 하나의 효과 파일(530)에 대응하는 종속성 트리의 예시적인, 비제한적인 블록도를 나타낸다. 도 5A는 효과(530)의 개념 및 효과(530)의 패스(520), 상태 개체(506), 쉐이더(510), 텍스처(514) 및 상수 버퍼(515)에 대한 종속성을 나타낸다. 상수 버퍼(515)는 다수의 쉐이더 상수(502, 504)를 수신한다. 월드 뷰 투영 매트릭스(502)는 세상 공간에서 스크린 공간으로 변환하는 데 사용되는 매트릭스 내의 4개 상수를 정의하는 쉐이더 상수이다. 이것은 개체당 한 번 행해진다. 따라서, 스크린 내에 50개의 개체가 존재하는 경우, 이 매트릭스는 장면당 50번 설정될 것이다. V 조명(504)은 조명이 들어오고 있는 방향을 상술하는 조명 벡터이다. 예를 들어, V 조명(504)은 태양의 방향을 상술하는 데 사용될 수 있으며, 전체 프레임에 대해 상수일 것이다. 쉐이더(510)는 그와 관련된 다수의 자원을 갖는다. 이 특정 예에서, 자원들은 상수 버퍼(515) 및 텍스처 0(514)을 포함할 수 있다. 이러한 자원들은 쉐이더(510)"에 의해" 소비된다. 도 5A에는 도시되지 않았지만, 쉐이더 A(51O)에 더하여, 병렬로 실행되는 다수의 다른 쉐이더 프로그램(예를 들어, 쉐이더 B, 쉐이더 c, 쉐이더 D 등)이 존재할 것이다. 이러한 쉐이더 프로그램들 각각은 유사한 종속성 세트를 가질 것이다. 패스(520)는 이러한 상이한 쉐이더들 및 상태 A(506)의 출력을 포함한다. 효과 파일(530)은 패스(520)를 포함한다.
도 4를 다시 참조하면, 공통 쉐이더 코어(384'-1a)는 또한 다수의 입력 슬롯(도시되지 않음)을 갖는다. 쉐이더(384'-1a)에 의해 사용되는 자원들(개별 상수들, 상수 버퍼들, 텍스처들 및 샘플러들 등)은 쉐이더(384'-1a)의 특정 입력 슬롯들에 결합될 수 있다. 하나의 특정 구현에서, 쉐이더는 예를 들어 그와 연관된 128개의 입력 자원 슬롯, 그와 연관된 16개의 상이한 상수 버퍼 슬롯 및 그와 연관된 16개의 샘플러 슬롯을 가질 수 있다. 예를 들어, 특정 쉐이더는 16개의 상이한 상수 버퍼, 16개의 상이한 텍스처 및 16개의 상이한 샘플러로 슬롯들을 채울 수 있다. 특정 자원들이 각각의 쉐이더의 특정 슬롯들에 할당되거나 결합되는 순서는 특정 패턴을 따를 필요는 없으며, 컴파일러에 의해 결정될 수 있다. 쉐이더 프로그램은 이러한 특정 자원들 각각과 다른 무언가를 할 것이다. 예를 들어, 쉐이더 프로그램은 입력 상수 버퍼 2, 다른 입력 샘플러 O 및 다른 입력 텍스처 5 등을 수신한 후, 이러한 입력들에 따라 특정 출력을 생성할 수 있다.
도 5B는 예시적인, 비제한적인 그래픽 파이프라인에서 다수의 상이한 쉐이더 프로그램(584'-1a A-N)에 대한 다수의 상수 버퍼(515A-515E)의 할당을 나타내는 예시적인, 비제한적인 블록도이다. 쉐이더 프로그램들(584'-1a A-N) 각각은 상이한 입력 슬롯들에 상이한 순서들로 할당된 다수의 상수 버퍼(CB1 515A...CB5 515E)를 갖는다. 예를 들어, 쉐이더(584'-1a A)는 슬롯 1에 CB1을, 슬롯 2에 CB2를, 슬롯 3에 CB3을, 슬롯 4에 CB4를, 슬롯 5에 CB5를 배치하고, 쉐이더(584'-1a B)는 슬롯 1에 CB2를, 슬롯 2에 CB1을, 슬롯 3에 CB4를, 슬롯 4에 CB5를, 슬롯 5에 CB3을 배치하고, 쉐이더(584'-1a C)는 슬롯 1에 CB5를, 슬롯 2에 CB2를, 슬롯 3에 CB1을, 슬롯 4에 CB3을, 슬롯 5에 CB4를 배치하고, 쉐이더(584'-1a N)는 슬롯 1에 CB3을, 슬롯 2에 CB2를, 슬롯 3에 CB5를, 슬롯 4에 CB4를, 슬롯 5에 CB1을 배치할 수 있다.
설명의 간략화를 위해, 도 5B에 제공되는 예는 4개의 쉐이더 프로그램(584'-1a A-N), 및 특정 쉐이더들(584'-1a A-N) 각각과 연관된 5개의 가능한 상수 버퍼(CB1 515A...CB5 515E)를 나타낸다. 그러나, 파이프라인의 대부분의 실제 구현들에서는 파이프라인 내에 더 많은 쉐이더가 존재할 수 있으며, 특정 쉐이더들(584'-1a A-N) 각각은 통상적으로 도 5에 도시된 것보다 많은 수(예를 들어, 16개 이상)의 상수 버퍼들을 갖는다는 것을 알 것이다. 예를 들어, 특정 애플리케이션의 복잡성에 따라, 수백 개의 상이한 쉐이더가 존재할 수 있으며, 애플리케이션 개발자들은 사실상 제한되지 않는 수의 상수 버퍼들을 지정할 수 있다. 하나의 실제 구현에서, 최대 16개의 이러한 상수 버퍼가 임의의 주어진 시간에 각각의 쉐이더의 상이한 슬롯들에 결합될 수 있다. 중요한 것은, 특정 상수 버퍼들이 각각의 쉐이더(584'-1a)에서 특정 슬롯들에 할당 또는 결합되는 순서는 특정 패턴을 따른 필요가 없고, 컴파일러에 의해 결정될 수 있다는 것이다.
2개의 쉐이더 프로그램이 서로 독립적으로 컴파일될 때, 자원들이 특정 슬롯들에 결합되는 순서는 상이할 수 있다. 예를 들어, 쉐이더(584'-1a A)가 실행될 때, 상수 버퍼들(CB1-CB5)은 쉐이더(584'-1a A)를 렌더링하기 위해 슬롯들(1-5)로 설정된다. 그러나, 쉐이더(584'-1a B)가 실행될 시간일 때, 동일 상수 버퍼들(CB1-CB5)이 쉐이더(584'-1a B)를 실행하기 위해 상이한 슬롯들에 결합 또는 재할당될 수 있다. 예를 들어, 쉐이더(584'-1a A)가 실행될 때, CB1은 슬롯 1에 결합되고, CB2는 슬롯 2에 결합되고, CB3은 슬롯 3에 결합되고, CB4는 슬롯 4에 결합되며, CB5는 슬롯 5에 결합되지만, 다음 쉐이더(584'-1a B)가 실행될 때, 동일한 5개의 상수 버퍼는 또다시 그러나 이번에는 다른 슬롯들에서 사용될 수 있다(예를 들어, 슬롯 1에서 CB2, 슬롯 2에서 CB1, 슬롯 3에서 CB4, 슬롯 4에서 CB5 그리고 슬롯 5에서 CB3). 이러한 경우에, 상수 버퍼들은 실행 쉐이더(584'-1a A)와 쉐이더(584'-1a B) 사이의 전이 동안 하나의 슬롯에서 결합 해제되어 새로운 슬롯에 재결합되어야 한다. 따라서, 동일한 5개의 상수 버퍼가 상이한 순서로 재결합되는 것이 필요하다. 결합들이 재조정되는 것이 필요할 때마다 성능 손실이 있을 수 있는데, 이는 비디오 카드 등을 셋업하기 위해 드라이버에 대한 호출이 행해져야 하기 때문이다. 이러한 쉐이더들 사이의 "불일치"를 완화할 자동 메커니즘이 존재하지 않으며, 따라서 쉐이더들 간에 전이들이 발생할 때 파이프라인의 불필요한 재구성이 행해져야 하며, 결합 사이클들이 소모된다.
쉐이더들 간의 스위칭시, 그래픽 카드에서 필요한 재구성의 양을 감소 및/또는 최소화(예를 들어, 통상적으로 재결합 슬롯들에서 발생하는 상태 변화들을 감소 및/또는 최소화)하는 것이 바람직할 것이다. 예를 들어, 특정 자원들을 상이한 슬롯들로 재할당해야 할 필요성을 없애거나 줄이는 방법을 제공하는 것이 바람직할 것이다. 자원들을 동일 슬롯들 내에 일관되게 배치함으로써, 보다 적은 결합 사이클들이 소모되며, 그리고/또는 결합 사이클들이 절약된다.
최적화된 슬롯/자원 결합 기법들
쉐이더들 간의 스위칭시, 그래픽 카드에서 필요한 결합 재구성의 양을 감소 및/또는 최소화(예를 들어, 통상적으로 재결합 슬롯들에서 발생하는 상태 변화들을 감소 및/또는 최소화)하기 위하여 자원들(예를 들어, 상수 버퍼들, 텍스처들 및 샘플러들)을 소정의 슬롯들에 최적으로 결합하기 위한 기법들이 제공된다. 이러한 기법들에 따르면, 각각의 쉐이더 프로그램 사이의 공통 종속성들이 결정될 수 있으며, 특정 자원들이 이러한 결정에 기초하여 특정 슬롯들에 결합될 수 있다. 종속성 트리가 상이한 쉐이더 자원들 간의 관계들 또는 종속성들의 추적을 유지한다. 각각의 특정 자원은 종속성 트리 내의 부모 개체의 슬롯에 결합된다. 이러한 개시되는 기법들은 종속성들을 스캐닝하고, 종속성 트리를 재구성하여, 쉐이더들이 자원들의 결합 위치에 대한 그들의 예상을 변경할 수 있도록 하는 것을 포함한다. 결과적으로, 현재 로딩된 쉐이더들 간의 전이를 위해 재결합이 필요한 슬롯들의 수가 감소 및/또는 최소화될 수 있다.
본 기법들의 일 실시예에 따르면, 종속성 트리 내의 종속성들 각각이 스캐닝되고, 종속성 트리의 각각의 상이한 재구성(쉐이더들의 리맵핑 또는 리빌딩)에 대해 관련 비용이 계산될 수 있다. 종속성 트리의 각각의 재구성은 소정의 자원들이 결합되는 특정 슬롯들을 변경한다. 이어서, 이러한 비용들을 이용하여, 보다 높은 레벨의 상태들 사이의 전이를 위한 장치 재구성의 양을 줄이거나 최소화하는 종속성 트리의 특정 재구성이 선택될 수 있다. 즉, 현재 로딩된 쉐이더들 간의 전이/스위칭을 위해 재결합이 필요한 슬롯들의 수를 최소화하는 종속성 트리의 특정 재구성이 선택될 수 있다. 일 구현에서, 이러한 기법들은 오프라인 콘텐츠 생성 및 저장을 위해 수행될 수 있다(예를 들어, 쉐이더 세트가 의외로 빨리 알려지는 경우, 쉐이더들이 분석되고, 종속성들이 리맵핑된 후, 쉐이더들이 디스크에 다시 저장된다). 대안 구현에서, 이 방법은 애플리케이션 실행 시간/로드 시간에 동적으로 수행된다(예를 들어, 쉐이더 세트가 재빨리 알려지지 않는 경우).
따라서, 특정 쉐이더 프로그램들은 소정의 자원들을 동일 순서로 예상하도록 변경된다. 이것은 예를 들어 상수 버퍼들이 특정 슬롯들과 연관되는 방법의 최적화를 가능하게 한다. 이것은 상이한 쉐이더들 간의 스위칭시에 발생하는 재구성의 양을 줄임으로써 수행이 필요한 작업의 양을 줄인다.
도 6은 그래픽 파이프라인 내의 쉐이더들과 연관된 특정 슬롯들에 자원들을 최적으로 결합시키기 위한 예시적인, 비제한적인 흐름도(600)를 나타낸다. 특정 애플리케이션의 실행 동안, 쉐이더는 소정 수의 자원들(예를 들어, 상수 버퍼들, 텍스처들 및 샘플러들 등)이 쉐이더의 특정 슬롯들에 결합되는 것을 필요로 할 수 있다.
단계 610에서, 각각의 쉐이더에 의해 사용되고 있는 자원들 간의 자원 종속성들이 결정될 수 있다. 일 실시예에서, 단계 610은 2개의 하위 단계(615, 620)를 포함할 수 있다. 하위 단계 615에서, 각각의 쉐이더에 대한 특정 자원/슬롯 배열이 결정될 수 있다. 각각의 쉐이더에 대한 특정 자원/슬롯 배열은 각 쉐이더의 특정 슬롯들 각각에서 어느 자원들이 사용될지를 지정한다. 하위 단계 620에서, 특정 자원/슬롯 배열에 기초하여, 각 쉐이더에 의해 사용되고 있는 자원들 간의 자원 종속성들(예를 들어, 상이/공통)이 결정될 수 있다.
단계 630에서, 자원 종속성들에 기초하여, 공통 자원/슬롯 연관성들이 계산될 수 있다. 각각의 공통 자원/슬롯 연관성은 슬롯들 중 특정 슬롯과 연관될 자원들 중 특정 자원을 식별하며, 따라서 쉐이더들 간의 스위칭시, 자원들의 전이들/상태 변경들의 수/재구성의 양이 감소/최소화된다. 이어서, 단계 640에서, 쉐이더들의 각각에서, 각각의 슬롯에 결합된 자원들이 공통 자원/슬롯 연관성들에 따라 재구성될 수 있다. 이 시점에서, 각각의 쉐이더는 동일한 공통 자원/슬롯 연관성들을 가지며, 따라서 각각의 쉐이더에서 동일 특정 자원이 슬롯들 중 동일한 특정 슬롯에 연관된다. 단계 650에서, 특정 자원들 각각은 공통 자원/슬롯 연관성들에 의해 지정되는 대로 특정 슬롯에 결합될 수 있다.
도 7은 공통 자원/슬롯 연관성들을 계산하기 위한 예시적인, 비제한적인 흐름도(630)를 나타낸다. 단계 710에서, 제1 슬롯에 결합될 자원들 중 특정 자원이 결정될 수 있다. 제1 슬롯에 결합될 자원을 결정한 후, 단계 720에서 제1 슬롯에 결합되는 이 자원은 이용 가능 자원들의 풀 또는 리스트로부터 제거될 수 있다. 단계 730에서, 프로세스는 각각의 쉐이더에 대해 결합될 슬롯들이 채워졌는지를 판정할 수 있다. 결합될 슬롯들(예를 들어, 자원이 아직 결합되지 않은 슬롯들)이 남은 경우, 단계 740에서 남은 자원들 중 하나가 제2 슬롯에 결합될 자원으로 결정될 수 있다. 단계들 720-740은 결합될 소정 수의 슬롯들, 대부분의 슬롯들 또는 모든 슬롯이 그와 연관된 특정 자원을 가질 때까지 반복된다. 일 실시예에서, 알고리즘은 특정 비용 메트릭이 만족될 때까지 적용될 수 있다. 예를 들어, 비용 메트릭은 예를 들어 쉐이더들 간의 60% 미만의 자원 변경들 또는 차이들이 존재할 때 알고리즘이 중지되는 것일 수 있다. 결합될 모든 슬롯이 자원/슬롯 결합을 갖는 경우, 도 6의 단계 640에서 프로세스가 계속된다.
도 8은 특정 자원/슬롯 결합들을 결정하기 위한 예시적인, 비제한적인 흐름도(710/740)를 나타낸다. 제1 슬롯에 결합될 제1 자원을 결정하기 위해, 단계 810에서, 각각의 쉐이더에 의해 사용되고 있는 자원들 간의 자원 종속성들에 기초하여, 종속성 트리 내의 각각의 자원을 제1 슬롯에 결합하기 위한 비용이 계산될 수 있다. 단계 820에서, 최저 비용을 갖는 자원들 중 특정 자원이 제1 슬롯에 대한 결합을 위해 선택될 수 있으며, 단계 830에서 (최저 비용을 갖는 것으로 선택된) 이 자원은 제1 자원으로서 지정될 수 있다. 단계들 810 내지 830은 도 7의 단계 740 내에 내포되므로, 단계들 810-830은 결합될 슬롯들 각각이 특정 자원/슬롯 결합을 가질 때까지 반복될 것이라는 것을 알 것이다.
도 9는 각각의 자원을 제1 슬롯에 결합하기 위한 비용을 계산하는 예시적인, 비제한적인 흐름도(810)를 나타낸다. 단계 910에서, 자원들 중 특정 자원이 제1 슬롯에 결합되는 경우, 각각의 쉐이더를 렌더링하는 데 필요한 상태 변경들의 수가 결정될 수 있다. 이러한 결정은 각각의 쉐이더 프로그램에 의해 사용되는 자원들 사이의 자원 종속성들을 이용하여 행해질 수 있다. 단계 920에서, 자원들 중 특정 자원이 제1 슬롯에 결합되는 경우에 각각의 쉐이더를 렌더링하는 데 필요한 소모 슬롯들의 수가 결정될 수 있다. 전술한 바와 같이, 이러한 결정은 각각의 쉐이더 프로그램에 의해 사용되는 자원들 간의 자원 종속성들을 이용하여 행해질 수 있다. 상태 변경들의 수 및 소모 슬롯들의 수를 이용하여, 단계 930에서 제1 비용이 계산될 수 있다. 이 제1 비용은 자원들 중 특정 자원을 제1 슬롯에 결합하는 것과 연관되는 비용이다.
이러한 계산은 각각의 자원(예를 들어, 자원들 각각을 제1 슬롯에 결합하는 것과 연관되는 비용)에 대해 반복될 수 있다. 단계 940에서, 자원들 각각을 제1 슬롯에 결합하기 위한 비용이 계산되었는지를 판정할 수 있다. 그렇지 않은 경우, 프로세스는 단계 950으로 진행하여, 자원 리스트 또는 종속성 트리 내의 자원들 중 다음 특정 자원이 선택된다. 이어서, 다음 자원(예를 들어, 다음 자원을 제1 슬롯에 결합하는 것과 연관되는 비용)에 대해 단계 910-930이 반복될 수 있다. 프로세스 810은 단계 940에서 자원들 각각을 제1 슬롯에 결합하기 위한 비용이 계산된 것으로 판정될 때까지 반복된다. 이 시점에서, 프로세스는 종료되거나 단계 820으로 복귀한다. 단계들 910 내지 950은 도 8의 단계 810에 내포되므로, 단계들 910-950은 결합될 슬롯들 각각에 각각의 자원을 결합하기 위한 비용이 결정되었을 때까지 반복될 것이라는 것을 알 것이다.
따라서, 도 5B에 도시된 예에서, 전술한 기법들은 쉐이더(584'-1a B)에서 사용된 상수 버퍼들의 레이아웃을 리맵핑하는 데 사용될 수 있다. 예를 들어, 모든 종속성이 스캐닝되며, 최적의 상수 버퍼 레이아웃이 쉐이더(584'-1a A)에 나타난 것인 것으로 판정되는 경우, 쉐이더(584'-1a B)에서 CB2 및 CB3은 슬롯들 2 및 3에 재결합하도록 리맵핑되고, CB1은 슬롯 1에 리맵핑되며, CB4 및 CB5는 슬롯들 4 및 5에 각각 리맵핑될 것이다. 이와 같이, 쉐이더들(584'-1a A, 584'-1a B) 간의 스위칭은 쉐이더(584'-1a A)에 나타난 슬롯들에 대한 모든 CB의 초기 결합을 넘는 어떠한 추가적인 작업도 필요로 하지 않는다. 쉐이더(584'-1a C) 및 쉐이더(584'-1a N)에서도 유사한 리맵핑이 발생할 수 있다. 따라서, 현재 로딩된 쉐이더들 간의 스위칭을 위해 결합이 필요한 슬롯들의 수가 최소화될 수 있다.
본 발명을 구현하는 다양한 방법, 예를 들어 애플리케이션들 및 서비스들이 개량된 그래픽 파이프라인 발명의 시스템들 및 방법들을 사용할 수 있게 하는 적절한 API, 툴 키트, 드라이버 코드, 운영 체제, 제어, 독립식 또는 다운로드 가능 소프트웨어 개체 등이 존재한다. 본 발명은 API(또는 다른 소프트웨어 개체)의 관점에서는 물론, 본 발명에 따른 공통 코어, 기하 쉐이더 또는 스트림 출력의 기술들을 포함하는 전술한 기술들 중 임의 기술을 수용하는 소프트웨어 또는 하드웨어 개체로부터 본 발명의 이용을 고려한다. 따라서, 여기에 설명되는 본 발명의 다양한 구현들은 전체적으로 하드웨어, 부분적으로 하드웨어 그리고 부분적으로 소프트웨어는 물론, 소프트웨어일 수 있는 양태들을 가질 수 있다.
전술한 바와 같이, 본 발명의 예시적인 실시예들은 다양한 컴퓨팅 장치들 및 네트워크 아키텍처들과 관련하여 설명되었지만, 그 기본 개념들은 개량된 그래픽 파이프라인을 갖는 GPU를 이용하는 것이 바람직한 임의의 컴퓨팅 장치 또는 시스템에 적용될 수 있다. 예를 들어, 본 발명의 알고리즘(들) 및 하드웨어 구현들은 컴퓨팅 장치의 운영체제에 적용될 수 있고, 장치 상의 개별 개체로서, 다른 개체의 일부로서, 재사용 가능 제어로서, 서버로부터 다운로드 가능한 개체로서, 장치 또는 개체와 네트워크 사이의 "미들 맨"으로서, 배포되는 개체로서, 하드웨어로서, 메모리 내에, 전술한 것들의 임의 조합 등으로서 제공될 수 있다. 본 명세서에서 예시적인 프로그래밍 언어들, 명칭들 및 예들이 다양한 선택을 대표하는 것으로서 선택되지만, 이러한 언어들, 명칭들 및 예들은 제한하는 것으로 의도되지 않는다. 이 분야의 통상의 기술자는 본 발명의 다양한 실시예에 의해 달성되는 동일, 유사 또는 균등한 기능을 달성하는 개체 코드 및 명명법을 제공하는 다양한 방법이 존재함으로 알 것이다.
전술한 바와 같이, 여기에 설명되는 다양한 기술들은 하드웨어 또는 소프트웨어, 또는 적절한 경우에 이들 양자의 조합과 관련하여 구현될 수 있다. 따라서, 본 발명의 방법들 및 장치, 또는 이들의 소정 양태들 및 부분들은 플로피 디스켓, CD-ROM, 하드 드라이브 또는 임의의 다른 기계 판독가능 저장 매체와 같은 유형 매체에 구현되는 프로그램 코드(즉, 명령어)의 형태를 취할 수 있는데, 프로그램 코드가 컴퓨터와 같은 기계 내에 로딩되어 실행될 때, 기계는 본 발명의 실시하기 위한 장치가 된다. 프로그래머블 컴퓨터들 상에서의 프로그램 코드 실행의 경우, 컴퓨팅 장치는 일반적으로 프로세서, 프로세서에 의해 판독가능한 저장 매체(휘발성 및 비휘발성 메모리 및/또는 저장 소자들을 포함함), 적어도 하나의 입력 장치 및 적어도 하나의 출력 장치를 포함한다. 예를 들어, 데이터 처리 API, 재사용 가능 제어들 등의 사용을 통해 본 발명의 개량된 그래픽 파이프라인 기술들을 구현하거나 이용할 수 있는 하나 이상의 프로그램은 컴퓨터 시스템과 통신하기 위해 하이 레벨 절차 또는 개체 지향 프로그래밍 언어로 바람직하게 구현된다. 그러나, 프로그램(들)은 원할 경우에 어셈블리 또는 기계 언어로 구현될 수 있다. 어느 경우에나, 언어는 컴파일되거나 해석되는 언어일 수 있으며, 하드웨어 구현들과 결합될 수 있다.
본 발명의 방법들 및 장치는 또한 전기 와이어 또는 케이블을 통하거나, 광섬유를 통하거나, 임의의 다른 형태의 전송을 통하는 등의 소정 전송 매체를 통해 전송되는 프로그램 코드의 형태로 구현되는 통신들을 통해 실시될 수 있는데, 프로그램 코드가 EPROM, 게이트 어레이, 프로그래머블 논리 장치(PLD), 클라이언트 컴퓨터 등과 같은 기계에 의해 수신되고, 로딩되어 실행될 때, 기계는 본 발명을 실시하기 위한 장치가 된다. 범용 프로세서 상에서 구현될 때, 프로그램 코드는 프로세서와 결합하여 본 발명의 기능을 호출하도록 동작하는 고유한 장치를 제공한다. 또한, 본 발명과 관련하여 이용되는 임의의 저장 기술들은 항상 하드웨어와 소프트웨어의 결합일 수 있다.
본 발명은 다양한 도면들의 바람직한 실시예들과 관련하여 설명되었지만, 본 발명으로부터 벗어나지 않고 본 발명의 통일 기능을 수행하기 위해 다른 유사한 실시예들이 이용될 수 있거나, 설명된 실시예들에 대한 변경들 및 추가들이 이루어질 수 있다는 것을 이해해야 한다. 예를 들어, 본 발명의 예시적인 네트워크 환경들은 피어 대 피어 네트워크 환경과 같은 네트워크 환경과 관련하여 설명되었지만, 이 분야의 기술자는 본 발명이 그에 제한되지 않으며, 본 명세서에 설명된 바와 같은 방법들이 유선이든 무선이든 게임 콘솔, 핸드헬드 컴퓨터, 휴대형 컴퓨터 등과 같은 임의의 컴퓨팅 장치 또는 환경에 적용될 수 있으며, 통신 네트워크를 통해 접속되고 네트워크를 통해 상호작용하는 임의 수의 그러한 컴퓨팅 장치들에 적용될 수 있다는 것을 알 것이다. 또한, 특히 무선 네트워크 장치들의 수가 계속 급증함에 따라, 핸드헬드 장치 운영 체제들 및 다른 응용 고유 운영 체제들을 포함하는 다양한 컴퓨터 플랫폼이 고려된다는 점이 강조되어야 한다.
실시예들은 그래픽 파이프라인과 관련하여 본 발명을 이용하는 것을 설명하지만, 본 발명은 그에 제한되는 것이 아니라, 오히려 제2 처리 장치를 제공하도록 구현될 수 있다. 예를 들어, 프로그래머가 CPU를 이용하여 다른 기능을 수행하면서, 디스플레이를 스크린에 렌더링하고 컴퓨터 계산을 처리하기를 원하는 경우, 처리 장치들은 그래픽 디스플레이가 최종 출력에 포함되는지의 여부에 관계없이 그들의 최대로 이용되는 것이 필요할 수 있다. 또한, 본 발명은 복수의 처리 칩들 또는 장치들 내에 또는 이들에 걸쳐 구현될 수 있으며, 저장은 유사하게 복수의 장치들에 걸쳐 실시될 수 있다. 따라서, 본 발명은 임의의 단일 실시예로 제한되는 것이 아니라, 첨부된 청구범위에 따라 그 넓이 및 범위가 해석되어야 한다.

Claims (20)

  1. 그래픽 파이프라인의 복수의 쉐이더(shaders) 의해 사용되는 자원(resource)을 처리 장치의 특정 슬롯(slot)에 할당하기 위한 방법으로서,
    제1 쉐이더에 대한 특정 자원/슬롯 배열을 식별하는 단계;
    제2 쉐이더에 대한 특정 자원/슬롯 배열을 식별하는 단계;
    제3 쉐이더에 대한 특정 자원/슬롯 배열을 식별하는 단계;
    적어도 제1, 제2 및 제3 쉐이더에 대한 공통 자원/슬롯 배열을 소정의 비용 메트릭(cost metric)보다 적은 비용을 갖는 배열로서 결정하는 단계 - 상기 공통 자원/슬롯 배열은 제1 자원을 제1 슬롯에 연관시키는 상기 제1 쉐이더, 상기 제1 자원을 상기 제1 슬롯에 연관시키는 상기 제2 쉐이더, 및 상기 제1 자원을 상기 제1 슬롯과 다른 제2 슬롯에 연관시키는 상기 제3 쉐이더에 기초함 - ; 및
    상기 결정된 공통 자원/슬롯 배열에 기초하여 상기 복수의 쉐이더에 대해 상기 제1 자원을 상기 제1 슬롯과 결합(binding)하여 상기 제3 쉐이더가 상기 제1 자원을 상기 제2 슬롯 대신에 상기 제1 슬롯과 연관되도록 수정(modifying)하는 단계를 포함하고,
    상기 제1 쉐이더에 대한 특정 자원/슬롯 배열을 식별하는 단계, 제2 쉐이더에 대한 특정 자원/슬롯 배열을 식별하는 단계, 제3 쉐이더에 대한 특정 자원/슬롯 배열을 식별하는 단계, 결정하는 단계, 및 결합하고 수정하는 단계 중 적어도 하나의 일부 또는 전부는 마이크로프로세서를 통해 구현되는 방법.
  2. 제1항에 있어서,
    상기 배열의 비용은 현재 로딩된 쉐이더 간의 전이(transition)에 필요한 재결합의 수의 함수(a function of a number of rebindings)인, 방법.
  3. 제1항에 있어서,
    상기 공통 자원/슬롯 배열은 상기 제1, 제2 및 제3 쉐이더 중 적어도 하나에 의해 사용되는 자원을 각각 적어도 하나의 슬롯에 결합하는, 방법.
  4. 제1항에 있어서,
    상기 제1, 제2 및 제3 쉐이더는 복수의 동일한 자원을 사용하고, 상기 제1, 제2 및 제3 쉐이더는 상기 각각의 쉐이더가 동일한 자원을 동일한 슬롯에 연관시키도록 상기 공통 자원/슬롯 배열에 따라 수정되는, 방법.
  5. 제1항에 있어서,
    상기 공통 자원/슬롯 배열을 결정하는 단계 전에, 상기 제1, 제2 및 제3 쉐이더에 의해 이용되는 나머지 자원 간의 자원 종속성(resource dependencies)에 기초하여 상기 제1 자원을 상기 제1 슬롯에 결합하기 위한 비용을 계산하는 단계; 및
    공통 자원/슬롯 배열을 결정하는 단계 전에, 상기 제1, 제2 및 제3 쉐이더에 의해 이용되는 나머지 자원 간의 자원 종속성에 기초하여 상기 제1 자원을 상기 제2 슬롯에 결합하기 위한 비용을 계산하는 단계를 더 포함하며,
    상기 공통 자원/슬롯 배열을 결정하는 단계는 상기 제1 자원을 상기 제1 슬롯에 결합하기 위한 비용이 상기 제1 자원을 상기 제2 슬롯에 결합하기 위한 비용보다 적음을 판정하는 단계를 포함하는 방법.
  6. 제5항에 있어서,
    상기 제1 자원을 상기 제1 슬롯에 결합하기 위한 비용을 계산하는 단계는,
    상기 제1 자원이 상기 제1 슬롯에 결합되는 경우에 상기 제1, 제2 및 제3 쉐이더를 렌더링하는 데 필요한 상태 변경(state changes)의 수를 결정하는 단계;
    상기 제1 자원이 상기 제1 슬롯에 결합되는 경우에 필요한 소모 슬롯의 수를 결정하는 단계;
    상기 상태 변경의 수 및 상기 소모 슬롯의 수 중 적어도 하나에 기초하여, 상기 제1 자원을 상기 제1 슬롯에 결합하는 것과 연관된 제1 비용을 계산하는 단계; 및
    상기 제1, 제2 및 제3 쉐이더 중 적어도 하나에 의해 사용되는 자원을 각각 상기 제1 슬롯에 결합하기 위한 비용이 계산될 때까지 상기 상태 변경의 수를 결정하는 단계, 상기 소모 슬롯의 수를 결정하는 단계 및 비용을 계산하는 단계를 반복하는 단계를 포함하는 방법.
  7. 제1항에 있어서,
    상기 처리 장치는 그래픽 처리 장치를 포함하고, 상기 제1 자원은 상수 버퍼(constant buffer)를 포함하는 방법.
  8. 제1항의 방법을 수행하기 위한 컴퓨터 실행가능 명령어를 포함하는 컴퓨터 판독가능 저장 장치.
  9. 제1항의 방법을 수행하도록 그래픽 처리 장치에 명령하기 위한 그래픽 애플리케이션 프로그래밍 인터페이스를 포함하는 컴퓨터 판독가능 저장 장치.
  10. 제1항에 있어서,
    상기 방법은 하나 이상의 애플리케이션의 실행 시간 및 로드 시간에 동적으로 수행되는 방법.
  11. 컴퓨터상의 프로세서를 통해 실행될 경우 그래픽 파이프라인의 적어도 두 개의 쉐이더에 의해 사용되는 자원을 그래픽 처리 장치의 특정 슬롯에 할당하기 위한 방법을 수행하는 컴퓨터 실행가능 명령어를 포함하는 컴퓨터 판독가능 저장 장치로서,
    상기 방법은
    제1 자원을 제1 슬롯에 할당하는 제1 쉐이더를 식별하는 단계;
    상기 제1 자원을 상기 제1 슬롯과 다른 제2 슬롯에 할당하는 제2 쉐이더를 식별하는 단계; 및
    상기 제2 쉐이더에서 비용이 소정의 비용 메트릭보다 적게 하기 위해 상기 제1 자원을 상기 제1 슬롯에 재할당하는 단계
    를 포함하는 컴퓨터 판독가능 저장 장치.
  12. 제11항에 있어서,
    상기 제2 쉐이더에서 상기 제1 자원을 상기 제1 슬롯에 재할당하는 것은 쉐이더 간의 자원 재구성 비용을 줄이기 위한 것인 컴퓨터 판독가능 저장 장치.
  13. 제11항에 있어서,
    상기 방법은
    상기 제1 자원을 상기 제1 슬롯에 할당하기 위한 비용을 계산하는 단계;
    상기 제1 자원을 상기 제2 슬롯에 할당하기 위한 비용을 계산하는 단계를 더 포함하며,
    상기 제2 쉐이더에서 상기 제1 자원을 상기 제1 슬롯에 재할당하는 것은 상기 제1 자원을 상기 제1 슬롯에 할당하기 위한 비용이 상기 제1 자원을 상기 제2 슬롯에 할당하기 위한 비용보다 적기 때문인 컴퓨터 판독가능 저장 장치.
  14. 제13항에 있어서,
    상기 제1 자원을 상기 제1 슬롯에 할당하기 위한 비용을 계산하는 단계는,
    상기 제1 자원이 상기 제1 슬롯에 할당되는 경우에 상기 제1 및 제2 쉐이더를 렌더링하는 데 필요한 상태 변경의 수를 결정하는 단계;
    상기 제1 자원이 상기 제1 슬롯에 할당되는 경우에 필요한 소모 슬롯의 수를 결정하는 단계; 및
    상기 상태 변경의 수 및 상기 소모 슬롯의 수에 기초하여, 상기 제1 자원을 상기 제1 슬롯에 할당하기 위한 상기 비용을 계산하는 단계를 포함하는 컴퓨터 판독가능 저장 장치.
  15. 특정 자원/슬롯 연관성을 갖는 적어도 하나의 쉐이더의 구성을 수정하는 방법으로서,
    종속성 트리에서 각각의 자원 종속성을 스캐닝하는 단계 - 각각의 자원은 상기 종속성 트리 내의 부모 개체의 각각의 슬롯에 결합되고, 각각의 부모 개체는 쉐이더를 나타냄 - ;
    상기 종속성 트리의 다수의 자원 구성들과 연관된 비용을 계산하는 단계;
    상이한 쉐이더들 간의 스위칭시에 장치 재구성의 수를 줄이는 상기 종속성 트리의 특정 자원 구성을 선택하는 단계; 및
    적어도 하나의 쉐이더의 제1 슬롯에 결합된 자원이 제2 슬롯에 결합되도록 선택된 상기 특정 자원 구성에 기초하여 상기 적어도 하나의 쉐이더의 구성을 수정하는 단계를 포함하고,
    상기 스캐닝하는 단계, 계산하는 단계, 선택하는 단계 및 수정하는 단계 중 적어도 하나의 일부 또는 전부는 마이크로프로세서를 통해 구현되는 방법.
  16. 제15항의 방법을 수행하도록 그래픽 처리 장치에 명령하기 위한 그래픽 애플리케이션 프로그래밍 인터페이스를 포함하는 컴퓨터 판독가능 저장 장치.
  17. 제11항에 있어서, 상기 제1 쉐이더와 제2 쉐이더는 연속하여 실행되도록 구성되는 컴퓨터 판독가능 저장 장치.
  18. 제15항에 있어서,
    병렬로 실행되는 복수의 쉐이더를 식별하는 단계;
    병렬로 실행되는 각각의 쉐이더와 연관된 자원의 수를 판정하는 단계 - 각각의 쉐이더는 각각의 자원을 슬롯에 할당하도록 구성됨 - ; 및
    상기 판정된 병렬로 실행되는 각각의 쉐이더와 연관된 자원의 수에 기초하여 상기 종속성 트리를 생성하는 단계를 포함하는 방법.
  19. 제15항에 있어서,
    상기 선택된 종속성 트리의 특정 자원 구성은 특정 자원을 동일 슬롯에 일관되게 배치함으로써 상기 장치 재구성의 수를 최소로 줄이도록 구성되는 방법.
  20. 삭제
KR1020087031260A 2006-06-28 2007-06-07 자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법 KR101231291B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/477,272 US8111260B2 (en) 2006-06-28 2006-06-28 Fast reconfiguration of graphics pipeline state
US11/477,272 2006-06-28
PCT/US2007/013410 WO2008002384A2 (en) 2006-06-28 2007-06-07 Fast reconfiguration of graphics pipeline state

Publications (2)

Publication Number Publication Date
KR20090024178A KR20090024178A (ko) 2009-03-06
KR101231291B1 true KR101231291B1 (ko) 2013-02-15

Family

ID=38846159

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087031260A KR101231291B1 (ko) 2006-06-28 2007-06-07 자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법

Country Status (7)

Country Link
US (2) US8111260B2 (ko)
EP (1) EP2033085B1 (ko)
JP (1) JP5154551B2 (ko)
KR (1) KR101231291B1 (ko)
CN (2) CN101479701B (ko)
MX (1) MX2008015162A (ko)
WO (1) WO2008002384A2 (ko)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7948495B1 (en) * 2006-02-02 2011-05-24 Nvidia Corporation Linking texture headers and texture samplers
US8154554B1 (en) 2006-07-28 2012-04-10 Nvidia Corporation Unified assembly instruction set for graphics processing
US20080252652A1 (en) * 2007-04-13 2008-10-16 Guofang Jiao Programmable graphics processing element
US8610725B2 (en) * 2007-10-10 2013-12-17 Apple Inc. Framework for dynamic configuration of hardware resources
EP2289000B1 (en) * 2008-05-29 2018-08-08 Advanced Micro Devices, Inc. System, method, and computer program product for a tessellation engine using a geometry shader
US8854379B2 (en) * 2009-02-25 2014-10-07 Empire Technology Development Llc Routing across multicore networks using real world or modeled data
US8749562B1 (en) * 2009-09-23 2014-06-10 Nvidia Corporation Sharing binding groups between shaders
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US8786618B2 (en) * 2009-10-08 2014-07-22 Nvidia Corporation Shader program headers
US8766988B2 (en) * 2009-10-09 2014-07-01 Nvidia Corporation Providing pipeline state through constant buffers
US8872823B2 (en) * 2009-10-09 2014-10-28 Microsoft Corporation Automatic real-time shader modification for texture fetch instrumentation
US9582919B2 (en) * 2009-10-09 2017-02-28 Microsoft Technology Licensing, Llc Automatic run-time identification of textures
US9390539B2 (en) * 2009-11-04 2016-07-12 Intel Corporation Performing parallel shading operations
US8432398B2 (en) * 2009-11-05 2013-04-30 Microsoft Corporation Characteristic determination for an output node
US8756590B2 (en) 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
US20120127183A1 (en) * 2010-10-21 2012-05-24 Net Power And Light, Inc. Distribution Processing Pipeline and Distributed Layered Application Processing
JP5670723B2 (ja) * 2010-12-27 2015-02-18 株式会社ディジタルメディアプロフェッショナル 画像処理装置
CN102496169A (zh) * 2011-11-30 2012-06-13 威盛电子股份有限公司 重迭对象的绘制方法及装置
JP2013218527A (ja) * 2012-04-09 2013-10-24 Mitsubishi Electric Corp グラフィックス描画装置
US20130342535A1 (en) * 2012-06-20 2013-12-26 Microsoft Corporation Hierarchical Tree Traversal in Graphics Pipeline Stages
US9830741B2 (en) * 2012-11-07 2017-11-28 Nvidia Corporation Setting downstream render state in an upstream shader
KR101695013B1 (ko) * 2012-12-14 2017-01-10 한국전자통신연구원 적응형 자원 할당 및 관리 방법
US20140267327A1 (en) 2013-03-14 2014-09-18 Microsoft Corporation Graphics Processing using Multiple Primitives
US9384589B2 (en) 2013-04-29 2016-07-05 Microsoft Technology Licensing, Llc Anti-aliasing for geometries
US20140354658A1 (en) * 2013-05-31 2014-12-04 Microsoft Corporation Shader Function Linking Graph
US10013732B2 (en) * 2013-06-28 2018-07-03 Lockheed Martin Corporation Externally directed GPU data
US9747658B2 (en) 2013-09-06 2017-08-29 Apple Inc. Arbitration method for multi-request display pipeline
US9292903B2 (en) * 2013-10-03 2016-03-22 Google Inc. Overlap aware reordering of rendering operations for efficiency
US9766954B2 (en) 2014-09-08 2017-09-19 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US9779535B2 (en) 2014-03-19 2017-10-03 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US10430169B2 (en) 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US20150348224A1 (en) * 2014-05-30 2015-12-03 Apple Inc. Graphics Pipeline State Object And Model
US10242493B2 (en) * 2014-06-30 2019-03-26 Intel Corporation Method and apparatus for filtered coarse pixel shading
CN104183008B (zh) * 2014-07-31 2017-01-18 浙江大学 一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法
CN104616327B (zh) * 2014-07-31 2017-07-14 浙江大学 一种基于曲面细分的着色器简化方法、装置及图形渲染方法
US9779528B2 (en) 2014-09-12 2017-10-03 Microsoft Technology Licensing, Llc Text realization
US10417990B2 (en) * 2014-10-16 2019-09-17 Nvidia Corporation Efficient binding of resource groups in a graphics application programming interface
US10108321B2 (en) * 2015-08-31 2018-10-23 Microsoft Technology Licensing, Llc Interface for defining user directed partial graph execution
US9881352B2 (en) * 2015-11-13 2018-01-30 Intel Corporation Facilitating efficient graphics commands processing for bundled states at computing devices
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11080927B2 (en) * 2017-11-30 2021-08-03 Advanced Micro Devices, Inc. Method and apparatus of cross shader compilation
GB2570304B (en) 2018-01-18 2022-06-01 Imagination Tech Ltd Topology preservation in a graphics pipeline
US10430367B1 (en) * 2018-07-12 2019-10-01 Dell Products L.P. Systems and methods for optimal placement of information handling resource
US11403729B2 (en) 2020-02-28 2022-08-02 Advanced Micro Devices, Inc. Dynamic transparent reconfiguration of a multi-tenant graphics processing unit

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243107B1 (en) 1998-08-10 2001-06-05 3D Labs Inc., Ltd. Optimization of a graphics processor system when rendering images
US20040237074A1 (en) 2003-05-23 2004-11-25 Microsoft Corporation Optimizing compiler transforms for a high level shader language
US20060055695A1 (en) 2004-09-13 2006-03-16 Nvidia Corporation Increased scalability in the fragment shading pipeline

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6295608B1 (en) 1998-02-17 2001-09-25 Microsoft Corporation Optimized allocation of data elements among cache lines
US6189105B1 (en) 1998-02-20 2001-02-13 Lucent Technologies, Inc. Proximity detection of valid computer user
US6631423B1 (en) 1998-03-31 2003-10-07 Hewlett-Packard Development Company, L.P. System and method for assessing performance optimizations in a graphics system
US6070202A (en) 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6374145B1 (en) 1998-12-14 2002-04-16 Mark Lignoul Proximity sensor for screen saver and password delay
US6560711B1 (en) 1999-05-24 2003-05-06 Paul Given Activity sensing interface between a computer and an input peripheral
US6198488B1 (en) * 1999-12-06 2001-03-06 Nvidia Transform, lighting and rasterization system embodied on a single semiconductor platform
US20020021307A1 (en) 2000-04-24 2002-02-21 Steve Glenn Method and apparatus for utilizing online presence information
US7546602B2 (en) 2001-07-10 2009-06-09 Microsoft Corporation Application program interface for network software platform
US6943800B2 (en) 2001-08-13 2005-09-13 Ati Technologies, Inc. Method and apparatus for updating state data
US6784888B2 (en) 2001-10-03 2004-08-31 Ati Technologies, Inc. Method and apparatus for executing a predefined instruction set
US20030084322A1 (en) 2001-10-31 2003-05-01 Schertz Richard L. System and method of an OS-integrated intrusion detection and anti-virus system
US6828978B2 (en) 2002-02-28 2004-12-07 David B. Buehler Bucket-sorting graphical rendering apparatus and method
US7159212B2 (en) 2002-03-08 2007-01-02 Electronic Arts Inc. Systems and methods for implementing shader-driven compilation of rendering assets
DE60322879D1 (de) 2002-05-03 2008-09-25 British Telecomm Informationssicherheit
US6980209B1 (en) 2002-06-14 2005-12-27 Nvidia Corporation Method and system for scalable, dataflow-based, programmable processing of graphics data
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
US20050097595A1 (en) 2003-11-05 2005-05-05 Matti Lipsanen Method and system for controlling access to content
US7123286B2 (en) 2003-11-14 2006-10-17 Lucent Technologies Inc. Presence detection for IP telephony
US20050182962A1 (en) 2004-02-17 2005-08-18 Paul Given Computer security peripheral
US7385607B2 (en) 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7154500B2 (en) * 2004-04-20 2006-12-26 The Chinese University Of Hong Kong Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
US7570267B2 (en) 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
NO20042409L (no) 2004-06-09 2005-12-12 Tandberg Telecom As System og metode for detektering av tilstedevaerelse.
US7451432B2 (en) 2004-10-01 2008-11-11 Microsoft Corporation Transformation of componentized and extensible workflow to a declarative format
US7464366B2 (en) 2004-10-01 2008-12-09 Microsoft Corporation Programming interface for a componentized and extensible workflow model
US20070234308A1 (en) 2006-03-07 2007-10-04 Feigenbaum Barry A Non-invasive automated accessibility validation
CA2707680A1 (en) * 2006-03-14 2007-09-20 Transgaming Inc. General purpose software parallel task engine

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243107B1 (en) 1998-08-10 2001-06-05 3D Labs Inc., Ltd. Optimization of a graphics processor system when rendering images
US20040237074A1 (en) 2003-05-23 2004-11-25 Microsoft Corporation Optimizing compiler transforms for a high level shader language
US20060055695A1 (en) 2004-09-13 2006-03-16 Nvidia Corporation Increased scalability in the fragment shading pipeline

Also Published As

Publication number Publication date
EP2033085A2 (en) 2009-03-11
CN102982504B (zh) 2016-01-20
JP5154551B2 (ja) 2013-02-27
JP2009543195A (ja) 2009-12-03
EP2033085B1 (en) 2017-11-22
CN101479701B (zh) 2012-11-14
US20110316871A1 (en) 2011-12-29
WO2008002384A2 (en) 2008-01-03
CN102982504A (zh) 2013-03-20
MX2008015162A (es) 2008-12-12
US8111260B2 (en) 2012-02-07
CN101479701A (zh) 2009-07-08
US8319784B2 (en) 2012-11-27
WO2008002384A3 (en) 2008-02-14
EP2033085A4 (en) 2014-10-08
KR20090024178A (ko) 2009-03-06
US20080001952A1 (en) 2008-01-03

Similar Documents

Publication Publication Date Title
KR101231291B1 (ko) 자원 결합 방법 및 그를 위한 컴퓨터 판독가능 매체 및 애플리케이션 프로그래밍 인터페이스와, 종속성 트리 재구성 방법
US7692660B2 (en) Guided performance optimization for graphics pipeline state management
EP1594091B1 (en) System and method for providing an enhanced graphics pipeline
US7671862B1 (en) Systems and methods for providing an enhanced graphics pipeline
KR101027621B1 (ko) 그래픽 프로세서용 병렬 어레이 아키텍처
US10504275B2 (en) Methods and apparatus for more efficient ray tracing of instanced geometry
US7659901B2 (en) Application program interface for programmable graphics pipeline
TWI632524B (zh) 以邊緣爲基礎之覆蓋遮罩壓縮技術
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
Hu et al. Parallel view-dependent level-of-detail control
CN111986279A (zh) 有效访问存储器和避免不必要的计算的技术
US10395423B2 (en) Apparatus and method for rendering adaptive mesh refinement (AMR) data
CN109791527A (zh) 延迟丢弃
Dong Scalable Real-Time Rendering for Extremely Complex 3D Environments Using Multiple GPUs
CN115951938A (zh) 软件导向的发散分支目标优先级

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
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: 20160104

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170119

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190116

Year of fee payment: 7