KR20120125395A - 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법 - Google Patents

그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20120125395A
KR20120125395A KR1020127025494A KR20127025494A KR20120125395A KR 20120125395 A KR20120125395 A KR 20120125395A KR 1020127025494 A KR1020127025494 A KR 1020127025494A KR 20127025494 A KR20127025494 A KR 20127025494A KR 20120125395 A KR20120125395 A KR 20120125395A
Authority
KR
South Korea
Prior art keywords
processing
processing device
data
graphics pipeline
graphics
Prior art date
Application number
KR1020127025494A
Other languages
English (en)
Inventor
마이클 디. 스트리트
Original Assignee
콸콤 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 콸콤 인코포레이티드 filed Critical 콸콤 인코포레이티드
Publication of KR20120125395A publication Critical patent/KR20120125395A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

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

Abstract

처리 장치는 그래픽 파이프라인 외부에서 그래픽 파이프라인 데이터에 관하여 2차 처리를 수행하도록 구성되고, 2차 처리로부터의 출력이 그래픽 파이프라인에 이용가능하게 되도록 2차 처리로부터의 출력이 그래픽 파이프라인으로 통합되는, 시스템, 방법 및 장치가 개시된다. 2차 처리를 이용해야할지 여부에 관한 결정이 이루어지고, 2차 처리가 이용되려고 하는 경우 하나 이상의 명령들을 포함할 수 있는 명령 스트림이 2차 프로세서로 제공되어, 이러한 장치가 버퍼링된 그래픽 파이프라인 데이터의 위치를 찾고 이에 관해 연산할 수 있게 된다. 2차 처리는, 그래픽 파이프라인 처리 모듈들과 2차 처리 장치에 의한 데이터 액세스를 동기화하도록, 관리되고 모니터링된다.

Description

그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법{SYSTEM AND METHOD FOR USING A SECONDARY PROCESSOR IN A GRAPHICS SYSTEM}
본 개시내용은 그래픽 처리 시스템에서의 병렬 처리에 관한 것이고, 보다 구체적으로 2차 프로세서에 의해 처리되는 데이터를 그래픽 처리 파이프라인으로 재통합(reintegration)하는 것을 포함하여, 그래픽 처리를 병렬로 수행하기 위해, 중앙 처리 장치 및 그래픽 처리 장치와 같은 다른 처리 장치들과 함께 2차 프로세서의 이용을 동기화하는 것에 관한 것이다.
그래픽 처리 장치(GPU)는 디스플레이 디바이스 상에서의 디스플레이를 위해 컴퓨터화된(computerized) 그래픽을 생성하는데 이용되는 전용 그래픽 렌더링 디바이스이다. GPU는 전형적으로 그래픽 이미지 데이터, 예를 들어 3차원 컴퓨터화된 그래픽 이미지 데이터를 처리하기 위해 범용 중앙 처리 장치(CPU)와 함께 이용된다. 이러한 경우, GPU는 디스플레이 디바이스 상에서의 디스플레이를 위해 CPU를 이용하여 이미지를 그리는 것보다 더 신속하게 디스플레이 디바이스 상에서의 디스플레이를 위해 3차원 이미지들을 생성하도록 수많은 프리미티브(primitive) 그래픽 연산들을 구현할 수 있다. 전형적으로, GPU는 하드웨어에서 일정한 수의 복잡한 알고리즘들을 구현하는 하드웨어를 포함한다.
전형적인 GPU는 이미지 기하구조(geometry)를 수신하고, 예를 들어 파이프라인 접근법을 이용하여 디스플레이 디바이스 상에서의 디스플레이를 위해 출력될 수 있는 그래픽들을 생성한다. 전형적인 그래픽 파이프라인은, 파이프라인에서 한 스테이지로부터의 출력이 다른 스테이지에서 가능한 이용되는, 병렬로 연산하는 다수의 스테이지들을 포함한다. 예를 들어, 전형적인 그래픽 파이프라인은 정점 쉐이더(vertex shader), 프리미티브 어셈블리, 뷰포인트(viewpoint) 변환, 프리미티브 셋업, 래스터화(rasterization), 히든(hidden) 프리미티브 및 픽셀 리젝션, 속성 셋업, 속성 보간(attribute interpolation) 및 프래그먼트 쉐이더 스테이지들을 포함한다.
정점 쉐이더는 이미지에 대한 이미지 기하에 적용되고 이미지 기하 내의 정점들의 정점 좌표들 및 속성들을 생성한다. 정점 속성들은 예를 들어 정점과 연관된 컬러, 노멀(normal), 및 텍스쳐 좌표들을 포함한다. 프리미티브 어셈블리는 이미지 기하에 기초하여 정점들로부터 프리미티브들, 예를 들어 점, 선, 및 삼각형 프리미티브들을 형성한다. 형성된 프리미티브들은 변환, 예를 들어 프리미티브들을 정규화된 디바이스 공간으로부터 스크린 공간으로 변환하는 뷰포인트 변환을 이용하여 하나의 공간으로부터 다른 공간으로 변환될 수 있다. 프리미티브 셋업은 프리미티브의 영역, 엣지 계수(edge coefficient)들을 결정하고 어클루젼 컬링(occlusion culling)(가령, 백페이스 컬링), 및 3-D 클리핑 연산들을 수행하기 위해 이용될 수 있다.
래스터화는 프리미티브들 내의 정점들의 XY 좌표들 및 프리미티브들에 포함된 픽셀들의 수에 기초하여 프리미티브들을 픽셀들로 변환한다. 히든 프리미티브 및 픽셀 리젝션은 프리미티브들 및/또는 픽셀들의 z 좌표를 이용하여, 숨겨져 있다고 결정되는 그러한 프리미티브들 및 픽셀들(예를 들어, 이미지 프레임에서 다른 프리미티브 또는 픽셀, 투명한 프리미티브 또는 픽셀 뒤에 위치한 프리미티브 또는 픽셀)을 결정하고 거부한다. 속성 셋업은 속성 변화도(gradient)들, 예를 들어 프리미티브 내의 픽셀들과 연관된 속성들에 대하여 수평(X) 방향 또는 수직(Y) 방향으로 이동하는 프리미티브 내에서 제 1 픽셀에서의 속성값과 제 2 픽셀에서의 속성값 간의 차이를 결정한다. 속성 보간은 결정된 속성 변화도 값들에 기초하여 프리미티브 내의 픽셀들에 대해 속성들을 보간(interpolate)한다. 보간된 속성값들은 픽셀 렌더링을 위해 프래그먼트 쉐이더로 전송된다. 프래그먼트 쉐이더의 결과들은 디스플레이 디바이스 상에서 처리된 이미지의 표시를 위해 사후-처리 블록 및 프레임 버퍼로 출력될 수 있다.
증가된 처리량을 성취하기 위해 그래픽 파이프라인 처리를 용이하게 하는 것이 유익하다. 그래픽 파이프라인의 일부를 구현하는 소프트웨어를 최적화함으로써 처리량을 증가시키기 위한 노력들을 기울여 왔다. 그러나, 이러한 접근법은 많은 비용이 드는데, 그것이 전형적으로 최적화된 프로그램 코드를 생성하기 위해 상당한 프로그래머 노력 및 시간을 요구하기 때문이다. 증가된 처리량은 전용화된 하드웨어를 이용하여 성취될 수 있다. 그러나 이러한 접근법은, 전용화된 목적을 위해서만 이용되도록 가용한, 전용화된 하드웨어에 대한 추가적인 비용을 포함한다.
본 개시내용은 기술분야의 단점들을 다루려 하고, 처리와 연관되는 데이터 의존성(dependency)을 식별하고 이러한 데이터 의존성을 충족시키도록 2차 처리 장치에 의해 생성되는 출력을 그래픽 처리 파이프라인으로 통합하기 위해, 그래픽 처리 장치 및/또는 중앙 처리 장치와 같은, 다른 처리 장치들에 의해 수행되는 처리를 보완하도록, 그래픽 처리 파이프라인에서 그래픽 처리를 수행하는데 2차 처리 장치를 이용하는 그래픽 이미지 처리에 있어서의 효율성들을 제공하려고 시도한다.
처리 장치는 그래픽 파이프라인 외부에서 그래픽 파이프라인 데이터에 관해 2차 처리를 수행하도록 구성되고, 2차 처리로부터의 출력이 그래픽 파이프라인에 이용가능하게 되도록 2차 처리로부터의 출력이 그래픽 파이프라인으로 통합되는, 시스템, 방법 및 장치가 개시된다. 2차 처리를 이용해야 하는지 여부에 관한 결정이 이루어지고, 2차 처리가 이용되려고 하는 경우, 하나 이상의 명령들을 포함할 수 있는 명령 스트림이 2차 처리 장치로 제공되어, 이러한 장치가 버퍼링된 그래픽 파이프라인 데이터의 위치를 찾아 이에 관해 연산할 수 있다. 그래픽 파이프라인 내의 하나 이상의 처리 모듈들과 2차 처리에 의한 데이터 액세스를 동기화하도록 2차 처리는 관리 및 모니터링된다.
본 개시내용의 실시예들에 따라, 그래픽 처리 파이프라인과 함께 2차 처리 장치, 또는 2차 프로세서를 이용할 수 있는 기회가 식별되고, 그래픽 파이프라인 데이터는 2차 처리 장치에 이용가능하게 된다. 2차 처리 장치에 의해 생성되는 그래픽 파이프라인 데이터는 그래픽 파이프라인으로 재통합(reintegrate)된다. 비-제한적인 예로서, 2차 프로세서는 디지털 신호 처리기이고, 이것은 그래픽 파이프라인으로부터 디지털 신호 처리기에 이용가능하게 된 컬러 데이터로부터 라이팅된 컬러들을 생성하기 위해 라이팅(lighting) 모듈로서 구성된다.
그런 가운데, 본 개시내용의 실시예들은 이용가능한 2차 프로세서(들)를 이용하여 처리 로드(load)를 밸런싱할 수 있는 능력을 제공한다. 만약 그렇지 않다면 유휴상태로 남아있을 수 있는 2차 프로세서는 그래픽 처리 장치에 의해 수행되는 그래픽 파이프라인 처리 및/또는 중앙 처리 장치, 또는 다른 처리 장치에 의해 수행되는 처리를 용이하게 하기 위해 이용될 수 있다. 따라서 예를 들어, 만약 그렇지 않다면 처리 리소스를 위해 대기할지도 모르는 연산들은 이용가능한 2차 프로세서로 지향될 수 있고, 이것은 보다 신속한 처리량의 결과를 낳는다. 유리하게도, 2차 프로세서가 이용되지 않는 처리에 대해서, 2차 프로세서를 이용할 때 처리량의 증가(가령, 초당 프레임들로 측정되는)가 있다고 결정되었다. 부가적으로, 본 개시내용의 실시예들은 로드 밸런싱을 수행하기 위해 2차 처리로부터 피드백되는 정보를 이용할 수 있다. 이러한 피드백은 예를 들어, 2차 프로세서가 어떤, 임계 처리 레벨에 도달하는 시기를 결정하기 위해 이용될 수 있다. 2차 프로세서가 임계 처리 능력에 도달한다고 결정될 때, 처리는 중앙 처리 장치와 같은 또 다른 처리 장치로 지향될 수 있다.
부가적으로, 본 개시내용의 실시예들은 처리 장치가 이용가능한 경우 하나 이상의 다른 2차 기능들을 수행하기 위해, 처리 장치의 1차(primary) 처리 목적과는 다른 목적을 위해 이러한 처리 장치를 이용할 수 있는 능력을 제공한다. 만약 그렇지 않다면 유휴 상태일 수 있는 이러한 하드웨어, 예를 들면 처리 장치의 이용은 하드웨어를 보다 효율적으로 이용하는 결과를 낳는다.
본 개시내용의 양상에 따라 방법은, 드로우(draw) 요청에 응답하여, 1차 처리 기능을 갖는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하는 단계; 그래픽 파이프라인 처리에 도움이 되도록 처리 장치의 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 2차 프로세서의 할당을 요청하는 단계; 및 이러한 할당 요청이 성공적인 경우: 그래픽 파이프라인 데이터를 처리 장치에 이용가능하게 하는 단계; 처리 장치에 의한 처리의 상태를 모니터링하는 단계; 및 처리 장치에 의해 출력되는 데이터를 그래픽 파이프라인 데이터로 통합하는 단계를 포함한다.
본 개시내용의 또 다른 양상에 따라, 프로그램 코드를 저장하는 컴퓨터-판독가능 메모리 매체가 제공되고, 상기 프로그램 코드는, 1차 처리 기능을 갖는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하고; 그래픽 파이프라인 처리에 도움이 되도록 처리 장치의 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 2차 프로세서의 할당을 요청하고; 그리고 이러한 할당 요청이 성공적인 경우: 그래픽 파이프라인 데이터를 처리 장치에 이용가능하도록 하고; 처리 장치에 의한 처리의 상태를 모니터링하고; 그리고 처리 장치에 의해 출력되는 데이터를 그래픽 파이프라인 데이터로 통합하기 위한 코드를 포함한다.
본 개시내용의 또 다른 양상에 따라 장치는, 그래픽 파이프라인을 구현하도록 구성되는 그래픽 처리 장치; 및 그래픽 처리 장치에 결합되는 2차 처리 관리자를 포함하고, 상기 2차 처리 관리자는: 상기 2차 처리 관리자에 결합되는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하고 ― 상기 처리 장치는 1차 처리 기능을 가짐 ― ; 그래픽 파이프라인 처리에 도움이 되도록 상기 처리 장치의 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 상기 2차 프로세서의 할당을 요청하도록 구성되고; 그리고 이러한 할당 요청이 성공적인 경우, 2차 처리 관리자는: 그래픽 파이프라인 데이터를 상기 처리 장치에 이용가능하게 하고; 그리고 상기 처리 장치에 의한 처리의 상태를 모니터링하고; 그리고 처리 장치에 의해 출력되는 데이터를 그래픽 파이프라인 데이터로 통합하도록 추가 구성된다.
본 개시내용의 또 다른 양상에 따라, 장치는 그래픽 파이프라인을 구현하도록 구성되는 그래픽 처리 장치; 및 그래픽 처리 장치에 결합되는 2차 처리 관리 수단을 포함하고, 2차 처리 관리 수단은: 상기 2차 처리 관리자에 결합되는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하기 위한 수단 ― 상기 처리 장치는 1차 처리 기능을 가짐 ― ; 그래픽 파이프라인 처리에 도움이 되도록 상기 처리 장치의 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 상기 2차 프로세서의 할당을 요청하기 위한 수단을 포함하고; 이러한 할당 요청이 성공적인 경우, 상기 2차 처리 관리 수단은: 그래픽 파이프라인 데이터를 상기 처리 장치에 이용가능하게 하기 위한 수단; 상기 처리 장치에 의한 처리의 상태를 모니터링하기 위한 수단; 및 처리 장치에 의해 출력되는 데이터를 그래픽 파이프라인 데이터로 통합하기 위한 수단을 더 포함한다.
*이러한 간단한 요약은 본 발명의 본질이 신속하게 이해될 수 있도록 제공된다. 본 발명에 대한 보다 완전한 이해는, 첨부되는 도면들과 함께 선호되는 실시예(들)에 대한 다음의 상세한 설명을 참조함으로써 획득될 수 있다.
본 개시내용의 상기 특징들 및 목적들은, 유사한 참조 번호들이 유사한 엘리먼트들을 나타내는, 첨부되는 도면들과 결합하여 취해질 때 다음의 설명을 참조하여 보다 명확해질 것이고, 도면에서:
도 1은 본 개시내용의 하나 이상의 실시예들에 따라 이용하기 위한 예시적인 디바이스를 도시하는 블록 다이어그램이다.
도 2는 본 개시내용의 하나 이상의 실시예들에 따라 이용되는 컴포넌트들 및 컴포넌트간 통신을 포함하는 블록 다이어그램이다.
도 3a 및 도 3b를 포함하는 도 3은 본 개시내용의 하나 이상의 실시예들에 따라 2차 처리 관리 모듈을 구현하는 프로그램 코드 프로세스 흐름을 도시한다.
도 4는 본 개시내용의 하나 이상의 실시예들에 따라 2차 처리 인터페이스 모듈을 구현하는 프로그램 코드 프로세스 흐름을 도시한다.
도 5는 본 개시내용의 하나 이상의 실시예들에 따라 이용하기 위한 동기화 프로그램 코드 프로세스 흐름을 도시한다.
도 6a 및 도 6b를 포함하는 도 6은 본 개시내용의 하나 이상의 실시에들에 따른 동기화 예들을 제공한다.
도 7은 본 개시내용의 하나 이상의 실시예들에 따라 2차 처리 모듈로 포워딩되는 구성 메시지에 포함된 정보에 대한 예를 제공한다.
도 8은 본 개시내용의 하나 이상의 실시예들에 따라 피드백(216A)에 저장될 수 있는 정보에 대한 예를 제공한다.
도 9는 본 개시내용의 하나 이상의 실시예들에 따라 명령 스트림 및 명령 스트림에 포함된 하나 이상의 명령들에 대한 예시적인 내용들을 도시한다.
본 개시내용의 몇몇 실시예들은 이제 유사한 참조 번호들이 유사한 컴포넌트들을 지칭하는, 상기 도면들을 참조하여 논의될 것이다.
하나 이상의 실시예들에 따라, 2차 처리 장치는 그래픽 파이프라인 데이터에 관해 연산하도록 구성되고, 출력이 그래픽 파이프라인에서 실행되는 하나 이상의 모듈들에 이용가능하게 되도록 2차 처리로부터의 출력이 그래픽 파이프라인으로 통합되는, 시스템, 방법 및 장치가 개시된다. 이러한 실시예들에 따라, 2차 프로세서를 이용해야할지 여부에 관한 결정이 이루어지고, 2차 프로세서가 이용되려고 하는 경우 명령 스트림이 2차 프로세서로 제공된다. 예를 들어, 명령 스트림은 하나 이상의 명령들을 포함할 수 있다. 2차 프로세서로 제공되는 각각의 명령은 현재의 명령을 식별하는 정보를 포함한다. 또 다른 명령이 있는 경우, 현재의 명령은 다음 명령을 식별하는 정보를 포함한다. 현재의 명령이 마지막 명령인 경우, 현재의 명령은 현재의 명령을 마지막 명령으로 식별하기 위한 정보를 포함한다. 명령 스트림은 2차 프로세서로 정보를 제공하고, 이러한 정보는 입력 및/또는 출력 데이터 저장 위치(들), 및 피드백 저장 위치를 포함할 수 있으나 이에 제한되지는 않는다.
하나 이상의 실시예들에 따라, 2차 프로세서는 디지털 신호 처리기(DSP)이고, 이러한 DSP는 1차 처리를 수행, 예를 들어 오디오 및/또는 비디오 데이터를 처리하도록 구성될 수 있고, 2차 처리를 수행하도록 구성될 수 있다. 하나 이상의 이러한 실시예들에 따라, DSP는 그것이 오디오 및/또는 비디오 데이터 처리를 수행하기 위해 이용가능하도록 공유되고, 이용가능할 때, 가령 오디오/비디오 데이터를 처리하지 않을 때 그래픽 파이프라인 처리를 도울 수 있다. 단지 단순화를 위해서, 이곳에서 개시된 실시예들은 2차 프로세서를 DSP로 참조함으로써 기술된다. 임의의 프로세서, 또는 처리 장치가 본 개시내용의 실시예들과 함께 이용될 수 있음이 명백해야 한다.
도 1은 본 개시내용의 하나 이상의 실시예들에 따라 이용하기 위한 예시적인 컴퓨팅 디바이스(100)를 도시하는 블록 다이어그램이다. 예시적인 컴퓨팅 디바이스(100)는 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 워크스테이션, 비디오 게임 플랫폼 또는 콘솔, 셀룰러 또는 위성 무선전화기, 유선 전화기, 인터넷 전화기, 휴대용 비디오 게임 디바이스 또는 개인 휴대 정보 단말기와 같은 핸드헬드 디바이스, 개인용 음악 플레이어, 서버, 중간(intermediate) 네트워크 디바이스, 메인프레임 컴퓨터, 또는 그래픽 정보를 출력하는 다른 유형의 디바이스를 포함할 수 있다.
도 1의 예에서, 컴퓨팅 디바이스(100)는 중앙 처리 장치(CPU)(102), GPU(104), 2차 처리 장치의 예로서 DSP(108), 디스플레이 장치(124) 및 메모리 모듈(116), 예를 들어 랜덤 액세스 메모리(RAM) 메모리 모듈 또는 모듈들을 포함한다. 컴퓨팅 디바이스(100)의 컴포넌트들, 예를 들어 CPU(102), GPU(104), DSP(108) 및 메모리 모듈(116)은 버스(106)를 이용하여 통신할 수 있고, 이러한 버스는 현재 공지되거나 이후에 발견되는 임의의 유형의 버스 또는 디바이스 상호접속부를 포함할 수 있다. CPU(102)는 범용 또는 전용 마이크로프로세서를 포함할 수 있다. 예를 들어 CPU(102)는, 세계적으로 CA의 Irvine을 포함하는 다양한 장소들에 사무실들을 갖고 있는 ARM Inc.(모회사는 UK 캠브리지의 ARM 홀딩스 PLC임)에 의해 설계된 RISC(reduced instruction set computer) 프로세서를 포함할 수 있다. 추가적인 비-제한적 예로서, CPU(102)는 캘리포니아 산타클라라의 인텔 Co. 에 의해 제공되는 코어 2 프로세서 또는 다른 유형의 마이크로프로세서를 포함할 수 있다. GPU(104)는 전용화된 그래픽 컴퓨팅 디바이스이다. GPU(104)는 예를 들어 CA의 Sunnyvale의 AMD에 의해 제공되는 이미지온(Imageon) 미디어 코-프로세서 또는 다른 유형의 그래픽 처리 장치일 수 있다. GPU(104)는 컴퓨팅 디바이스(100)의 마더보드로 통합될 수 있거나, 컴퓨팅 디바이스(100)의 마더보드 내의 포트에 설치되는 그래픽 카드상에 존재할 수 있거나, 또는 예를 들어 컴퓨팅 디바이스(100)와 상호동작하도록 다른 방식으로 구성될 수 있다.
컴퓨팅 디바이스(100)에 연결되는 디스플레이 장치(124)는 예를 들어 모니터, 텔레비젼, 프로젝션 디바이스, LCD, PDP, LED(light emitting diode) 어레이, CRT 디스플레이, 전자 종이, 표면전도 전자방출 디스플레이(SED), 레이저 텔레비젼 디스플레이, 나노결정 디스플레이, 또는 다른 유형의 디스플레이 장치를 포함할 수 있다. 도 1의 예에서, 디스플레이 장치(124)는 컴퓨팅 디바이스(100)의 일부일 수 있다. 예를 들어, 디스플레이 장치(124)는 이동 전화의 스크린일 수 있다. 대안적으로, 디스플레이 장치(124)는 컴퓨팅 디바이스(100)의 외부에 있을 수 있고 예를 들어 유선 또는 무선 통신 연결 또는 다른 연결을 통해 컴퓨팅 디바이스(100)와 통신할 수 있다. 비-제한적인 예로서, 디스플레이 장치(124)는 유선 또는 무선 연결을 통해 개인용 컴퓨터에 연결되는 컴퓨터 모니터 또는 플랫 패널 디스플레이일 수 있다.
소프트웨어 애플리케이션(110)은 CPU(102)를 통해 실행될 수 있는 임의의 소프트웨어 애플리케이션, 예를 들어 비-제한적인 예들로서 비디오 게임, 그래픽 사용자 인터페이스 엔진, 엔지니어링 또는 예술적 응용들을 위한 컴퓨터-지원 설계(CAD) 프로그램, 또는 2차원(2D) 또는 3차원(3D) 그래픽을 이용하는 다른 유형의 소프트웨어 애플리케이션을 포함할 수 있다. CPU(102)가 소프트웨어 애플리케이션(110)을 실행하고 있을 때, 소프트웨어 애플리케이션(110)은 그래픽 처리 API(Application programming interface)(112)의 서브루틴들, 예를 들어 비-제한적인 예들로서 OpenVG API, 및 OpenGL API, Direct3D API, 그래픽 디바이스 인터페이스(GDI), Quartz, QuickDraw, 또는 임의의 유형의 2D 또는 3D 그래픽 처리 API 중 임의의 하나 이상을 호출(invoke)할 수 있다.
적어도 하나의 실시예에 따라 소프트웨어 애플리케이션(110)이 그래픽 처리 API(112)의 서브루틴을 호출할 때, 그래픽 처리 API(112)는 GPU 드라이버(114)의 하나 이상의 서브루틴들을 호출하고, 이러한 서브루틴들은 컴퓨팅 디바이스(100) 상에서 CPU(102)를 통해 실행된다. GPU 드라이버(114)는, 예를 들어 그래픽 처리 API(112) 및 GPU(104) 사이에 인터페이스를 제공하는 소프트웨어 및/또는 펌웨어 명령들의 세트를 포함할 수 있다. 그래픽 처리 API(112)는 GPU 드라이버(114)의 서브루틴을 호출하고, GPU 드라이버(114)는 GPU(104)로 하여금 디스플레이가능한 그래픽 정보를 생성하도록 하는 명령을 포뮬레이팅하고 발(issue)한다. 예를 들어, 그래픽 처리 API(112)가 그래픽 프리미티브들의 배치를 드로우, 또는 렌더링하기 위해 GPU 드라이버(114)의 서브루틴을 호출할 때, GPU 드라이버(114)는 GPU(104)로 처리 구성을 제공하고, GPU(104)는 그래픽 프리미티브들의 배치를 렌더링하기 위해 이것을 이용한다. GPU(104)는 그래픽 프리미티브들의 배치를 렌더링하고, 예를 들어 그래픽 프리미티브들의 래스터(raster) 이미지를 출력한다.
GPU 드라이버(114)에 의해 포뮬레이팅되는 명령은, GPU(104)가 명령을 수행하기 위해 이용할 그래픽 처리 구성(들)을 식별할 수 있고, 이러한 구성(들)은 GPU(104)에 의해 실행될 명령들의 세트, 상태 레지스터 값들의 세트, 및 GPU(104)가 명령을 실행하기 위해 필요로 할 수 있는 다른 유형의 정보를 식별할 수 있다.
GPU 드라이버(114)가 메모리(116)에 그래픽 처리 구성(들)을 저장하는 경우, GPU 드라이버(114)는 GPU 드라이버(114)에 의해 포뮬레이팅되는 명령에서 그래픽 처리 구성(들)에 대응하는 메모리 모듈(116) 내의 저장 위치들을 참조할 수 있다. GPU(104)가 명령을 수신할 때, GPU(104)는 GPU 드라이버(114)로부터 수신되는 명령에서 참조되는 그래픽 처리 구성(들)을 메모리(116)로부터 리트리빙할 수 있다.
적어도 일 실시예에 따라, GPU(104)의 명령 디코더(미도시)는 GPU 드라이버(114)로부터의 명령을 디코딩하고 데이터, 가령 메모리(116)로부터 리트리빙되는 위치, 컬러, 텍스쳐, 등의 데이터를 이용하여 명령을 수행하기 위해 GPU(104)의 처리 엘리먼트들 중 하나 이상을 구성한다.
하나 이상의 실시예들에 따라, GPU(104)의 처리 엘리먼트들, 또는 모듈들은 그래픽 파이프라인을 구현한다. 이러한 실시예들에 따라, GPU(104)의 처리 엘리먼트들은 그래픽 파이프라인을 병렬 모드로 구현할 수 있어, 하나의 처리 엘리먼트로부터의 출력이 다른 처리 엘리먼트로의 입력으로 이용되면서 처리 엘리먼트들이 데이터에 관하여 병렬로 연산하게 된다. 비-제한적인 예로서, 제 1 처리 엘리먼트는 최초 입력 데이터의 제 1 세트에 관하여 제 1 그래픽 연산을 수행하고 제 2 처리 엘리먼트로 중간 결과들의 제 1 세트를 출력한다. 최초 입력 데이터는 하나 이상의 정점들에 대응하는 데이터를 포함할 수 있고, 이러한 데이터는 예를 들어 좌표 및 속성 데이터를 포함할 수 있다. 정점 좌표들은 예를 들어 X, Y 및 Z(폭, 높이 및 깊이)를 갖는 4차원 좌표 시스템에 기초하여 이미지 내의 위치를 식별하고, W 좌표는 동질(homogenous) 좌표를 형성한다. 정점 속성들은 예를 들어 정점과 연관된 컬러, 노멀, 및 텍스쳐 좌표들을 포함할 수 있다. 2차 처리 엘리먼트는 제 1 처리 엘리먼트에 의해 출력된 중간 결과들의 제 1 세트에 관하여 또 다른 그래픽 연산을 수행할 수 있고, 제 3 처리 엘리먼트로 중간 결과들의 제 2 세트를 출력 등을 할 수 있다. 제 2 처리 엘리먼트가 제 2 그래픽 연산을 수행하고 있는 동안, 제 1 처리 엘리먼트는 최초 입력 데이터의 제 2 세트에 관하여 제 1 그래픽 연산을 수행하고 있을 수 있다.
GPU(104) 및 그것의 처리 엘리먼트들은, 마지막 처리 엘리먼트가 메모리 모듈(116) 내의 하나 이상의 버퍼들로 픽셀 오브젝트를 출력하거나 어떤 다른 목적지로 이러한 새로운 픽셀 오브젝트를 출력할 때까지, 이러한 방식으로 계속할 수 있다. 픽셀 오브젝트는 픽셀을 기술하는 데이터이다. 각각의 픽셀 오브젝트는 다수의 컬러 값들을 특정할 수 있고, 픽셀의 투명 레벨을 특정할 수 있다. 몇몇 상황들에서, 픽셀 오브젝트는 제 1 컬러 포맷으로 제 1 컬러를, 제 2 컬러 포맷으로 제 2 컬러를 특정할 수 있다.
본 개시내용의 하나 이상의 실시예들에 따라, GPU(104)의 처리 모듈들은 GPU(104)에 의해 실행되는 소프트웨어를 포함할 수 있고, 전용화된 하드웨어 모듈들 및/또는 프로그램가능한 처리 모듈들이 GPU(104)의 처리 모듈들 중 하나 이상을 수행하도록 구성된다. GPU(104)의 처리 모듈들은 그래픽 파이프라인을 구현하고, 이러한 파이프라인은 예를 들어 정점 쉐이더, 프리미티브 어셈블리, 뷰포인트 변환, 프리미티브 셋업, 래스터화, 히든 프리미티브 및 픽셀 리젝션, 속성 셋업, 속성 보간 및 프래그먼트 쉐이더 스테이지들을 포함할 수 있다.
본 발명의 실시예들은 그래픽 파이프라인에서 이용되는 데이터에 관하여 연산하기 위해 DSP(108) 또는 다른 2차 프로세서에 2차 용도를 할당할 수 있다. 하나 이상의 실시예들에 따라, 이러한 2차 용도는 2차 프로세서의 1차 용도와는 상이하다. 예를 들어, DSP(108)는 오디오 및 비디오 데이터를 처리하기 위해 이용될 수 있고, 그래픽 파이프라인 데이터에 관하여 연산하는 하나 이상의 라이팅(lighting) 모듈들을 구현하기 위해 더 이용될 수 있다. 그런 가운데, 2차 프로세서는 그래픽 파이프라인을 구현하기 위해 다른 식으로 이용되는 리소스들을 보완(supplement)할 수 있다.
본 개시내용의 실시예들에 따라, 2차 프로세서는 그것의 1차 목적(들)을 위해 이용되지 않고 있다고 결정될 때, 2차 프로세서가 이용된다. 예를 들어, DSP(108)가 유휴 상태, 즉 오디오 또는 비디오 데이터를 처리하고 있지 않다고 결정되는 경우, 그래픽 파이프라인과 함께 2차 프로세서로서 이용되기 위해 DSP(108)를 할당하라는 요청이 이루어진다. 이러한 경우, DSP(108)는 어떤 형태의 2차 처리, 예를 들어 그래픽 파이프라인 데이터에 관한 라이팅, 또는 다른 처리, 가령 스키닝(skinning) 등을 수행하기 위해 이용될 수 있다.
도 2는 본 개시내용의 하나 이상의 실시예들에 따라 이용되는 컴포넌트들 및 컴포넌트간(inter-component) 통신을 포함하는 블록 다이어그램을 도시한다. 2차 처리 관리 모듈(SPMM), 또는 2차 처리 관리자(202)는 하나 이상의 2차 처리 인터페이스 모듈들(SPIMs)과 조합하여 2차 처리를 관리한다. 하나 이상의 실시예들에 따라, SPMM 및 SPIM 모듈들은 별개의 모듈들이다. 대안적으로, SPMM 및 SPIM 모듈들 중 하나 이상은 단일한 모듈을 형성하도록 결합된다. 또 다른 대안으로서, SPMM 및 SPIM 모듈들 중 하나 이상은 다른 프로그램 코드와 통합될 수 있다. 비-제한적인 예로서, SPIM은 2차 처리를 실행하는 프로그램 코드와 통합될 수 있고/있거나 SPIM은 그래픽 파이프라인의 모듈을 실행하는 프로그램 코드와 통합될 수 있다. SPMM(202)은 2차 프로세서를 이용하는 것이 가능한지 여부를 결정하고, 하나 이상의 명령들을 포함하는 명령 스트림을 2차 프로세서에 제공하며, 2차 프로세서에 의해 연산되는 그래픽 파이프라인 데이터가 그래픽 파이프라인에 의해 처리되는 데이터로 통합되면서, 하나 이상의 그래픽 파이프라인 처리 모듈들과 2차 처리에 의한 데이터 액세스를 동기화한다.
도 2에 도시된 예에서, DSP(108)는 2차 프로세서로 이용되고 있다. 임의의 처리 장치가 본 개시내용의 하나 이상의 실시예들에 따라 2차 프로세서로 이용될 수 있음이 명백해야 한다. SPMM(202)은 애플리케이션(110)이 드로우 콜을 발할 때 통지(220)를 수신한다. SPMM(202)은 드로우 콜, 및 애플리케이션(110)에 의해 제공되는 연관된 정보를 분석하여, 드로우 콜의 처리가 2차 프로세서에 의해 수행될 수 있는 처리를 포함하는지 여부를 결정한다. 예를 들어 SPMM(202)은, 드로우 콜의 처리가 컬러 데이터에 대한 하나 이상의 라이팅 모델들의 적용을 포함하는지 여부를 결정한다. 또 다른 비-제한적인 예로서, SPMM(202)은 스키닝이 적용되어야 하는지 여부를 결정하기 위해 드로우 콜을 검사(examine)할 수 있다.
처리가 2차 프로세서에 의해 수행될 수 있다고 SPMM(202)이 결정하는 경우, SPMM(202)은 2차 처리를 위해 2차 프로세서를 할당하려고 시도한다. 예를 들어, SPMM(202)은 DSP(108)에게 요청하기 위해 DSP(108)의 실시간 운영 체계(RTOS)(206)와 통신한다(222). 통신(222)은, DSP(108)가 이용가능한지 여부, 예를 들어 SPMM(202)의 할당 요청이 성공적이었는지 여부를 SPMM(202)에 통지하기 위해 RTOS(206)에 의해 이용되는 콜 백(call back)을 포함한다. DSP(108)가 이용가능하다고, 예를 들어 그것의 1차 목적을 위해 이용되고 있지 않다고 RTOS(206)가 결정하는 경우, RTOS(206)는 DSP 모듈(208)을 로딩하고, 이러한 모듈은 2차 처리 모듈(208B) 및 2차 처리 인터페이스 모듈(SPMM)(208A)을 포함한다.
2차 처리 모듈(208B)은 2차 처리를 수행하기 위해 이용되는 프로그램 코드를 포함한다. SPIM(208A)은, 통신 경로(228)를 통해 메모리 모듈(116) 내의 피드백 메모리 영역(216A)에 피드백을 제공하는 것과 같이, SPMM(202)와 인터페이싱하도록 구성되는 프로그램 코드를 포함한다. SPMM(202)은 통신 경로(226)를 통해, 피드백 영역(216A), 입력 데이터 및 출력 데이터의 저장 위치, 가령 데이터 버퍼들(216C) 내의 위치들을 식별하는 정보를 SPIM(208A)에 제공한다. 부가적으로, SPIM(208A)은 2차 처리, 예를 들어 라이팅을 수행하기 위해 처리 모듈(208B)에 의해 이용될 수 있는 정보를 처리 모듈(208B)로 제공한다.
하나 이상의 실시예들에 따라, SPMM(202)은 통신 경로(226)를 이용하여, 명령들의 스트림 또는 명령 스트림이라 지칭되는, 그리고 처리 모듈(208B)에 의해 이용되는 명령들의 세트와 관련된 정보를 제공한다. 하나 이상의 이러한 실시예들에 따라, SPMM(202)은 SPIM(208A)로 최초 메시지를 통신하고, 이러한 메시지는 메모리 모듈(116)의 명령 스트림 영역(216B)에 저장된 명령 스트림의 제 1 명령으로의 포인터, 및 메모리 모듈(116) 내의 피드백 영역(216A)으로의 포인터를 포함한다. 간단히, 명령 스트림 내의 명령은 데이터 버퍼(들)(216C) 내의 입력 및 출력 데이터의 위치, 피드백(216A)의 위치, 스트림 내의 다음 명령으로의 포인터 또는 현재 명령이 마지막 명령이라는 표시를 식별하기 위한 정보, 및 DSP 모듈(208)이 라이팅을 수행하는 경우 이용되는 라이팅 모델들과 같은 다른 정보를 포함한다. 명령의 내용들은 아래에서 보다 상세히 기술된다.
SPMM(202)은 통신 경로(224)를 통해 명령 스트림(216B)으로 각각의 명령을 로딩하고 통신 경로(226)를 통해 명령 스트림(216B) 내의 제 1 명령으로의 포인터를 SPIM(208A)으로 포워딩하고 SPMM(202)에 의해 전송된 최초 메시지를 SPIM(208A)으로 포워딩한다. 그 후, SPIM(208A)은 명령 스트림(216B)에서 다음 명령의 위치를 찾기 위해, 또는 제 1/현재의 명령을 마지막 명령으로 식별하기 위해, 제 1 또는 현재의 명령에 포함된 정보를 이용한다. SPIM(208A)은, 명령 스트림 내의 주어진 명령에 포함된 정보 및 통신 경로(226)를 통해 SPMM(202)에 의해 제공된 최초 정보에 기초하여 피드백(216A), 명령 스트림(216B) 및/또는 데이터 버퍼(들)(216C)에 액세스할 수 있다. SPIM(208A) 및 처리 모듈(208B)을 포함하는 DSP 모듈(208)은 예를 들어 통신 경로(228)를 통해 메모리(116) 중 하나 이상의 영역들에 액세스할 수 있다.
데이터 버퍼(들)(216C)에 포함된 데이터는 처리 모듈(208B) 및 그래픽 파이프라인 처리 모듈들(218) 양자 모두에 의해 이용된다. 모듈(208B) 및 모듈들(218) 중 적어도 하나 사이에 적어도 하나의 데이터 의존성(dependency)이 있는 경우, SPMM(202)은 피드백(216A)에 저장된 SPIM(208A)에 의해 제공된 정보 및 SPIM(214)에 의해 제공된 정보에 기초하여 모듈들(208B 및 218)에 의한 데이터 액세스를 동기화하고, 이것은 그래픽 파이프라인 처리 모듈(들)(218)과 함께 동작한다. 예를 들어, SPMM(202)은 피드백(216A) 내의 정보를 이용하여, 하나 이상의 그래픽 파이프라인 처리 모듈들(218)에 의한 처리를 위해 라이팅된 컬러 데이터가 이용가능함을 SPIM(214)에게 통지할 수 있다. 추가적인 비-제한적 예로서, 일단 클리핑 모듈이 필요로 하는 모든 프리미티브들에 대응하는 컬러 데이터가 처리 모듈(208B)에 의해 처리되었다고 SPMM(202)이 결정하면, 라이팅된 컬러 데이터는 그래픽 파이프라인 처리 모듈(들)(218)의 클리핑(clipping) 모듈에 이용가능하게 될 수 있다. SPMM(202) 및 SPIM(214)은 통신 경로(232)를 통해 통신, 예를 들어 그래픽 파이프라인 처리 모듈(들)(218) 중 하나 이상이 데이터를 처리할 준비가 되어 있음을 SPIM(214)이 SPMM(202)에게 통지하고/하거나, 데이터가 그래픽 파이프라인 처리 모듈(들)(218)에 의해 처리되기 위해 이용가능하다는 점을 SPMM(202)이 SPIM(214)에게 통지할 수 있다.
부가적으로, SPMM(202)은 피드백 영역(216A) 내의 정보를 이용하여, 명령 스트림(216B) 내의 영역이 명령 스트림 내의 새로운 명령으로 중첩기록(overwrite)될 수 있는 시기를 결정할 수 있다. 비-제한적인 예로서, 피드백(216A)은 2차 처리 모듈(208B)에 의해 완료된 가장 최근의 명령을 식별하는 정보를 포함한다. 2차 처리 모듈(208B)이 명령 스트림(216B) 내의 명령에 더 이상 액세스하고 있지 않고, 명령이 더 이상 필요하지 않다고 SPMM(202)이 결정하는 경우, SPMM(202)은 명령 스트림 내의 새로운 명령에 대해 영역을 이용하기로 선택할 수 있다. 그래픽 파이프라인이 명령에 대응하는 그래픽 파이프라인 데이터를 처리하는 것을 마친 경우 SPMM(202)은 명령이 더 이상 필요하지 않다고 결정할 수 있다.
하나 이상의 실시예들에 따라, SPMM(202), SPIM(208A) 및 SPIM(214)은 하나 이상의 처리 장치들, 또는 프로세서들에 실행되는 프로그램 코드를 포함한다. 이러한 처리 장치들은 CPU(103), DSP(108) 및 GPU(104)를 포함할 수 있지만, 이에 제한되는 것은 아니다. 비-제한적인 예로서, SPMM(202) 및 SPIM(214)은 CPU(103)에 의해 실행되는 프로그램 코드를 포함하고, SPIM(208A)은 DSP(108)에 의해 실행되는 프로그램 코드를 포함한다. 추가적인 비-제한적 예로서, SPMM(202)의 프로그램 코드는 CPU(103)에 의해 실행되고, SPIM(214)은 GPU(104)에 의해 실행되는 프로그램 코드를 포함하고 SPIM(208A)은 DSP(108)에 의해 실행되는 프로그램 코드를 포함한다. 그러나, 임의의 하나 이상의 처리 장치들이 SPMM(202), SPIM(208A) 및 SPIM(214)의 프로그램 코드를 구현하기 위해 이용될 수 있음이 명백해야 한다. 추가적인 비-제한적인 예로서, 통신 경로들(220, 222, 224, 226, 228, 230 및 232) 및/또는 SPMM(202), RTOS(206), SPIM(208A) 및 처리 모듈(208B)을 포함하는 DSP 모듈(208), 메모리 모듈(116), SPIM(214) 및 그래픽 파이프라인 처리 모듈(들)(218) 간의 통신을 용이하게 하기 위해 버스(106)가 이용될 수 있다. 통신 경로(230)는 예를 들어, 데이터 버퍼(들)에 저장된 그래픽 파이프라인 데이터에 액세스하기 위해 그래픽 파이프라인 처리 모듈들(218) 중 하나 이상에 의해 이용될 수 있다.
도 3a 및 도 3b를 포함하는 도 3은 본 개시내용의 하나 이상의 실시예들에 따라 SPMM(202)을 구현하는 프로그램 코드 프로세스 흐름을 도시한다. 단계(302)에서, SPMM(202)은 드로우 콜, 예를 들어 그래픽 API(112)에 대해 애플리케이션(110)에 의해 이루어진 콜을 수신한다. SPMM(202)은 단계(304)에서 2차 처리를 이용할 수 있는 기회를 식별하기 위해 드로우 콜을 검사한다. 예를 들어, 하나 이상의 라이팅 모델들이 컬러 데이터에 적용되도록 애플리케이션(110)이 요청하는지 여부를 식별하기 위해 SPMM(202)은 드로우 콜을 검사할 수 있다. 단계(306)에서 드로우 콜의 검사로부터 어떠한 2차 처리 기회도 존재하지 않는다고 SPMM(202)이 결정하는 경우, 처리는 계속되어 단계(312)에서 그래픽 파이프라인, 가령 SPIM(214)에게 어떠한 2차 처리도 존재하지 않음을 통지한다. 이러한 통지는, 예를 들어 데이터 버퍼(들)(216C)에 저장된 데이터에 대한 그래픽 파이프라인 처리 모듈(들)(218)에 의한 액세스를, SPIM(214)이 조정(coordinate)해야 할 필요를 제거한다.
단계(306)에서 2차 처리를 이용할 수 있는 기회가 존재한다고 SPMM(202)이 결정하는 경우, 처리는 계속되어 단계(308)에서 SPMM(202)이 2차 프로세서를 요청하게 된다. 예를 들어, SPMM(202)은 DSP 모듈(208)을 로딩하기 위해 요청을 DSP(108)의 RTOS(206)로 전송하고, SPMM(202)의 요청이 성공적이었는지 또는 실패했는지 여부를 SPMM(202)에게 통지하기 위해 RTOS(206)에 대해 콜 백을 제공한다. 단계(310)에서 이러한 요청이 실패했음을 RTOS(206)가 SPMM(202)에게 통지한다고 결정되는 경우, 처리는 계속되어 단계(312)에서 어떠한 2차 처리도 존재하지 않음을 그래픽 파이프라인에게 통지한다. 이러한 경우에 그리고 하나 이상의 실시예들에 따라 SPMM(202)은 CPU(102)에게 라이팅을 수행하라고 통지할 수 있다.
2차 프로세서에 대한 요청이 성공적이었음을 RTOS(206)가 SPMM(202)에게 통지하는 경우, 처리는 도 3b의 단계(322)로 계속된다. 단계(322)에서, SPMM(202)은 명령 스트림 내의 제 1 명령을 준비하고 명령 스트림(216B)에 제 1 명령을 저장한다. 하나 이상의 실시예들에 따라, SPMM(202)은 2차 프로세서로 명령 스트림을 통신하기 위해 링크된 목록 접근법(linked list approach)을 이용한다. 비-제한적인 예로서, 각각의 명령은 다음 명령으로의 포인터를 포함한다. 추가적으로 비-제한적인 예로서, 명령은 명령 스트림 내의 이전 명령으로의 포인터와 같은, 명령 스트림 내의 임의의 명령으로의 포인터를 포함할 수 있다. 현재의 명령이 마지막 명령인 경우, 다음 명령으로의 포인터는 현재 명령을 마지막 명령으로 식별하는 값, 예를 들어 0xFFFFFFFF의 16진수 값을 포함한다.
하나 이상의 실시예들에 따라 SPMM(202)은, 그것이 명령 스트림(216B)에 명령을 저장할 때 추가적인 명령들이 존재할 수 있는지 여부를 인지하지 못할 수 있다. 이러한 경우, SPMM(202)은 추가적인 명령들이 존재할 수 있음을 SPIM(208A)에게 통지하기 위해 링크된 목록에서 다음 명령으로의 포인터로서 0의 값을 저장한다. 모듈(208B)이 현재의 명령과 연관된 처리를 완료하는 경우 SPIM(208A)은, 만약 존재한다면, 명령 스트림(216B)에서 다음 명령의 위치를 찾기 위해 방금 완료된 명령에서 포인터를 살핀다. 이러한 포인터가 0의 값으로 설정되는 경우, SPIM(208A)은 SPMM(202)이 아직 포인터를 업데이트하지 않았음을 인지한다. 이러한 경우 SPIM(208A)은, SPMM(202)이 포인터를 업데이트하였는지 여부를 확인하기 위해 포인터를 체크하기 전에 시간 기간을 대기할 수 있다. 이러한 포인터가 0이 아닌 값을 가지는 경우, 이러한 값이 명령 스트림(216B) 내의 다음 명령으로 포인팅하고 있는지, 또는 완료된 명령이 명령 스트림 내의 마지막 명령임을 표시하고 있는지 여부를 결정하기 위해 SPIM(208A)은 이러한 값을 검사한다. 후자의 경우 SPMM(202)은, 현재의 명령 스트림에서 처리할 더 이상의 명령들이 없음을 SPIM(208A)에게 통지하기 위해 포인터에 값, 가령 0xFFFFFFFF의 16진수 값을 저장할 수 있고, DSP(108)는 그것의 1차, 또는 다른 처리를 수행하기 위해 이용될 수 있다.
단계(324)에서, SPMM(202)은 제 1 명령에 대응하는 정보를 포함하는 최초 메시지를 2차 프로세서로 전송한다. SPIM(208A)으로 SPMM(202)에 의해 전송되는 메시지는 제 1 명령에 대응하는 정보를 가진다. SPMM(202)에 의해 전송되는 메시지는 2차 프로세서에게 그것이 처리를 시작할 수 있음을 통지하고, 제 1 명령의 위치를 찾기 위한 정보를 제공한다. 본 개시내용의 하나 이상의 실시예들에 따라, 그리고 도 7을 참조하여, 최초 메시지(700)는 명령 스트림 메모리(216B) 내의 명령으로의 포인터(702), 명령 스트림 메모리(216B) 내의 명령의 저장 영역의 크기를 식별하는 정보(704), 및 메모리 모듈(216)의 피드백(216A) 저장 영역으로의 포인터(706)를 포함한다. 도 3B를 다시 참조하면, 단계(324)에서 명령 스트림 내의 제 1 명령에 대해 2차 프로세서에게 통지하는 메시지를 SPMM(202)이 전송한 후, SPMM(202)의 처리는 계속되어 단계(326)에서 명령 스트림 내에 추가적인 명령들이 있는지 여부를 결정한다.
단계(326)에서 현재의 드로우 콜에 대해 생성되어야 할 적어도 하나의 추가적인 명령이 있다고 SPMM(202)이 결정하는 경우, 처리는 단계(328)로 계속된다. 단계(328)에서 SPMM(202)은 새로운 명령을 준비하고 명령 스트림(216B)에 새로운 명령을 저장한다. 단계(330)에서 SPMM(202)은 명령 스트림 내의 직전 명령, 가령 제 1 명령 내의 포인터를, 명령 스트림(216B) 내의 새로운 명령으로 포인팅하도록, 예를 들어 새로운 명령이 저장될 명령 스트림(216B) 내의 위치로 포인팅하도록 설정한다. 제 1 명령과 마찬가지로, 새로운 명령 및 임의의 계속되는 명령은 다음 명령으로 포인팅하는 포인터(다음 명령이 SPMM(202)에 의해 생성되는 경우), 또는 새로운 명령이 마지막 명령임을 나타내는 표시자(어떠한 다음 명령도 없는 경우)를 포함한다. 하나 이상의 실시예들에 따라, 최초 메시지가 2차 프로세서로 전송된 후, SPMM(202) 및 2차 프로세서의 처리 모듈, 가령 DSP 모듈(208)은 명령 스트림(216B) 및 피드백(216A)을 통하여 통신한다. 그런 가운데, 2개의 처리 모듈들 간에 메시지들을 전송할 필요가 없기 때문에, 오버헤드가 최소화될 수 있다. DSP 모듈(208)은 데이터를 처리하기 위해 명령 스트림(216B) 내의 명령들의 링크된 목록을 탐색(navigate)하고, 메모리 모듈(216)의 피드백(216A)에 상태 정보를 기록함으로써 SPMM으로 피드백을 제공한다. 하나 이상의 실시예들에 따라 DSP 모듈(208)은 SPMM(202) 및 그래픽 파이프라인 처리 모듈들(218)에 대해 비동기적이고 독립적으로 동작한다.
일단 SPMM(202)이 새로운 명령으로 포인팅하도록 이전 명령 내의 포인터를 업데이트하면, 처리는 계속되어 단계(326)에서 어떠한 추가적인 명령들이 생성되지 않은 채 남아있는지 여부를 결정한다. 만약 그렇지 않다면, 처리는 계속되어 단계(332)에서, 명령이 현재의 명령 스트림(216B) 내의 마지막 명령임을 SPIM(208A)에게 통지하기 위해, 마지막 명령에 포함된 포인터를 값, 가령 0xFFFFFFFF의 16진수 값으로 업데이트하고, 처리는 현재의 드로우 콜에 대해 종료된다. 추가적인 드로우 콜들이 존재하는 경우, 처리는 계속되어 단계(322)에서 또 다른 드로우 콜과 관련되는 명령 스트림을 준비한다.
SPIM(208A)은 SPMM(202) 및 처리 모듈(208B) 간의 인터페이스를 제공한다. 하나 이상의 실시예들에 따라 SPIM(208A)은 SPMM(202)에 의해 생성되는 명령 스트림에 대응하는 정보를 수신하고, 처리 모듈(208B)에 의해 수행되는 처리를 용이하게 하며, 처리 모듈(208B)의 처리 상태를 모니터링하고, 처리 모듈(208B)의 처리에 대한 피드백을 제공한다. 도 4는 본 개시내용의 하나 이상의 실시예들에 따라 SPIM(208A)을 구현하는 프로그램 코드 프로세스 흐름을 도시한다.
단계(402)에서, SPIM(208A)은 SPMM(202)으로부터 초기화 메시지를 수신한다. 비-제한적인 예로서, SPIM(208A)은 초기화 메시지(700)를 수신하고, 이러한 메시지는 제 1 명령에 대응하는 명령 스트림(216B) 내의 위치로의 포인터, 제 1 명령의 크기, 가령 바이트 단위로의 크기를 식별하기 위한 정보(704), 및 피드백(216A) 영역 내의 위치로의 포인터(706)를 포함한다. 단계(404)에서 SPIM(208A)은, 명령 스트림(216B)에서 제 1 명령의 위치를 찾기 위해, 그리고 현재의 명령이 마지막 명령인지 여부를 식별하기 위해서 메시지(700) 내의 정보를 이용한다.
단계(406)에서 SPIM(208A)은 현재의 명령에 포함된 정보를 처리 모듈(208B)에 이용가능하게 한다. 예를 들어, 위치 정보, 가령 포인터들 및 크기 정보는, 데이터 버퍼(들)(216C) 내의 데이터에 액세스, 가령 로딩 및/또는 저장하기 위한 데이터 이동 동작을 시작하는데 이용된다. 부가적으로 이러한 명령은, 제 1 정점과 연관된 입력 컬러 데이터로의 포인터와 같은, 데이터 버퍼(들)(216C) 내의 컬러 데이터의 위치, 및 다음 정점에 대한 컬러 데이터의 위치를 찾기 위해 포인터에 추가되는 증가분(increment)을 포함할 수 있다. 현재의 명령은 제 1 정점에 연관된 데이터 버퍼(들)(216C)에서 출력 버퍼 내의 위치로의 포인터뿐만 아니라, 다음 정점과 연관된 컬러 데이터에 대한 출력 위치를 찾기 위한 증가분을 더 포함할 수 있다. 추가적인 비-제한적 예로서, 처리 모듈(208B)이 라이팅을 수행하는 경우, 현재의 명령은 하나 이상의 라이팅 모델들을 포함할 수 있다. 또 다른 비-제한적인 예로서, 처리 모듈(208B)이 스키닝을 수행하는 경우, 명령은 스키닝 매트릭스들(skinning matrices)을 포함할 수 있다. 하나 이상의 실시예들에 따라 제 1 명령은, 이전 명령에서 특정된 라이팅 모델들 또는 스키닝 매트릭스들에 있어서 임의의 변화들을 식별하는 이후의 명령들을, 라이팅 모델들의 완전한 세트, 또는 스키닝 매트릭스들에 제공한다.
단계(408)에서, SPIM(208A)은 처리 모듈(208B)의 진행을 모니터링하고, 단계(410)에서 처리 모듈(208B)에 의해 수행되는 처리의 상태를 식별하는 정보를 이용하여 피드백(216A) 내의 정보를 업데이트한다. 도 8은 본 개시내용의 하나 이상의 실시예들에 따라 피드백(216A)에 저장될 수 있는 정보의 예를 제공한다. 하나 이상의 이러한 실시예들에 따라, 각각의 명령은 정점들의 한정된 세트를 식별하고, 일단 처리 모듈(208B)이 명령에 의해 식별되는 정점들과 연관된 정점 데이터를 처리하면 명령은 완료된 것으로 간주된다. 피드백(216A)은 처리 모듈(208B)에 의해 완료된 마지막 명령을 식별하기 위한 정보, 예를 들어 마지막 명령 식별자(ID)(802), 및 명령 스트림(216B) 내의 명령으로의 포인터(804)를 포함할 수 있다.
도 4를 다시 참조하면, SPIM(208A)은 계속하여 단계(404)에서 현재의 명령 내의 정보를 이용하여, 처리에 이용되는 데이터를 처리 모듈(208B)에 이용가능하게 하고, 그리고 2차 처리의 상태를 이용하여 피드백(216A)을 업데이트한다.
위에서 논의된 것처럼 그리고 하나 이상의 실시예들에 따라, 2차 프로세서는 SPMM(202) 및 그래픽 파이프라인 처리 모듈들(218)과 비동기적이고 독립적으로 동작한다. 그러나 적어도 하나의 경우에서, 2차 처리, 가령 DSP 모듈(208)에 의해 수행되는 처리는 그래픽 파이프라인 처리 모듈들(218)에 의해 수행되는 처리와 동기화되어, 2차 프로세서에 의해 처리되는, 그리고 그래픽 파이프라인 처리 모듈(218)에 의해 더 처리되어야 할 데이터가 동기화된다. 이러한 예에서, 모듈들(218)이 2차 프로세서에 의해 처리된 데이터를 이용하도록 그래픽 파이프라인 처리 모듈들(218)에 의한 데이터 액세스를 관리하기 위해, SPMM(202)은 그래픽 파이프라인 처리 모듈들(218) 및 SPMM(202) 간의 인터페이스를 제공할 수 있는 SPIM(214)과 함께 동작한다. 하나 이상의 실시예들에 따라 SPMM(202) 및 SPIM(214)은 단일한 모듈을 포함할 수 있다.
도 5는 본 개시내용의 하나 이상의 실시예들에 따라 이용하기 위한 동기화 프로그램 코드 프로세스 흐름을 도시한다. 하나 이상의 실시예들에 따라, 그래픽 파이프라인 및 GPU(104)는, 각각이 정점들의 세트를 갖는 프리미티브들의 블록에 관하여 연산한다. 예를 들어 프리미티브가 삼각형(triangle)을 포함하는 경우, 각각의 프리미티브가 3개의 정점들의 연관된 세트를 갖는다. 프리미티브들의 블록은 프리미티브들의 목록 및 그들의 정점들로 표현될 수 있다. 하나 이상의 실시예들에 따라 SPMM(202)은, 주어진 프리미티브 목록 내의 프리미티브들에 대해 2차 처리가 수행되어야 할지 여부를 결정하고, 2차 처리가 프리미티브 목록에서 식별되는 프리미티브들과 함께 이용되는지 여부를 표시하도록 프리미티브 목록 내의 값, 예를 들어 논리 값을 설정한다.
하나 이상의 실시예들에 따라, 프리미티브 목록에서 설정된 값은, 그래픽 파이프라인에 의해 처리될 프리미티브들과 연관된 데이터가 먼저 2차 프로세서에 의해 처리되고 있는지 여부를 결정하기 위해 SPMM(202)에 의해 이용될 수 있다. 단계(502)에서 SPMM(202)은 프리미티브 목록에서 설정된 값에 액세스하고, 단계(504)에서 SPMM(202)은 2차 처리가 이용되고 있는지 여부를 결정한다. 단계(504)에서 2차 처리가 수행되고 있다고 SPMM(202)이 결정하는 경우, SPMM(202)은 2차 프로세서에 의해 처리되는 데이터에 대해 그래픽 파이프라인 처리 모듈들(218)에 의한 액세스를 동기화하여, 데이터가 모듈들(218)에 이용가능하게 되기 전에 2차 프로세서가 그래픽 파이프라인 처리 모듈들(218)에 의해 더 처리되어야 할 데이터에 대해 그것의 처리를 완료하도록 한다.
비-제한적인 예로서, 프리미티브 목록에 저장된 값이 2차 처리가 이용되고 있지 않다고 표시하는 경우, 그래픽 파이프라인 처리 모듈들(218)에 의해 액세스되는 데이터는 2차 처리 모듈(208B)에 의한 데이터 액세스와 동기화될 필요가 없다. 이러한 경우, 그래픽 파이프라인 처리 모듈들(218)은 비-동기화 모드로 동작할 수 있고, 이것은 2차 처리 모듈(208B)에 의한 이러한 정점 데이터의 이용과 정점 데이터에 대한 그래픽 파이프라인 처리 모듈들(218)의 이용 간 데이터 액세스를 동기화하는 것을 포함하지 않는다. 프리미티브 목록에 저장된 값이 2차 처리가 이용되고 있다고 표시하는 경우, 그래픽 파이프라인 처리 모듈들(218)은, 정점 데이터에 대한 모듈들(218)의 액세스와 처리 모듈(208B)의 그것을 동기화하기 위해, 동기화 모드로 동작한다.
데이터 액세스가 동기화되려면, 하나 이상의 실시예들에 따라, SPMM(202)은 단계(506)에서 SPIM(208A)에 의해 제공된 피드백 정보를 이용하여 처리 모듈(208B)의 상태를 결정한다. 하나 이상의 실시예들에 따라 SPIM(208A)은 처리 모듈(208B)에 의해 완료된 마지막 프리미티브를 식별함으로써 처리 모듈(208B)의 처리 상태를 식별하는 정보를 피드백(216A) 내에 저장한다. 하나 이상의 실시예들에 따라, 프리미티브들에 순차적인 식별자가 할당되어, SPMM(202)은 단계(508)에서 그리고 SPIM(208A)에 의해 공급되는 피드백 정보에 기초하여, 그것들의 식별자들이 SPIM(208A)에 의해 공급된 프리미티브 식별자와 동일하거나 그보다 작은 프리미티브들이 처리 모듈(208B)에 의해 완료되었다고 결정할 수 있게 된다. 단계(510)에서, SPIM(214)과 함께, SPMM(202)은 그래픽 처리 모듈들(218)이 처리 모듈(208B)에 의해 처리되었다고 결정되는 프리미티브들과 연관된 데이터 버퍼(들)(216C)에 저장된 데이터에 액세스하도록 허용한다.
도 6a 및 도 6b를 포함하는 도 6은 본 개시내용의 하나 이상의 실시예들에 따라 동기화 예들을 제공한다. 도 6a를 참조하면, 모듈들(604 및 608)은 데이터 버퍼(들)(216C)에 저장된 데이터에 액세스하는 그래픽 파이프라인 처리 모듈들(218)에 대한 예들을 제공한다. 비-동기화 모드에서, 사전-변환 버퍼(602)는 정점 데이터를 저장하고, 이러한 데이터는 위치 데이터, 가령 X, Y, Z 및 W 좌표 데이터, 텍스쳐 데이터 및 컬러 데이터를 포함한다. 사전-변환 버퍼(602)에 저장된 컬러 데이터는 라이팅된 컬러 데이터, 또는 2차 프로세서를 이용하는 것과는 다른 방식으로 라이팅 처리를 거친 컬러 데이터를 포함한다. 이것은 예를 들어, 2차 프로세서, 가령 DSP(108)가 2차 처리를 위해 이용가능하지 않다고 SPMM(202)이 결정하는 경우에 그럴 수 있다. 이러한 경우, CPU(102)는 라이팅을 수행할 수 있고 사전-변환 버퍼(602)에 값들을 저장할 수 있다.
비-동기화 모드에서, 모델 뷰 변환 모듈(604)은 라이팅된 컬러 데이터를 포함하여 정점 데이터를 리트리빙하고, 라이팅된 컬러 데이터 이외의 정점 데이터에 관하여 연산하며 사후-변환 버퍼(606)에 정점 데이터를 저장한다. 비-동기화 모드에서, 모델 뷰 변환 모듈(604)은 다른 정점 데이터와 함께 컬러 데이터를 전송(transfer)하도록 지시된다. 변환 모듈(604)이 컬러 데이터를 수정하지 않더라도, 그것은 사전-변환 버퍼(602)로부터 라이팅된 컬러 데이터를 리트리빙하고, 지시된 대로 사후-변환 버퍼(606)에 라이팅된 컬러 데이터를 저장하여, 컬러 데이터가 그래픽 파이프라인 내의 계속되는 모듈, 가령 뷰포인트(viewpoint) 변환 모듈(608)에 의한 처리를 위해 이용가능하게 된다. 도 6a 에 도시된 예에서, 뷰포인트 변환 모듈(608)은 모델 뷰 변환 모듈(614)에 의해 포워딩되는 라이팅된 컬러 데이터를 리트리빙하기 위해 사후-변환 버퍼(606)에 액세스하고, 그것의 변환 연산(들)에서 라이팅된 컬러 데이터를 이용, 가령 컬러 데이터를 보간(interpolate)한다.
도 6b는 2차-처리 동기화 모드에서 변환 모듈들(604 및 608) 및 버퍼들(602 및 606)을 포함하는 처리를 도시한다. 도 6b에 도시된 예에서, 2차 프로세서(610), 가령 처리 모듈(208B)을 구현하는 DSP(108)는, 위치 데이터와 함께, 사전-변환 버퍼(602)로부터 라이팅되지 않은(unlit) 정점 데이터를 리트리빙한다. 2차 프로세서(610)는 컬러 데이터를 처리하기 위해 다른 데이터, 가령 라이팅 모델 데이터, 스키닝 매트릭스 데이터 등과 함께 리트리빙된 정보를 이용한다. 라이팅의 경우, 2차 프로세서(610)는 릿 정점 컬러 데이터를 생성하기 위해 하나 이상의 라이팅 모델들 및 정점 데이터를 이용하고, 2차 프로세서(610)는 명령 스트림(216B)에 포함된 정보를 이용하여 식별된 위치에서, 사후-변환 버퍼(606)에 이러한 릿 정점 컬러 데이터를 저장한다.
비-동기화 모드에서, 모델 뷰 변환 모듈(604)은 사후-변환 버퍼(606)에 컬러 데이터를 기록한다. 그러나, 만약 변환 모듈(604)이 사후-변환 버퍼(606)에 컬러 데이터를 기록하지 않는다면, 변환 모듈(604)은 2차 프로세서(610)에 의해 버퍼(606)에 기록되는 라이팅된 컬러 데이터를 중첩기록(overwrite)할 수 있다. 동기화 모드에서, 모델 뷰 변환 모듈(604)은 사후-변환 버퍼(606)로 컬러 데이터를 전송하지 말라는 통지, 가령 SPIM(214)으로부터의 통지를 수신한다. 모델 뷰 변환 모듈(604)에 의해 사후-변환 버퍼(606)에 기록된 정점 데이터의 일부로서 상기 컬러 데이터를 전송하지 않음으로써, 변환 모듈(604)은 2차 프로세서(610)에 의해 사후-변환 버퍼(606)에 기록된 라이팅된 컬러 데이터를 중첩기록하는 것을 피하게 된다.
동기화 모드에서, SPIM(214)은 사후-변환 버퍼(606)에 저장된 데이터의 상태를 제공할 수 있어, 뷰포인트 변환 모듈(608)은 2차 프로세서(610)에 의해 출력된 라이팅된 컬러 데이터를 포함하는 정점 데이터를 리트리빙하게 된다. 비-제한적인 예로서 SPMM(202) 및 SPIM(214)은 뷰포인트 변환 모듈(608)이 처리할 프리미티브들과 연관된 정점들을 2차 프로세서(610)가 처리했는지 여부를 식별하기 위해 피드백(216A)을 모니터링할 수 있어, 모듈(608)은 라이팅된 컬러 데이터를 포함하는 정점 데이터를 처리하게 된다. 예를 들어, 명령은 정점들이 명령에 의해 처리되는 프리미티브 목록과 명령을 연관시키는 정보를 포함할 수 있다. 하나 이상의 실시예들에 따라 명령 및 연관된 프리미티브 목록 간에 일대일 대응이 존재하여, 하나의 명령이 연관된 프리미티브 목록 내의 모든 프리미티브들을 처리하기 위해 2차 프로세서(610)에 의해 이용된다. 따라서, 일단 처리가 주어진 명령에 대해 완료되었다고 결정되면, 연관된 프리미티브 목록 내의 프리미티브들은 뷰포인트 변환 모듈(608)에 의해 처리되도록 이용가능하다.
하나 이상의 실시예들에 따라, 각각의 명령에 식별자가 부여되고, 명령 식별자들은 순차적인 순서로 할당된다. 그런 가운데, 피드백(216A)에 포함된 마지막 명령 식별자(802) 정보에 기초하여 주어진 명령에 대한 처리가 완료되는지 여부를 결정하는 것이 가능하다. 예를 들어, 마지막 명령 ID(802)에서 식별된 값과 동일하거나 그보다 작은 명령 식별자 값을 가지는 명령들은 2차 프로세서(610)에 의해 완료되는 것으로 간주되는 한편, 마지막 명령 ID(802) 값보다 큰 명령 식별자 값을 가지는 명령들은 2차 프로세서(610)에 의해 완료되지 않는 것으로 간주된다.
도 9는 본 개시내용의 하나 이상의 실시예들에 따라 명령 스트림 및 명령 스트림에 포함된 하나 이상의 명령들의 예시적인 내용들을 도시한다. 명령 스트림(216B)은 하나 이상의 명령들(900)을 포함한다. 각각의 명령(900)은 명령(900)의 하나 이상의 정보 아이템들을 포함한다. 다음은 명령 스트림 내의 명령(900)의 내용들에 대한 비-제한적인 예를 제공하고, 이것은 라이팅 또는 스키닝 프로그램 코드와 같이, 정점들에 관하여 연산하도록 구성되는 프로그램 코드와 함께 이용하기 위한 정보를 포함한다. 본 개시내용의 하나 이상의 실시예들에 따라, 아래에서 논의되는 정보를 대체하기 위해 다른 정보가 추가되거나 이용될 수 있으며, 이러한 정보는 2차 프로세서에 의해 이용되는 임의의 프로그램 코드와 상호동작하도록 적응될 수 있음이 명백할 것이다.
정보 아이템(들)(902 및 904)은 현재의 명령(900)과 함께 이용하기 위한 식별 정보를 포함한다. 하나 이상의 실시예들에 따라 다음의 정보가 2차 처리 관리 및 제어를 용이하게 하기 위해 이용될 수 있다. 다음은 이러한 정보 아이템들에 대한 예들을 제공한다:
timestamp: 2차 프로세서에 의해 처리되고 있는 현재의 명령을 식별한다. SPIM(208A)은 예를 들어 2차 프로세서가 현재 이러한 명령을 처리하고 있음을 표시하기 위해 피드백(213A)에서 이러한 타임스탬프를 출력할 수 있다.
primitiveTimeStamp: 이 변수는 현재의 명령(900)에 대응하는 프리미티브 목록을 식별하는데 이용하기 위한 timestamp를 포함한다. 프리미티브 타임스탬프의 값은, 예를 들어 주어진 프리미티브로 명령(900)을 매핑하기 위해 이용될 수 있다. 프리미티브 타임스탬프는 2차 프로세서에 의해 무시될 수 있다.
Granularity: 하나 이상의 실시예들에 따라 이용하기 위한 선택적인 변수. 조밀도 변수는 정점 그룹, 또는 명령(900)과 연관된 정점들의 서브세트를 포함하는 명령(900)과 연관된 다수의 정점들을 표시한다. 하나 이상의 실시예들에 따라 2차 프로세서는, 피드백으로서, 정점 그룹을 포함하는 다수의 정점들이 처리되었음을 표시하기 위한 정보를 출력한다. 명령(900)이 정점들을 처리하는 경우, 조밀도는 명령(900)과 연관된 정점들의 서브세트인 다수의 정점들, 가령 정점 그룹의 완료에 대해 피드백을 제공하도록 SPIM(208A)에게 지시한다. 조밀도 값을 이용하여, SPIM(208A)은 각각의 정점 그룹이 처리될 때 피드백을 제공할 수 있고, 이러한 피드백은 2차 프로세서가 명령(900)과 연관된 모든 정점들을 처리하는 것을 완료할 때 SPIM(208A)에 의해 제공되는 피드백에 추가될 수 있어, 추가적인, 그리고/또는 보다 조밀한 레벨의 피드백을 제공한다.
vertexCount: 현재의 명령(900)과 함께 처리될 정점들의 수를 표시하는 값을 포함하는 변수.
nextCommandGroupSize: 이 변수는 다음 명령의 크기를 식별한다. 어떠한 다음, 링크된 명령도 없는 경우, 변수는 0으로 설정될 수 있다. 그렇지 않은 경우, 이러한 값은 다음 명령에 포함된 바이트들의 수를 반영하는 값을 포함한다.
nextCommandGroupPtr: 이 변수는 다음 명령 ID 정보(904)의 전부 또는 그의 일부를 포함하고, 이것은 명령 스트림(216B) 내의 다음 명령으로의 포인터를 포함할 수 있다. 어떠한 다음 명령도 없는 경우, 값은 NULL 값으로 설정될 수 있다. 그렇지 않은 경우, 이러한 값은 다음 명령의 최초 저장 위치, 가령 명령 스트림(216B)에서의 위치에 대응하는 메모리 위치로의 포인터를 포함한다.
명령 아이템들(906)은 저장된 데이터, 가령 데이터 버퍼(들)(216C)에 저장된 데이터의 위치를 찾기 위해 이용될 수 있는 정보, 가령 포인터들 및 스트라이드(stride)들을 포함한다.
vertexInPtr: 입력 정점 위치들을 포함하는 버퍼로의 포인터를 포함하는 변수. 하나 이상의 실시예들에 따라, 이 변수의 값은 NULL일 수 있다. 비-제한적인 예로서, 2차 프로세서에 의해 실행되는 라이팅 프로그램은, 처리가 무한(infinite) 라이팅 모델을 포함하는 경우, 위치 정보 대신에, 정점들과 연관된 노멀들을 이용할 수 있다. 처리가 스포트라이팅(spotlighting) 또는 위치(positional) 라이팅 모델들 중 하나 이상을 포함하는 경우, 처리될 하나 이상의 정점들에 대한 위치 데이터를 저장하는 저장소로의 포인터로서 vertexInPtr가 이용될 수 있다.
vertexOutPtr: 2차 프로세서가 스키닝된 정점들을 기록할 수 있는 버퍼로의 포인터를 포함하는 변수. vertexOutPtr 변수는 2차 프로세서가 스키닝을 수행하는 경우 이용된다.
colorsInPtr: 정점 컬러들(RGBA)을 저장하는 버퍼로의 포인터를 포함하는 변수. 적색, 녹색, 청색 및 알파 값의 각각의 세트는 정점 컬러 그룹을 포함한다. 양면(two-sided) 라이팅이 수행되는 경우, 버퍼는 버퍼에 연속하여 2개의 정점 컬러 그룹들을 저장한다. 각각의 정점 컬러 그룹은 vertexOutSize 바이트들에 의해 분리되어, 현재의 colorsInPtr 값에 vertexOutSize 변수의 값을 추가함으로써 다음 정점 컬러 그룹의 위치를 찾을 수 있게 된다. colorsInPtr 값이 NULL 값을 가지는 경우, Material 데이터 구조가 각각의 정점에 대한 입력 컬러 그룹으로 이용된다.
colorsOutPtr: 2차 프로세서에 의해 생성된 컬러 출력을 저장하는 버퍼로의 포인터를 포함하는 변수. 2개의 컬러 그룹들은 양면 라이팅이 가능한 경우 각각의 정점에 대해 2차 프로세서에 의해 연속으로 출력된다. 각각의 정점 컬러 그룹은 vertexOutSize 바이트들에 의해 분리된다.
normalsInPtr: vertexInPtr에 의해 포인팅되는 정점들, 가령 2차 프로세서에 의해 현재 처리 중인 정점들에 대응하는 정점 노멀들을 포함하는 버퍼로의 포인터를 포함하는 변수. normalInPtr 변수가 NULL 값을 가지는 경우, 2차 프로세서는 모든 정점들에 대해 CurrentNormal을 이용한다.
boneIndicesPtr: 정점들을 스키닝하는데 이용하기 위한 매트릭스 팔렛트(palette)를 인덱싱하는 바이트들의 어레이로의 포인터를 포함하는 변수. 비-제한적인 예로서, 인덱스들의 수는 정점들의 수와 정점당 본(bone)들의 수(가령, boneCount 변수에 의해 표시되는)의 곱과 같다.
boneWeightsPtr: 정점 스키닝 프로세스 동안 이용될 수 있는 s15.16 본 웨이트들을 포함하는 버퍼로 포인팅하는 변수. 비-제한적인 예로서, 웨이트들의 수는 정점들의 수와 정점당 본들의 수(가령, boneCount 변수에 의해 표시되는)의 곱과 같다.
vertexInSize: 하나의 입력 정점 구조(정점당)에 포함된 바이트들의 수를 표시하는 변수. 비-제한적인 예로서, 이 변수와 연관된 값은 정점 버퍼에서 다음 정점 위치를 계산하기 위한 스트라이드로서 이용될 수 있다.
vertexOutAndColorSize: 하나의 출력 정점 구조(정점당)에 포함된 바이트들의 수를 식별하는 변수. 비-제한적인 예로서, 이 변수와 연관된 값은 위치들 또는 컬러들에 대한 다음 출력 위치를 계산하기 위한 스트라이드로서 이용될 수 있다.
numDimensions: 위치 벡터당 엘리먼트들의 수를 특정하는 변수(3=XYZ), (4=XYZW). 이러한 수가 3인 경우, W는 1.0이라고 가정될 수 있다. 비-제한적인 예로서, 이 변수와 연관된 값은 다음 정점에 대한 위치 데이터로의 포인터를 계산하기 위한 스트라이드로서 이용될 수 있다.
정보 아이템들(908)은 2차 처리에서 이용될 수 있는 다른 처리 정보를 포함한다. 다음은 이러한 정보 아이템들의 예를 제공한다.
CurrentNormal(XYZ): normalsInPtr이 NULL 포인터 값인 경우 이용되기 위한 노멀을 포함하는 변수. 이러한 노멀은 명령 스트림에서 참조되는 모든 정점들에 적용된다.
rescaleNormalsFlag: 정점 노멀들을 리스케일링(rescale)해야 할지 여부를 표시하는 변수. 플래그가 설정되는 경우(가령, 0xFFFFFFFF의 값으로), 2차 프로세서는, OpenGL-ES 규격(섹션 2.11.3)에 의하여, 라이팅 방정식 이전에 정점 노멀들을 리스케일링한다.
RescaleNormalizeFlag: 언제 정점 노멀들을 리스케일링해야 하는지를 표시하는 변수. 제 1 상위 비트, 가령 비트 0이 설정되는 경우, 2차 프로세서는 OpenGL-ES 규격(섹션 2.11.3)에 규정된 대로 변환 이후에 그러나 라이팅 이전에 노멀들을 정규화한다. 비트 1이 설정되는 경우, 2차 프로세서는 OpenGL 규격에 규정된 대로 리스케일 노멀 알고리즘을 이용할 수 있거나 모든 경우들에서 표준 정규화를 이용할 수 있다. 정규화가 모든 경우들에서 이용될 수 있기 때문에, 노멀들을 정규화하는 것이 적절할 때마다 비트 0이 설정될 수 있고, 2차 프로세서가 대안으로서 리스케일 노멀들을 이용하도록 허용될 때 비트 1 또한 설정될 수 있다.
twoSidedLightingFlag: 양면 라이팅을 수행해야 할지 여부를 표시하는 변수. 플래그가 설정되는 경우(가령, 0xFFFFFFFF의 값으로), 2차 프로세서는 정점당 2개의 컬러들을, (노멀에 대하여) 정점의 각각의 면에 대해 하나씩 계산한다. 하나 이상의 실시예들에 따라, twoSidedLightingFlag는 정점과 연관된 다수의 컬러들이 존재(가령 각각의 면에 대해 하나씩)함을 표시하기 위해 이용될 수 있다.
lightingEnabledFlag: 라이팅을 수행해야 할지 여부를 표시하기 위해 이용되는 변수. 플래그가 설정되는 경우(가령, 0xFFFFFFFF의 값으로), 2차 프로세서는 정점들에 대해 라이팅 계산을 수행하고, twoSidedLighingFlag가 인에이블되는지 여부에 따라 정점당 하나 또는 두 개의 컬러들을 출력한다. 하나 이상의 실시예들에 따라, 다수의 연산들, 가령 라이팅 및 스키닝을 수행하는 2차 처리 동안 라이팅이 선택적으로 수행되는 경우 lightingEnabledFlag가 이용될 수 있다.
numActiveLights: 정점당 적용될 라이트(light)들의 수를 특정하는 변수. 하나 이상의 실시예들에 따라, 8개의 라이트들까지 지원되고, 활성 라이트들은 번호순이다(가령, 3개의 활성 라이트들은 라이트들 0, 1, 2를 지칭한다.)
numLightsUpdated: lightingInfoPtr 변수 값에 의해 포인팅되는 라이팅 정보 어레이들의 수를 특정하는 변수. 하나 이상의 실시예들에 따라 명령과 함께 전송되는 라이트 정보 어레이는, 라이팅 계산이 현재의 명령에 대한 정점들에 관하여 수행되기 전에 업데이트될 것이고, 업데이트되지 않는 임의의 활성 라이트는 그것의 종전 값들을 이용한다.
lightUpdateMask: lightingInfoArrayPtr를 이용하여 어느 라이트들이 업데이트될지를 표시하는 비트 필드들을 포함하는 변수. 비트들 세트의 수는 numLightsUpdated 엔트리에 대응한다. 최하위 비트는 라이트 0에 대응하고, 비트 7은 라이트 7에 대응한다. 최상위 비트가 설정되는 경우(0x8000), 현재의 명령에 대해 업데이트된 머티리얼 구조가 존재한다.
Material: 데이터가 업데이트된 경우, 라이팅 모델 데이터를 업데이트 하기 위해, 필요하다면, 이용될 수 있는 데이터 구조. 이러한 구조의 존재는 lightUpdateMask 변수의 최상위 바이트의 값을 설정함으로써 식별될 수 있다. 머티리얼 데이터 구조 정의에 대한 예가 아래에서 제공된다.
UpdatedLights: 마지막 명령 이래로 변화된 라이트들에 대한 새로운 데이터를 각각 포함하는 라이팅 정보 구조들의 수, 가령 numLightsUpdated를 (필요하다면) 포함하는 데이터 구조. 하나 이상의 실시예들에 따라 2차 처리는, 업데이트되는 실제 라이트들에 라이트 구조들을 매핑하기 위해 lightUpdateMask를 이용한다.
boneCount: 스키닝에 이용될 정점당 본(bone)들의 수를 포함하는 변수. 하나 이상의 실시예들에 따라, 이 값이 0(영)과 동일한 경우, 2차 프로세서는 MVT를 포함하는 매트릭스 팔레트[0]를 적용하지만, 이러한 경우 변환된 정점들을 출력하지 않는다(가령, 라이팅 계산을 위해서만 눈 공간(eye space) 정점들이 이용되도록).
matrixPalettePtr - 마지막 CCG 이래로 매트릭스 팔레트 엔트리들 변화들을 포함하는 4x4 고정점(fixed point) 매트릭스들로의 포인터를 포함하는 변수. 이러한 버퍼의 크기는 includedMatricesSize 엔트리에 의해 표시되고 인덱스 맵은 MPInUse 비트 마스크들에 포함된다.
includedMatricesSize: matrixPalettePtr에 의해 포인팅된 매트릭스 팔레트들의, 바이트 단위의 크기를 표시하는 변수. 하나 이상의 실시예들에 따라, 버퍼는 단지 업데이트된 매트릭스들을 포함할 필요가 있고, MPInUse 마스크 변수 내의 필드들은 데이터를 카피하기에 적절한 인덱스 위치를 결정하는데 이용된다.
MPInUse0-15: matrixPalettePtr 변수에 의해 포인팅되는 버퍼에 포함되는 업데이트된 매트릭스 팔레트에 각각의 비트 세트가 대응하는 16-비트 마스크. 예를 들어 최하위 비트는 매트릭스 인덱스 0에 대응하는 한편, 최상위 비트는 매트릭스 인덱스 15에 대응한다.
MPInUse16-31: matrixPalettePtr에 의해 포인팅되는 버퍼에 포함되는 업데이트된 매트릭스 팔레트에 각각의 비트 세트가 대응하는 16-비트 마스크. 예를 들어 최하위 비트는 매트릭스 인덱스 16에 대응하는 한편, 최상위 비트는 매트릭스 인덱스 31에 대응한다.
MPInUse32-47: matrixPalettePtr에 의해 포인팅되는 버퍼에 포함되는 업데이트된 매트릭스 팔레트에 각각의 비트 세트가 대응하는 16-비트 마스크. 예를 들어 최하위 비트는 매트릭스 인덱스 32에 대응하는 한편, 최상위 비트는 매트릭스 인덱스 47에 대응한다.
다음은 본 개시내용의 하나 이상의 실시예들에 따라 수행되는 2차 처리, 가령 라이팅에 의해 이용될 수 있는 머티리얼 데이터 구조들의 내용들에 대한 예를 제공한다.
Light Model Ambient Scene Color(RGBA) - 라이팅 모델에 대해 이용될 수 있는 Ambient Scene 컬러 세트를 포함한다.
Material Emissive(RGBA) - Material Emissive 컬러에 대해 이용될 수 있는 고정점 RGBA 컬러 세트를 포함한다.
Material Ambient(RGBA) - Material Ambient 컬러에 대해 이용될 수 있는 고정점 RGBA 컬러 세트를 포함한다.
Material Diffuse(RGBA) - Material Diffuse 컬러에 대해 이용될 수 있는 고정점 RGBA 컬러 세트를 포함한다.
Material Specular(RGBA) - Material Specular 컬러에 대해 이용될 수 있는 고정점 RGBA 컬러 세트를 포함한다.
Material Specular Exponent - 0.0과 128.0 사이의 범위일 수 있는 고정점 Material Specular Exponent 인자를 포함한다.
다음은 하나 이상의 실시예들에 따라 2차 처리에 의해 이용할 수 있는 데이터 구조, 가령 라이트 모델 데이터 구조에 대한 추가적인 예들을 제공한다. 비-제한적인 예로서, 라이트 모델 데이터 구조는 2차 처리에서 수행되는 라이팅에 이용되는 각각의 라이트 모델에 대해 존재할 수 있다.
Ambient(RGBA) - Ambient Light Component에 대한 고정점 값들을 포함한다.
Spotlight Vector(XYZ) - 스포트라이트가 이용되는 경우, 스포트라이트 방향 벡터를 포함한다.
Diffuse(RGBA) - Diffuse Component에 대한 고정점 값들을 포함한다.
Specular(RGBA) - Specular Component에 대한 고정점 값들을 포함한다.
Spotlight Cutoff Cosine - 스포트라이트에 대한 코사인 컷오프 값을 포함한다. 예를 들어, 코사인 값들은 1부터 0까지의 범위(0도 내지 90도)일 수 있거나 -1(180도)일 수 있다. -1(180도)의 특별한 경우, 라이트는 전방향성 라이트이고 스포트라이트가 아니다.
Spotlight Exponent - 스포트라이트가 이용되는 경우, 고정점 Spotlight Exponent를 포함한다.
Light Position(XYZW) - 고정점 라이트 위치 또는 방향을 포함한다. W 컴포넌트의 값이 0인 경우 라이트는 무한 방향 라이트이고, 그렇지 않은 경우 그것은 위치(positional) 라이트이다. W 값이 0 Attenuation인 경우, Spotlight 값들이 무시될 수 있다.
Attenuation Factor(Constant) - 감쇠 인자에 대한 상수값을 포함한다.
Attenuation Factor(Linear) - 감쇠 인자에 대한 선형 컴포넌트를 포함한다.
Attenuation Factor(Quadratic) - 감쇠 인자에 대한 2차 컴포넌트를 포함한다.
본 개시내용의 실시예들은, 2차 처리 장치가 그래픽 파이프라인 데이터에 관해 연산하도록 구성되고, 출력이 그래픽 파이프라인에서 실행되는 하나 이상의 모듈들에 이용가능하게 되도록 2차 처리로부터의 출력이 그래픽 파이프라인으로 통합되는, 시스템, 방법 및 장치를 제공한다. 이러한 실시예들에 따라, 2차 프로세서를 이용해야 할지 여부에 관한 결정이 이루어지고, 2차 프로세서가 이용되려고 하는 경우 하나 이상의 명령들을 포함할 수 있는 명령 스트림이 2차 프로세서로 제공된다. 2차 처리는 명령 스트림에 포함된 정보를 이용하고, 하나 이상의 그래픽 파이프라인 처리 모듈들과 동기화하여 버퍼링된 그래픽 파이프라인 데이터에 관해 연산하여, 2차 프로세서의 처리 모듈 및 임의의 그래픽 파이프라인 처리 모듈 어느 쪽도 데이터를 중첩기록하지 않도록 한다. SPMM은, 2차 처리 모듈의 처리 상태를 포함하는 피드백 정보를 이용하여 그래픽 파이프라인 처리 모듈들과 2차 처리에 의한 데이터 액세스를 동기화하기 위해, 하나 이상의 SPIM들과 조합하여 동작한다.
그런 가운데, 본 개시내용의 실시예들은 이용가능한 2차 프로세서(들)를 이용하여 처리 로드(load)를 밸런싱할 수 있는 능력을 제공한다. 그렇지 않은 경우 유휴상태로 남아있을 수 있는 2차 프로세서는 그래픽 처리 장치에 의해 수행되는 그래픽 파이프라인 처리 및/또는 중앙 처리 장치, 또는 다른 처리 장치에 의해 수행되는 처리를 용이하게 하기 위해 이용될 수 있다. 따라서 예를 들어, 만약 그렇지 않다면 처리 리소스를 기다릴지도 모르는 연산들은 이용가능한 2차 프로세서로 지향될 수 있고, 이것은 보다 신속한 처리량의 결과를 낳는다. 유리하게도, 2차 프로세서가 이용되지 않는 처리에 대해서, 2차 프로세서를 이용할 때 처리량의 증가(가령, 초당 프레임들로 측정되는)가 있다고 결정되었다. 부가적으로, 본 개시내용의 실시예들은 로드 밸런싱을 수행하기 위해 2차 처리로부터 피드백되는 정보를 이용할 수 있다. 이러한 피드백은 예를 들어, 2차 프로세서가 어떤, 임계 처리 레벨에 도달하는 시기를 결정하기 위해 이용될 수 있다. 2차 프로세서가 임계 처리 능력에 도달한다고 결정될 때, 처리는 중앙 처리 장치와 같은 또 다른 처리 장치로 지향될 수 있다.
부가적으로, 본 개시내용의 실시예들은 처리 장치가 이용가능한 경우 하나 이상의 다른 2차 기능들을 수행하기 위해, 처리 장치의 1차(primary) 처리 목적과는 다른 목적을 위해 이러한 처리 장치를 이용할 수 있는 능력을 제공한다. 만약 그렇지 않으면 유휴 상태일 수 있는 이러한 하드웨어, 예를 들면 처리 장치의 이용은 하드웨어를 보다 효율적으로 이용하는 결과를 낳는다.
하나 이상의 예시적인 실시예들에서, 기술되는 기능들은 하드웨어, 소프트웨어, 및/또는 펌웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 하드웨어로 구현되는 경우, 이러한 기능들은 하나 이상의 마이크로프로세서들, 마이크로제어기들, 디지털 신호 처리기들(DSPs), 주문형 반도체들(ASICs), 필드 프로그래머블 게이트 어레이(FPGAs) 등으로 구현될 수 있다. 이러한 컴포넌트들은 통신 시스템, 데이터 기록 및/또는 판독 시스템, 또는 다른 시스템들 내에 존재할 수 있다. 소프트웨어로 구현되는 경우, 이러한 기능들은 컴퓨터-판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장되거나, 또는 이들을 통해 전송될 수 있다. 컴퓨터-판독가능 매체는 유형의(tangible) 컴퓨터 저장 매체 및 일 장소에서 다른 장소로 컴퓨터 프로그램의 이전을 용이하게 하기 위한 임의의 매체를 포함하는 통신 매체를 포함한다. 저장 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용한 매체일 수 있다. 예를 들어, 이러한 컴퓨터-판독가능 매체는 RAM, 플래쉬 메모리, 리드-온리 메모리(ROM), 전기적-소거가능 프로그래머블 리드-온리 메모리(EEPROM), 컴팩트 디스크 리드-온리 메모리(CD-ROM) 또는 다른 광학 디스크 저장 매체 또는 자기 디스크 저장 매체 또는 다른 자기 저장 장치들, 또는 명령 또는 데이터 구조의 형태로 요구되는 프로그램 코드 수단을 저장하는데 사용될 수 있고, 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들로 제한되는 것은 아니다. 용어 "컴퓨터-판독가능 매체"는 또한 유형의(tangible) 컴퓨터 프로그램 물건으로서 정의될 수 있다. 여기서 사용되는 disk 및 disc는 컴팩트 disc(CD), 레이저 disc , 광 disc, DVD, 플로피 disk, 및 블루-레이 disc를 포함하며, 여기서 disk는 데이터를 자기적으로 재생하지만, disc은 레이저를 통해 광학적으로 데이터를 재생한다. 상기 조합들 역시 컴퓨터-판독가능 매체의 범위 내에 포함될 수 있다.
장치 및 방법이 가장 실제적이고 선호되는 실시예들이라 현재 간주되는 것들의 측면에서 기술되었지만, 본 개시내용은 개시된 실시예들에 제한될 필요는 없음이 이해되어야 한다. 그것은 청구항들의 사상 및 범위 내에 포함되는 다양한 수정들 및 유사한 배치(arrangement)들을 포함하도록 의도되고, 청구의 범위는 모든 이러한 수정들 및 유사한 구조들을 포괄하도록 최광의의 해석에 부합되어야 한다. 본 개시내용은 다음의 청구항들의 임의의 그리고 모든 실시예들을 포함한다.

Claims (25)

  1. 드로우(draw) 요청에 응답하여, 1차(primary) 처리 기능을 갖는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하는 단계;
    그래픽 파이프라인 처리에 도움이 되도록 상기 처리 장치의 상기 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 상기 처리 장치의 할당을 요청하는 단계;
    상기 할당 요청이 성공적인 경우:
    그래픽 파이프라인 데이터를 상기 처리 장치에 이용가능하게 하는 단계;
    상기 처리 장치의 처리 상태를 모니터링하는 단계; 및
    상기 처리 상태를 이용하여 상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합(integrate)하는 단계
    를 포함하는,
    방법.
  2. 제 1 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 라이팅(lighting) 기능들을 포함하는,
    방법.
  3. 제 1 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 스키닝(skinning) 기능들을 포함하는,
    방법.
  4. 제 1 항에 있어서,
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있는지 여부를 결정하는 단계; 및
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있지 않은 경우 상기 처리 장치를 할당하는 단계
    를 더 포함하는,
    방법.
  5. 제 1 항에 있어서,
    상기 할당 요청이 성공적인 경우, 상기 방법은:
    상기 처리 장치에 의해 이용될 정보를 통신하기 위해 명령 스트림을 생성하는 단계를 더 포함하는,
    방법.
  6. 제 1 항에 있어서,
    상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하는 단계는:
    상기 처리 장치 및 하나 이상의 그래픽 파이프라인 처리 모듈들을 관련시키는 데이터 의존성(dependency)을 식별하는 단계;
    상기 처리 상태를 이용하여 상기 처리 장치가 상기 데이터 의존성에 관련되는 의존적인 데이터의 처리를 마쳤는지 여부를 결정하는 단계; 및
    상기 처리 장치가 상기 의존적인 데이터의 처리를 마칠 때까지, 상기 하나 이상의 그래픽 파이프라인 처리 모듈들로 하여금 상기 의존적인 데이터를 위해 대기하도록 하는 단계
    를 더 포함하는,
    방법.
  7. 장치로서,
    그래픽 파이프라인을 구현하도록 구성되는 그래픽 처리 장치; 및
    상기 그래픽 처리 장치에 결합되는 2차 처리 관리자
    를 포함하고, 상기 2차 처리 관리자는:
    상기 2차 처리 관리자에 결합되는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하고 ― 상기 처리 장치는 1차 처리 기능을 가짐 ―;
    그래픽 파이프라인 처리에 도움이 되도록 상기 처리 장치의 상기 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 상기 처리 장치의 할당을 요청하도록
    구성되고,
    상기 할당 요청이 성공적인 경우, 상기 2차 처리 관리자는:
    그래픽 파이프라인 데이터를 상기 처리 장치에 이용가능하게 하고;
    상기 처리 장치의 처리 상태를 모니터링하고; 그리고
    상기 처리 상태를 이용하여 상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하도록
    추가로 구성되는,
    장치
  8. 제 7 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 라이팅 기능들을 포함하는,
    장치.
  9. 제 7 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 스키닝 기능들을 포함하는,
    장치.
  10. 제 7 항에 있어서,
    상기 2차 처리 관리자에 결합되는 할당기(allocator)를 더 포함하고, 상기 할당기는:
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있는지 여부를 결정하고; 그리고
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있지 않은 경우 상기 처리 장치를 할당하도록
    구성되는,
    장치.
  11. 제 7 항에 있어서,
    상기 할당 요청이 성공적인 경우, 상기 2차 처리 관리자는:
    상기 처리 장치에 의해 이용될 정보를 통신하기 위해 명령 스트림을 생성하도록 추가로 구성되는,
    장치.
  12. 제 7 항에 있어서,
    상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하도록 구성되는 상기 2차 처리 관리자는:
    상기 처리 장치 및 하나 이상의 그래픽 파이프라인 처리 모듈들을 관련시키는 데이터 의존성을 식별하고;
    상기 처리 상태를 이용하여 상기 처리 장치가 상기 데이터 의존성에 관련되는 의존적인 데이터의 처리를 마쳤는지 여부를 결정하고; 그리고
    상기 처리 장치가 상기 의존적인 데이터의 처리를 마칠 때까지, 상기 하나 이상의 그래픽 파이프라인 처리 모듈들로 하여금 상기 의존적인 데이터를 위해 대기하게 하도록
    추가로 구성되는,
    장치.
  13. 컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체로서,
    상기 프로그램 코드는:
    드로우 요청에 응답하여, 1차 처리 기능을 갖는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하고;
    그래픽 파이프라인 처리에 도움이 되도록 상기 처리 장치의 상기 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 상기 처리 장치의 할당을 요청하고;
    상기 할당 요청이 성공적인 경우:
    그래픽 파이프라인 데이터를 상기 처리 장치에 이용가능하게 하고;
    상기 처리 장치의 처리 상태를 모니터링하고; 그리고
    상기 처리 상태를 이용하여 상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하기 위한
    코드를 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  14. 제 13 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 라이팅 기능들을 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  15. 제 13 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 스키닝 기능들을 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  16. 제 13 항에 있어서,
    상기 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하기 위한 프로그램 코드는:
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있는지 여부를 결정하기 위한 코드를 더 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  17. 제 13 항에 있어서,
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있는지 여부를 결정하고; 그리고
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있지 않은 경우 상기 처리 장치를 할당하기 위한
    프로그램 코드를 더 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  18. 제 13 항에 있어서,
    상기 할당 요청이 성공적인 경우, 상기 프로그램 코드는:
    상기 처리 장치에 의해 이용될 정보를 통신하기 위해 명령 스트림을 생성하기 위한 코드를 더 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  19. 제 13 항에 있어서,
    상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하기 위한 프로그램 코드는:
    상기 처리 장치 및 하나 이상의 그래픽 파이프라인 처리 모듈들을 관련시키는 데이터 의존성을 식별하고;
    상기 처리 상태를 이용하여 상기 처리 장치가 상기 데이터 의존성에 관련되는 의존적인 데이터의 처리를 마쳤는지 여부를 결정하고; 그리고
    상기 처리 장치가 상기 의존적인 데이터의 처리를 마칠 때까지 상기 하나 이상의 그래픽 파이프라인 처리 모듈들로 하여금 상기 의존적인 데이터를 위해 대기하도록 하기 위한
    프로그램 코드를 더 포함하는,
    컴퓨터-실행가능 프로그램 코드가 저장되는 컴퓨터-판독가능 메모리 매체.
  20. 장치로서,
    그래픽 파이프라인을 구현하도록 구성되는 그래픽 처리 장치; 및
    상기 그래픽 처리 장치에 결합되는 2차 처리 관리 수단을 포함하고, 상기 2차 처리 관리 수단은:
    상기 2차 처리 관리 수단에 결합되는 처리 장치가 그래픽 파이프라인 처리에 도움이 되도록 이용가능한지 여부를 결정하기 위한 수단 ― 상기 처리 장치는 1차 처리 기능을 가짐 ―;
    그래픽 파이프라인 처리에 도움이 되도록 상기 처리 장치의 상기 1차 처리 기능 이외의 2차 처리 기능을 수행하기 위해 상기 처리 장치의 할당을 요청하기 위한 수단
    을 포함하고,
    상기 요청이 성공적인 경우, 상기 2차 처리 관리 수단은:
    그래픽 파이프라인 데이터를 상기 처리 장치에 이용가능하게 하기 위한 수단;
    상기 처리 장치의 처리 상태를 모니터링하기 위한 수단; 및
    상기 처리 상태를 이용하여 상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하기 위한 수단
    을 더 포함하는,
    장치.
  21. 제 20 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 라이팅 기능들을 포함하는,
    장치.
  22. 제 20 항에 있어서,
    상기 처리 장치는 디지털 신호 처리기를 포함하고 상기 2차 처리 기능은 하나 이상의 스키닝 기능들을 포함하는,
    장치.
  23. 제 20 항에 있어서,
    상기 2차 처리 관리 수단에 결합되는 할당 수단을 더 포함하고,
    상기 할당 수단은:
    상기 처리 장치가 그것의 1차 처리 기능을 수행하고 있는지 여부를 결정하기 위한 수단; 및
    상기 처리 장치가 1차 처리 기능을 수행하고 있지 않은 경우 상기 처리 장치를 할당하기 위한 수단
    을 포함하는,
    장치.
  24. 제 20 항에 있어서,
    상기 할당 요청이 성공적인 경우, 상기 2차 처리 관리 수단은:
    상기 처리 장치에 의해 이용될 정보를 통신하기 위해 명령 스트림을 생성하기 위한 수단을 더 포함하는,
    장치.
  25. 제 20 항에 있어서,
    상기 처리 장치에 의해 출력되는 데이터를 상기 그래픽 파이프라인 데이터로 통합하기 위한 수단은:
    상기 처리 장치 및 하나 이상의 그래픽 파이프라인 처리 모듈들을 관련시키는 데이터 의존성을 식별하기 위한 수단;
    상기 처리 상태를 이용하여 상기 처리 장치가 상기 데이터 의존성에 관련되는 의존적인 데이터의 처리를 마쳤는지 여부를 결정하기 위한 수단; 및
    상기 처리 장치가 상기 의존적인 데이터의 처리를 마칠 때까지 상기 하나 이상의 그래픽 파이프라인 처리 모듈들로 하여금 상기 의존적인 데이터를 대기하게 하기 위한 수단
    을 더 포함하는,
    장치.
KR1020127025494A 2007-11-30 2008-11-26 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법 KR20120125395A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/948,710 US8922565B2 (en) 2007-11-30 2007-11-30 System and method for using a secondary processor in a graphics system
US11/948,710 2007-11-30
PCT/US2008/084868 WO2009073516A1 (en) 2007-11-30 2008-11-26 System and method for using a secondary processor in a graphics system

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020107014529A Division KR101386180B1 (ko) 2007-11-30 2008-11-26 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법

Publications (1)

Publication Number Publication Date
KR20120125395A true KR20120125395A (ko) 2012-11-14

Family

ID=40385500

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020127025494A KR20120125395A (ko) 2007-11-30 2008-11-26 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법
KR1020107014529A KR101386180B1 (ko) 2007-11-30 2008-11-26 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020107014529A KR101386180B1 (ko) 2007-11-30 2008-11-26 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법

Country Status (7)

Country Link
US (1) US8922565B2 (ko)
EP (1) EP2068279B1 (ko)
JP (1) JP5032670B2 (ko)
KR (2) KR20120125395A (ko)
CN (1) CN101911111B (ko)
TW (1) TW200935350A (ko)
WO (1) WO2009073516A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180046680A (ko) * 2016-10-28 2018-05-09 삼성전자주식회사 그래픽스 데이터를 관리하는 방법 및 장치

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110043518A1 (en) * 2009-08-21 2011-02-24 Nicolas Galoppo Von Borries Techniques to store and retrieve image data
US8817031B2 (en) * 2009-10-02 2014-08-26 Nvidia Corporation Distributed stream output in a parallel processing unit
US8810592B2 (en) * 2009-10-09 2014-08-19 Nvidia Corporation Vertex attribute buffer for inline immediate attributes and constants
US8963797B2 (en) 2010-01-06 2015-02-24 Apple Inc. Display driving architectures
CN103105959A (zh) * 2011-11-09 2013-05-15 昆盈企业股份有限公司 数字绘图系统及其数字调色方法
US9019289B2 (en) * 2012-03-07 2015-04-28 Qualcomm Incorporated Execution of graphics and non-graphics applications on a graphics processing unit
EP2825952B1 (en) * 2012-03-16 2017-03-15 Intel Corporation Techniques for a secure graphics architecture
US10559123B2 (en) 2012-04-04 2020-02-11 Qualcomm Incorporated Patched shading in graphics processing
KR20130123645A (ko) * 2012-05-03 2013-11-13 삼성전자주식회사 그래픽 처리 장치를 위한 동적 로드 밸런싱 장치 및 방법
JP6116941B2 (ja) 2013-02-28 2017-04-19 株式会社東芝 情報処理装置
CN103164839B (zh) * 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
US9449410B2 (en) 2013-04-11 2016-09-20 Qualcomm Incorporated Intra-frame timestamps for tile-based rendering
CN103327413A (zh) * 2013-06-26 2013-09-25 四川长虹电器股份有限公司 一种在智能电视中实现alpha动画的方法
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
US9495790B2 (en) 2014-04-05 2016-11-15 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping to non-orthonormal grid
US10438312B2 (en) 2014-04-05 2019-10-08 Sony Interactive Entertainment LLC Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters
US9710957B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Graphics processing enhancement by tracking object and/or primitive identifiers
US10068311B2 (en) 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9836816B2 (en) 2014-04-05 2017-12-05 Sony Interactive Entertainment America Llc Varying effective resolution by screen location in graphics processing by approximating projection of vertices onto curved viewport
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
KR102521654B1 (ko) * 2016-01-25 2023-04-13 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법
US10685473B2 (en) * 2017-05-31 2020-06-16 Vmware, Inc. Emulation of geometry shaders and stream output using compute shaders
US11107177B1 (en) * 2017-06-16 2021-08-31 Amazon Technologies, Inc. Data/metadata synchronization using metadata queue statistics
CN109964204B (zh) * 2017-10-19 2020-12-22 腾讯科技(深圳)有限公司 用于处理图形的方法和系统
US10818067B1 (en) * 2019-05-31 2020-10-27 Texas Instruments Incorporated GPU assist using DSP pre-processor system and method
EP4169012A4 (en) * 2020-06-23 2024-01-17 Qualcomm Incorporated REDUCING POWER DEMAND TO GENERATE IMAGES FOR DISPLAY DEVICES
CN114996491A (zh) * 2022-04-22 2022-09-02 武汉光庭信息技术股份有限公司 一种全液晶仪表显示性能优化方法和系统

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4866637A (en) * 1987-10-30 1989-09-12 International Business Machines Corporation Pipelined lighting model processing system for a graphics workstation's shading function
US6469746B1 (en) * 1992-12-28 2002-10-22 Sanyo Electric Co., Ltd. Multi-vision screen adapter
US5764228A (en) * 1995-03-24 1998-06-09 3Dlabs Inc., Ltd. Graphics pre-processing and rendering system
US5798770A (en) * 1995-03-24 1998-08-25 3Dlabs Inc. Ltd. Graphics rendering system with reconfigurable pipeline sequence
KR100269106B1 (ko) * 1996-03-21 2000-11-01 윤종용 멀티프로세서 그래픽스 시스템
US6191800B1 (en) * 1998-08-11 2001-02-20 International Business Machines Corporation Dynamic balancing of graphics workloads using a tiling strategy
US6347344B1 (en) 1998-10-14 2002-02-12 Hitachi, Ltd. Integrated multimedia system with local processor, data transfer switch, processing modules, fixed functional unit, data streamer, interface unit and multiplexer, all integrated on multimedia processor
JP2000222590A (ja) * 1999-01-27 2000-08-11 Nec Corp 画像処理方法及び装置
US6545679B1 (en) 1999-12-27 2003-04-08 Microsoft Corporation View volume clip-check in object space
US6819325B2 (en) * 2000-03-07 2004-11-16 Microsoft Corporation API communications for vertex and pixel shaders
US7196710B1 (en) 2000-08-23 2007-03-27 Nintendo Co., Ltd. Method and apparatus for buffering graphics data in a graphics system
US6771269B1 (en) * 2001-01-12 2004-08-03 Ati International Srl Method and apparatus for improving processing throughput in a video graphics system
US6961064B2 (en) 2001-06-28 2005-11-01 Hewlett-Packard Development Company, L.P. System and method for combining graphics formats in a digital video pipeline
US6919896B2 (en) * 2002-03-11 2005-07-19 Sony Computer Entertainment Inc. System and method of optimizing graphics processing
US20040075623A1 (en) * 2002-10-17 2004-04-22 Microsoft Corporation Method and system for displaying images on multiple monitors
US7034837B2 (en) * 2003-05-05 2006-04-25 Silicon Graphics, Inc. Method, system, and computer program product for determining a structure of a graphics compositor tree
US7075541B2 (en) * 2003-08-18 2006-07-11 Nvidia Corporation Adaptive load balancing in a multi-processor graphics processing system
US6956579B1 (en) * 2003-08-18 2005-10-18 Nvidia Corporation Private addressing in a multi-processor graphics processing system
US7310722B2 (en) 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US7735093B2 (en) 2004-03-02 2010-06-08 Qualcomm Incorporated Method and apparatus for processing real-time command information
US6985152B2 (en) * 2004-04-23 2006-01-10 Nvidia Corporation Point-to-point bus bridging without a bridge controller
US7570267B2 (en) 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US6972769B1 (en) * 2004-09-02 2005-12-06 Nvidia Corporation Vertex texture cache returning hits out of order
US7868891B2 (en) 2004-09-16 2011-01-11 Nvidia Corporation Load balancing
CN1928918B (zh) * 2005-10-14 2012-10-10 威盛电子股份有限公司 图形处理装置及于图形处理装置中执行着色操作的方法
US8144149B2 (en) * 2005-10-14 2012-03-27 Via Technologies, Inc. System and method for dynamically load balancing multiple shader stages in a shared pool of processing units
US20070091088A1 (en) * 2005-10-14 2007-04-26 Via Technologies, Inc. System and method for managing the computation of graphics shading operations
US7325086B2 (en) * 2005-12-15 2008-01-29 Via Technologies, Inc. Method and system for multiple GPU support
US8284204B2 (en) * 2006-06-30 2012-10-09 Nokia Corporation Apparatus, method and a computer program product for providing a unified graphics pipeline for stereoscopic rendering
US8120608B2 (en) * 2008-04-04 2012-02-21 Via Technologies, Inc. Constant buffering for a computational core of a programmable graphics processing unit

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180046680A (ko) * 2016-10-28 2018-05-09 삼성전자주식회사 그래픽스 데이터를 관리하는 방법 및 장치

Also Published As

Publication number Publication date
TW200935350A (en) 2009-08-16
EP2068279B1 (en) 2018-04-18
KR101386180B1 (ko) 2014-04-17
WO2009073516A1 (en) 2009-06-11
CN101911111A (zh) 2010-12-08
EP2068279A1 (en) 2009-06-10
CN101911111B (zh) 2013-05-01
US8922565B2 (en) 2014-12-30
US20090141033A1 (en) 2009-06-04
JP2011505633A (ja) 2011-02-24
KR20100089896A (ko) 2010-08-12
JP5032670B2 (ja) 2012-09-26

Similar Documents

Publication Publication Date Title
KR101386180B1 (ko) 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법
EP3673463B1 (en) Rendering an image from computer graphics using two rendering computing devices
US11232534B2 (en) Scheme for compressing vertex shader output parameters
US10991127B2 (en) Index buffer block compression
US10176621B2 (en) Using compute shaders as front end for vertex shaders
CN107209923B (zh) 图形处理中的混合渲染
JP5960368B2 (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
US9280956B2 (en) Graphics memory load mask for graphics processing
US9852536B2 (en) High order filtering in a graphics processing unit
CN111406277B (zh) 以图块为基础的低分辨率深度存储
CN108780582B (zh) 可见性信息修改
US9646359B2 (en) Indefinite texture filter size for graphics processing
CN106575428B (zh) 图形处理单元中的高阶滤波
CN111989715A (zh) 用于与硬件实例化兼容的gpu的压缩可见性状态

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application