다음의 설명에서, 다수의 구체적인 세부 사항들은 본 발명에 대한 좀더 완전한 이해를 제공하기 위해 기술된다. 그러나, 당업자라면, 구체적인 이들 세부 사항들 중 하나 이상이 없이도, 본 발명이 실시될 수 있다는 것을 알 수 있을 것이다. 다른 경우들로서, 본 발명을 불명료하게 하는 것을 방지하기 위해, 주지의 사양들은 설명되지 않았다.
도 2는 일반적으로 200으로서 지시되며 호스트 컴퓨터(210) 및 그래픽 서브시스템(207)을 포함하는 컴퓨팅 시스템의 예시적 실시예의 블록도이다. 컴퓨팅 시 스템(200)은 데스크톱 컴퓨터, 서버, 랩톱 컴퓨터, 팜-사이즈 컴퓨터(palm-sized computer), 태블릿 컴퓨터, 게임 콘솔, PDA(personal digital assistant) 또는 셀룰러 전화기와 같은 휴대용 무선 단말기, 컴퓨터 기반 시뮬레이터 등일 수 있다. 호스트 컴퓨터(210)는, 호스트 메모리(212)와 직접 인터페이스하는 시스템 메모리 컨트롤러를 포함할 수 있거나 시스템 인터페이스(215)를 통해 호스트 메모리(212)와 통신할 수 있는 호스트 프로세서(214)를 포함한다. 시스템 인터페이스(215)는 I/O(입/출력) 인터페이스 또는 호스트 메모리(212)와 직접 인터페이스하는 시스템 메모리 컨트롤러를 포함하는 브리지 장치(bridge device)일 수 있다. 업계에 공지된 시스템 인터페이스(215)의 일례로는 Intel® Northbridge를 들 수 있다.
호스트 컴퓨터(210)는 시스템 인터페이스(215) 및 인터페이스(217)를 통해 그래픽 서브시스템(207)과 통신한다. 그래픽 서브시스템(207)은 로컬 메모리(240) 및 프로그램 가능한 그래픽 프로세서(205)를 포함한다. 프로그램 가능한 그래픽 프로세서(205)는 메모리를 사용하여 그래픽 데이터 및 프로그램 명령어들을 저장하는데, 여기서, 그래픽 데이터는 프로그램 가능한 그래픽 프로세서(205)내의 계산 유닛들로 입력되거나 그로부터 출력되는 임의의 데이터이다. 그래픽 메모리는 그래픽 데이터 또는 프로그램 가능한 그래픽 프로세서(205)에 의해 실행될 프로그램 명령어들을 저장하는 데 사용되는 임의의 메모리이다. 그래픽 메모리는 호스트 메모리(212), 프로그램 가능한 그래픽 프로세서(205)에 직접 연결된 로컬 메모리(local memory)(240), 프로그램 가능한 그래픽 프로세서(205) 내의 계산 유닛들에 연결된 저장 리소스들 등의 일부분들을 포함할 수 있다. 저장 리소스들은 레지 스터 파일들, 캐시들, FIFO(first in first out) 메모리들 등을 포함할 수 있다.
인터페이스(217) 이외에, 프로그램 가능한 그래픽 프로세서(205)는 그래픽 프로세싱 파이프라인(203), 메모리 컨트롤러(220), 및 출력 컨트롤러(280)를 포함한다. 인터페이스(217)에서 수신된 데이터 및 프로그램 명령어들은 그래픽 프로세싱 파이프라인(203) 내의 지오메트리 프로세서(geometry processor)(230)로 전달될 수 있거나, 메모리 컨트롤러(220)를 통해 로컬 메모리(240)에 기입될 수 있다. 로컬 메모리(240) 및 인터페이스(217)와 통신하는 것 이외에, 메모리 컨트롤러(220)는 또한 그래픽 프로세싱 파이프라인(203)의 판독 및 기입 인터페이스들과 출력 컨트롤러(280)의 판독 인터페이스를 통해, 그래픽 프로세싱 파이프라인(203) 및 출력 컨트롤러(280)와 통신한다.
그래픽 프로세싱 파이프라인(205) 내에서, 지오메트리 프로세서(230), 및 프로그램 가능한 그래픽 프레그먼트 프로세싱 파이프라인인 프레그먼트 프로세싱 파이프라인(260)은, 다양한 계산 기능들을 수행한다. 이 기능들 중 일부는 표 찾아보기(table lookup), 스칼라(scalar) 및 벡터(vector) 덧셈, 곱셈, 나눗셈, 좌표계 맵핑(coordinate-system mapping), 벡터 법선들의 계산, 테설레이션(tessellation), 미분들(derivatives)의 계산, 보간(interpolation) 등이다. 지오메트리 프로세서(230) 및 프레그먼트 프로세싱 파이프라인(260)은, 데이터 프로세싱 연산들이 그래픽 프로세싱 파이프라인(203)을 통한 다중 패스들(multiple passes)로 또는 프레그먼트 프로세싱 파이프라인(260)을 통한 내부의 다중 패스들로 수행되도록 선택적으로 구성된다. 프로그램 가능한 그래픽 프로세서(205), 그 래픽 프로세싱 파이프라인(203), 또는 프레그먼트 프로세싱 파이프라인(260)을 통한 각각의 패스는 래스터 연산 유닛(Raster Operations Unit)(265)에 의한 선택적 프로세싱으로 종결된다.
버텍스 프로그램들(vertex programs)은 지오메트리 프로세서(230) 및 래스터라이저(rasterizer)(250) 내에서의 실행을 위해 호스트 프로세서(214)에 의해 컴파일된 버텍스 프로그램 명령어들의 시퀀스들이다. 프레그먼트 프로그램들은 프레그먼트 프로세싱 파이프라인(260)내에서의 실행을 위해 호스트 프로세서(214)에 의해 컴파일된 프레그먼트 프로그램 명령어들의 시퀀스들이다. 지오메트리 프로세서(230)는, 인터페이스(217) 또는 메모리 컨트롤러(220)로부터, 프로그램 명령어들(버텍스 프로그램 명령어들 및 프레그먼트 프로그램 명령어들) 및 데이터의 스트림을 수신하고, 데이터를 사용하여 벡터 부동점 연산들(vector floating-point operations) 또는 다른 프로세싱 연산들을 수행한다. 프로그램 명령어들은 지오메트리 프로세서(230), 래스터라이저(250), 및 프레그먼트 프로세싱 파이프라인(260) 내의 서브유닛들을 설정한다. 프로그램 명령어들 및 데이터는 그래픽 메모리, 예를 들어, 호스트 메모리(212), 로컬 메모리(240), 또는 프로그램 가능한 그래픽 프로세서(205) 내의 저장 리소스들의 일부분들에 저장된다. 호스트 메모리(212)의 일부분이 프로그램 명령어들 및 데이터를 저장하는 데 사용될 때, 호스트 메모리(212)의 일부분은 프로그램 가능한 그래픽 프로세서(205)에 의한 액세스 성능을 증가시키기 위해 언캐시(uncash)될 수 있다. 대안적으로, 구성 정보는, 예를 들어, 프로그램 명령어들을 사용하여 지오메트리 프로세서(230), 래스터라이저(250), 및 프레그먼트 프로세싱 파이프라인(260) 내의 레지스터들에 데이터와 함께 인코딩되어 기입되거나 한다.
지오메트리 프로세서(230)에 의해 처리된 데이터 및 프로그램 명령어들은 지오메트리 프로세서(230)로부터 래스터라이저(250)로 전달된다. 래스터라이저(250)는 그래픽 프리미티브들을 처리하여, 커버리지 데이터를 포함하는, 픽셀 데이터 또는 프레그먼트 데이터와 같은, 서브-프리미티브 데이터를 생성하는 샘플링 유닛이다. 커버리지 데이터는, 픽셀 내의 어떤 서브-픽셀 샘플 위치들이 픽셀과 프리미티브의 교차에 의해 형성된 프레그먼트에 의해 "커버"되는지를 지시한다. 그래픽 프리미티브들은 점들, 선들, 삼각형들, 4변형들, 메시들(meshes), 평면들 등과 같은 지오메트리를 포함한다. 래스터라이저(250)는, 지오메트리 프로세서(230)에 의해 처리된 데이터에 대해 스캔 변환(scan conversion)을 수행하여, 그래픽 프리미티브들을 서브-프리미티브 데이터로 변환한다. 래스터라이저(250)는 다중 샘플 모드에 의해 특정되는 한 세트의 고정형 또는 프로그램형 서브-픽셀 샘플 위치들을 사용한다. 래스터라이저(250)는 프레그먼트 데이터 및 프레그먼트 프로그램 명령어들을 프레그먼트 프로세싱 파이프라인(260)으로 출력한다.
프레그먼트 프로그램들은, 계산들 및 계산 정확도(computation precision)를 특정하는 것에 의해 프레그먼트 데이터를 처리하도록 프레그먼트 프로세싱 파이프라인(260)을 구성한다. 프레그먼트 셰이더(255)는, 프레그먼트 데이터 프로세싱 연산들이 프레그먼트 셰이더(255)내에서의 다중 내부 패스들로 수행되도록, 프레그먼트 프로그램 명령어들에 의해 선택적으로 구성된다. 본 발명의 일부 실시예들에 서, 커버리지 데이터 및 다중 샘플 모드는, 여기에서 부연되는 바와 같이, 프레그먼트 셰이더(255)에 의해, 프레그먼트 내에 위치하고 있지 않은 픽셀 중심 위치를 변위시켜서, 변위된 픽셀 중심을 생성하는 데 사용된다. 프레그먼트 셰이더(255)는 변위된 픽셀 중심을 사용하여 하나 이상의 서브-픽셀 샘플 위치들에 대한 서브-픽셀 컬러 값들을 계산하고 처리한다. 본 발명의 다른 실시예들에서, 무게 중심 가중치들은, 여기에서 부연되는 바와 같이, 픽셀 중심 위치를 변위시키기 위해 조정되고, 조정된 무게 중심 가중치들은 프레그먼트 내의 하나 이상의 서브-픽셀 샘플 위치들에 대한 프레그먼트 파라미터들을 계산하는 데 사용된다. 프레그먼트 셰이더(255)는 프레그먼트 파라미터들, 예를 들어, 컬러 데이터, 깊이 데이터, 텍스처 맵 좌표들 등을 계산한다. 프레그먼트 파라미터들은 추가적으로 처리되어, 처리된 프레그먼트 데이터, 예를 들어, 컬러 및 깊이를 생성한다.
변위된 픽셀 중심을 사용하여 프레그먼트 파라미터들이 계산될 때, 각각의 프레그먼트 파라미터는 프레그먼트 내의 위치에서 계산되고, 프리미티브 에지를 따르는 컬러 불연속들과 같은 비주얼 아티팩트들의 발생은 감소된다. 프레그먼트 셰이더(255)는 처리된 프레그먼트 데이터 및 프레그먼트 프로그램 명령어들로부터 생성된 코드 워드들을 래스터 연산 유닛(265)으로 출력한다. 다중 샘플링을 수행하도록 구성될 때, 래스터 연산 유닛(265)은 프레그먼트 셰이더(255)로부터 수신된 프레그먼트 깊이 데이터 및 다중 샘플 모드에 의해 특정된 서브-픽셀 샘플 위치들을 사용하여 각각의 서브-픽셀 샘플 위치에 대한 서브-픽셀 깊이 값들을 계산한다. 다른 실시예에서, 서브-픽셀 깊이 값들은 프레그먼트 셰이더(255) 내에서 계산된 다.
일 실시예에서, 래스터 연산 유닛(265)은 각각의 서브-픽셀 샘플 위치에 대해 프레그먼트 셰이더(255)로부터 수신된, 컬러와 같은 프레그먼트 데이터를 복사(replicate)한다. 다른 실시예에서, 래스터 연산 유닛(265)은 프레그먼트 셰이더(255)로부터 각각의 서브-픽셀 샘플에 대한 서브-픽셀 데이터를 수신한다. 서브-픽셀 컬러 값들을 처리하면, 픽셀 내의 서브-픽셀 샘플 위치들 사이의 컬러 변화들(color variations)로부터 초래되는 컬러 공간 에일리어싱(color space aliasing)을 감소시킬 수 있으므로, 이미지 품질을 더욱 향상시킬 수 있다.
래스터 연산 유닛(265)은 메모리 컨트롤러(220)로의 판독 인터페이스 및 기입 인터페이스를 포함하는데, 래스터 연산 유닛(265)은 메모리 컨트롤러(220)를 통해 로컬 메모리(240) 또는 호스트 메모리(212)에 저장된 데이터에 액세스한다. 래스터 연산 유닛(265)은, 처리된 프레그먼트 데이터와 연관된 픽셀 위치(x,y 좌표들에 의해 특정된 이미지 위치)에서 로컬 메모리(240) 또는 호스트 메모리(212)에 저장된 서브-픽셀 프레그먼트 데이터 및 픽셀 데이터를 사용하여, 스텐실(stencil), z 테스트, 블렌딩(blending) 등과 같은, 근접 및 원거리 평면(near and far plane) 클리핑 및 래스터 연산들을 선택적으로 수행한다. 래스터 연산 유닛(265)으로부터의 출력 데이터는 출력 데이터와 연관된 픽셀 위치의 로컬 메모리(240) 또는 호스트 메모리(212)에 기입되고, 결과들, 예를 들어, 이미지 데이터는 그래픽 메모리에 저장된다.
처리가 완결될 때, 출력 컨트롤러(280)를 사용하여, 그래픽 서브시스템(207) 의 출력(285)이 제공된다. 대안적으로, 호스트 프로세서(214)가 메모리 컨트롤러(220), 인터페이스(217), 및 시스템 인터페이스(215)를 통해 로컬 메모리(240)에 저장된 이미지를 판독한다. 출력 컨트롤러(280)는, 데이터를 디스플레이 장치, 네트워크, 전자 제어 시스템, 다른 컴퓨팅 시스템(200)과 같은, 다른 컴퓨팅 시스템, 다른 그래픽 서브시스템(207)과 같은 다른 그래픽 서브시스템 등으로 전달하도록 연산 코드들(opcodes)에 의해 선택적으로 구성된다. 또한, 출력 컨트롤러(280)는, 각 픽셀내의 서브-픽셀 샘플들을 조합하는 이미지 데이터, 예를 들어, 다중-샘플링된 컬러 데이터를 하향 필터링(downfiltering)하여 디스플레이를 위한 필터링된 픽셀들을 생성하도록 연산 코드들에 의해 선택적으로 구성된다. 다른 실시예에서, 다중-샘플링된 컬러 데이터는, 지오메트리 데이터를 렌더링(rendering)하고 다중-샘플링된 컬러 데이터를 지오메트리상에 텍스처 맵으로서 맵핑하는 것에 의해 하향 필터링된다. 다른 실시예에서, 하향 필터링은 프레그먼트 셰이더(255) 내에서 텍스처 맵 필터링, 예를 들어, 트라이리니어(trilinear), 이방성(anisotropic) 등을 사용하여 실현된다.
도 3A는, 본 발명의 하나 이상의 양태들에 따른, 프레그먼트 에지로의 픽셀 중심 위치(301)의 변위를 예시한다. (에지를 따르는 위치들을 포함하는) 프리미티브(302) 내의 임의의 위치는, 무게 중심 가중치들 및 프리미티브(302)의 버텍스들(버텍스 310, 버텍스 311, 및 버텍스 312)을 사용하여 다음의 수학식 1과 같이 정의될 수 있다.
각각의 무게 중심 가중치(w0, w1, 및 w2)는 프리미티브(302) 내의 임의의 위치에 대해 0 이상 1 이하이고, 무게 중심 가중치들의 합은 1이다. 각각의 위치는 무게 중심 가중치들의 고유 세트와 연관된다. 픽셀(300) 내의 픽셀 중심 위치(301)와 같은, 프리미티브(302)의 외부의 위치에 대해서는, 적어도 하나의 무게 중심 가중치가 음(negative)이다. 픽셀 중심 위치(301)는, 도 3C와 관련하여 부연되는 바와 같이, 모든 무게 중심 가중치들이 양이 되도록, 음의 무게 중심 가중치 각각을 양의 무게 중심 각각으로 재분배하는 것에 의해, 변위된 픽셀 중심(displaced pixel center)(313)으로 변위될 수 있다. 예를 들어, 음의 무게 중심 가중치 w1가 w0 및 w2로 재분배될 때, 픽셀 중심 위치(301)는, 변위된 픽셀 중심(313)으로 라인(315)에 평행하게 이동한다.
도 3B는, 본 발명의 하나 이상의 양태들에 따른, 프레그먼트 셰이더(255) 내의 프레그먼트 파라미터 계산 유닛(350)의 예시적 실시예의 블록도이다. 프레그먼트 파라미터 계산 유닛(350)은 래스터라이저(250)로부터, 커버리지 데이터 및 무게 중심 가중치들을 포함하는, 프레그먼트 데이터 및 픽셀과 연관된 프레그먼트 프로그램 명령어들을 수신한다. 무게 중심 가중치 조정 유닛(360)은, 커버리지 데이터에 따라, 픽셀에 대한 픽셀 중심 위치가 프레그먼트 내인지를 결정하고, 조정된 무게 중심 가중치들을 생성한다. 픽셀 중심 위치가 프레그먼트 내에 있지 않을 경 우, 도 3C와 관련하여 설명되는 바와 같이, 변위된 픽셀 중심이 결정된다. 그렇지 않다면, 조정된 무게 중심 가중치들은 래스터라이저(250)로부터 수신된 무게 중심 가중치들과 동일하다.
서브-픽셀 계산 유닛(370)은, 무게 중심 가중치 조정 유닛(360)으로부터의 조정된 무게 중심 가중치들 및 무게 중심 제어 유닛(365)으로부터의 서브-픽셀 샘플 위치들을 수신한다. 서브-픽셀 샘플 위치들은 다중 샘플 모드에 의해 특정되며, 프로그램될 수 있거나 정적일 수 있다. 서브-픽셀 계산 유닛(370)은 조정된 무게 중심 가중치들 및 서브-픽셀 샘플 위치들을 사용하여 각각의 서브-픽셀 샘플 위치에 대한 하나 이상의 프레그먼트 파라미터들을 계산한다. 다른 실시예에서는, 하나 이상의 프레그먼트 파라미터들이 변위된 픽셀 중심에 대해서만 계산되고 각각의 서브-픽셀 샘플 위치에 대해 래스터 연산 유닛(265)에서 복사된다.
도 3C는, 본 발명의 하나 이상의 양태들에 따른, 픽셀 중심 위치(301)와 같은, 픽셀 중심 위치를 변위시키는 방법의 실시예를 예시한다. 단계 320에서, 무게 중심 가중치 조정 유닛(360)은, 픽셀 중심 위치에 대한 무게 중심 가중치들 중 하나 이상이 음인지를 결정하고, 그렇지 않다면, 단계 324에서, 무게 중심 가중치 조정 유닛(360)은 조정된 무게 중심 가중치들 각각을 래스터라이저(250)로부터 수신된 그것의 개개 무게 중심 가중치로 설정한다. 단계 320에서, 무게 중심 가중치 조정 유닛(360)이 픽셀 중심 위치에 대한 무게 중심 가중치들 중 하나 이상이 음이라고 결정하면, 단계 325에서, 무게 중심 가중치 조정 유닛(360)은, 2개의 무게 중심 가중치들이 음인지를 결정하고, 그렇다면, 단계 330에서, 무게 중심 가중치 조 정 유닛(360)은 음의 무게 중심 가중치들 각각을 0으로 조정하고 음이 아닌 무게 중심 가중치를 1로 조정한다.
단계 325에서, 무게 중심 가중치 조정 유닛(360)이 2개의 무게 중심 가중치는 음이 아니라고 결정하면, 즉, 하나의 무게 중심 가중치만이 음이고 2개의 무게 중심 가중치는 음이 아니라고 결정하면, 단계 327에서, 무게 중심 가중치 조정 유닛(360)은 음의 무게 중심 가중치를 반으로 나누어 1/2 가중치 분배(half weight distribution)를 생성한다. 단계 328에서, 무게 중심 가중치 조정 유닛(360)은, 1/2 가중치 분배의 절대값이 음이 아닌 무게 중심 가중치들 중 어느 하나보다 큰지를 결정하고, 그렇다면, 단계 334에서, 무게 중심 가중치 조정 유닛(360)은 음의 무게 중심 가중치 및 음이 아닌 무게 중심 가중치들 중 작은 쪽을 0으로 조정하고 음이 아닌 무게 중심 가중치들 중 큰 쪽을 1로 조정한다.
단계 328에서, 무게 중심 가중치 조정 유닛(360)이, 1/2 가중치 분배의 절대값이 음이 아닌 무게 중심 가중치들 중 어느 하나보다 크지 않다고 결정하면, 단계 332에서, 무게 중심 가중치 조정 유닛(360)은 음의 무게 중심 가중치를 0으로 조정한다. 무게 중심 가중치 조정 유닛(360)은 1/2 가중치 분배를 음이 아닌 무게 중심 가중치들 각각과 합산하여, 나머지 조정된 무게 중심 가중치들을 생성한다. 단계들(330, 332, 334, 및 324) 다음에, 무게 중심 가중치 조정 유닛(360)은 조정된 무게 중심 가중치들을 서브-픽셀 계산 유닛(370)으로 출력한다. 당업자들이라면, 도 3C의 방법 단계들을 수행하도록 구성된 임의의 시스템 또는 그들의 등가물들이 본 발명의 범위내에 해당된다는 것을 알 수 있을 것이다.
도 4A는, 본 발명의 하나 이상의 양태들에 따른, 픽셀들 내의 서브-픽셀 샘플 위치들을 예시한다. 픽셀(400)은 픽셀 중심 위치(415) 및 8개의 서브-픽셀 샘플 위치들(샘플 위치 401, 샘플 위치 402, 샘플 위치 403, 샘플 위치 404, 샘플 위치 405, 샘플 위치 406, 샘플 위치 407, 및 샘플 위치 408)을 포함한다. 픽셀 중심 위치(415) 역시 서브-픽셀 샘플 위치이므로, 9개의 서브-픽셀 샘플 위치들이 존재한다. 또한, 픽셀(400)은 4개의 중심 샘플 위치들(중심 샘플 위치 409, 중심 샘플 위치 410, 중심 샘플 위치 411, 및 중심 샘플 위치 412)을 포함한다. 픽셀 중심 위치(415)가, 프레그먼트(418)와 같은 프레그먼트에 의해 커버되지 않을 때, 중심 샘플 위치 또는 샘플 위치가, 변위된 픽셀 중심, 즉, 중심 서브-픽셀 샘플 위치로서 사용될 수도 있다. 중심 서브-픽셀 샘플 위치는 서브-픽셀 샘플 위치들 중 임의의 것에서 하나 이상의 프레그먼트 파라미터들을 계산하는 데 사용된다. 예를 들어, 프레그먼트 파라미터는, 도 5C와 관련하여 설명되는 바와 같이, 프레그먼트 내의 임의의 서브-샘플 위치에 대한 파라미터의 값을 정의하는 평면 방정식(plane equation)을 평가하는 것에 의해 계산될 수 있다.
본 발명의 일부 실시예들은 픽셀(400) 내의 임의 위치에 배치된 픽셀(400) 내의 추가적인 서브-픽셀 샘플 위치들을 포함한다. 본 발명의 다른 실시예들은 픽셀(400) 내에 좀더 적은 서브-픽셀 샘플 위치들을 포함한다. 또한, 서브-픽셀 샘플 위치들의 서브세트는 각각의 다중 샘플 모드에 의해 특정될 수 있다. 예를 들어, 제1 다중 샘플 모드는 픽셀 중심 위치(415)만을 사용한다. 픽셀(400) 내의 서브-픽셀 샘플 위치들은 도 4B, 도 4C, 및 도 4D의 3가지 다른 다중 샘플 모드들에 대해 도시된다. 도 4B에 도시된 제2 다중 샘플 모드는 샘플 위치(401) 및 샘플 위치(404)만을 사용한다. 도 4C에 도시된 제3 다중 샘플 모드는 샘플 위치(401), 샘플 위치(402), 샘플 위치(403), 및 샘플 위치(404)만을 사용한다. 도 4D에 도시된 제4 다중 샘플 모드는 샘플 위치(405), 샘플 위치(406), 샘플 위치(407), 및 샘플 위치(408)만을 사용한다. 본 발명의 다른 실시예들은 추가적인 다중 샘플 모드들을 포함할 수 있다.
도 5A는, 본 발명의 하나 이상의 양태들에 따른, 프레그먼트 셰이더(255)의 다른 실시예인 프레그먼트 셰이더(525) 내의 중심 계산 유닛(500)의 예시적 실시예의 블록도이다. 중심 계산 유닛(500)은 래스터라이저(250)로부터 픽셀에 대한 커버리지 데이터를 수신하고 중심 서브-픽셀 샘플 위치를 결정하는 데 사용되는 중심 정보를 생성한다. 중심 서브-픽셀 샘플 위치는 샘플 위치 또는 중심 샘플 위치일 수 있다. 다른 실시예에서, 중심 계산 유닛(500)은 래스터라이저(250) 내에 포함된다.
중심 계산 유닛(500) 내의 저장 소자(510)는 래스터라이저(250)로부터의 커버리지 데이터 및 중심 제어 유닛(505)으로부터의 다중 샘플 모드를 수신하고, 중심 정보, 예를 들어, 중심 서브-픽셀 샘플 위치 또는 픽셀 중심 오프셋(pixel center offset)을 출력한다. 다른 대안적인 실시예에서는, 저장 소자(510)가 중심 서브-픽셀 샘플 위치를 출력한다. 또 다른 대안 실시예에서, 저장 소자(510)는, 중심 서브-픽셀 샘플 위치를 계산하는 데 사용되는 픽셀 중심 오프셋을 출력한다. 저장 소자(510)는 하나 이상의 레지스터 파일, ROM(read only memory), RAM(random access memory) 등을 포함할 수 있다.
저장 소자(510)에 저장된 중심 정보는 정적이거나 프로그램(소프트웨어 드라이버에 의해 결정되고 로드)될 수 있다. 중심 제어 유닛(505)은 중심 정보를 저장 소자(510)로 로드하기 위해 기입 제어 신호를 생성한다. 저장 소자(510)에 기입하도록 구성될 때, 중심 제어 유닛(505)은 래스터라이저(250)로부터 중심 정보, 어드레스, 및 기입 명령어를 수신한다. 그렇지 않으면, 중심 제어 유닛(505)은 래스터라이저(250)로부터 프레그먼트 프로그램 명령어들 및 프레그먼트 데이터를 수신한다. 프레그먼트 데이터는 픽셀 위치 정보(x,y), 커버리지 데이터, 무게 중심 가중치들과 같은 프리미티브 데이터 등을 포함할 수 있다.
일부 실시예들에서는, 제1 다중 샘플 모드가 사용될 경우, 샘플 위치(415)가 프레그먼트에 의해 커버된다면, 샘플 위치(415)는 중심 서브-픽셀 샘플 위치로서 사용된다. 그렇지 않다면, 제1 다중 샘플 모드가 사용되고 샘플 위치(415)가 커버되지 않을 경우, 픽셀에 대해, 프레그먼트는 "킬링(killing)"되는데, 다시 말해, 프레그먼트 셰이더(525)에 의해 래스터 연산 유닛(265)으로 출력되지 않는다. 임의의 다중 샘플 모드를 위한 서브-픽셀 샘플 위치들 모두가 프레그먼트에 의해 커버되는 경우, 픽셀 중심 위치가 중심 서브-픽셀 샘플 위치이다. 또한, 1 보다 많은 서브-픽셀 샘플 위치를 특정하는 다중 샘플 모드가 사용되고 단일 서브-픽셀 샘플 위치가 프레그먼트에 의해 커버되는 경우, 단일 서브-픽셀 샘플 위치가 중심 서브-픽셀 샘플 위치이다. 표 1은, 도 4B에 도시된 제2 다중 샘플 모드를 위한, 커버리지 데이터를 사용하여 인덱싱된, 중심 서브-픽셀 샘플 위치들의 실시예를 포함 한다.
제2 다중 샘플 모드를 위한 중심 서브-픽셀 샘플 위치들
커버리지 데이터 |
중심 서브-픽셀 샘플 위치 |
샘플 위치 401 |
샘플 위치 401 |
샘플 위치 404 |
샘플 위치 404 |
샘플 위치들 401 및 404 |
샘플 위치 415 |
표 2는, 도 4C에 도시된 제3 다중 샘플 모드를 위한, 커버리지 데이터를 사용하여 인덱싱된, 중심 서브-픽셀 샘플 위치들의 실시예를 포함한다.
제3 다중 샘플 모드를 위한 중심 서브-픽셀 샘플 위치들
커버리지 데이터 |
중심 서브-픽셀 샘플 위치 |
샘플 위치 401 |
샘플 위치 401 |
샘플 위치 402 |
샘플 위치 402 |
샘플 위치 403 |
샘플 위치 403 |
샘플 위치 404 |
샘플 위치 404 |
샘플 위치들 401 및 402 |
중심 샘플 위치 410 |
샘플 위치들 403 및 401 |
중심 샘플 위치 409 |
샘플 위치들 402 및 404 |
중심 샘플 위치 412 |
샘플 위치들 403 및 404 |
중심 샘플 위치 411 |
4개 샘플 위치들 중 임의의 3개 |
샘플 위치 415 |
4개 샘플 위치들 모두 |
샘플 위치 415 |
표 3은, 도 4D에 도시된, 제4 다중 샘플 모드를 위한, 커버리지 데이터를 사용하여 인덱싱된, 중심 서브-픽셀 샘플 위치들의 실시예를 포함한다.
제4 다중 샘플 모드를 위한 중심 서브-픽셀 샘플 위치들
커버리지 데이터 |
중심 서브-픽셀 샘플 위치 |
샘플 위치 405 |
샘플 위치 405 |
샘플 위치 406 |
샘플 위치 406 |
샘플 위치 407 |
샘플 위치 407 |
샘플 위치 408 |
샘플 위치 408 |
샘플 위치들 405 및 406 |
중심 샘플 위치 410 |
샘플 위치들 405 및 407 |
중심 샘플 위치 409 |
샘플 위치들 406 및 408 |
중심 샘플 위치 412 |
샘플 위치들 407 및 408 |
중심 샘플 위치 411 |
4개 샘플 위치들 중 임의의 3개 |
샘플 위치 415 |
4개 샘플 위치들 모두 |
샘플 위치 415 |
당업자들이라면, 픽셀(400) 내의 상이한 위치들에 배치된 상이한 중심 샘플 위치들이 제1, 제2, 제3, 및 제4 다중 샘플 모드들을 위해 사용될 수 있다는 것과 다른 서브-픽셀 샘플 위치들이 추가적인 다중 샘플 모드들에 포함될 수 있다는 것을 알 수 있을 것이다. 다른 실시예들에서, 표 1, 표 2, 및 표 3은 중심 서브-픽셀 샘플 위치들 대신에 또는 중심 서브-픽셀 샘플 위치들 이외에 픽셀 중심 오프셋들을 포함한다. 예를 들어, 픽셀 중심 위치(415)가 (0,0)에 배치될 때, 샘플 위치(405)에 대응되는 픽셀 중심 오프셋은 (-1,-3)이다. 픽셀 중심 오프셋은, 중심 서브-픽셀 샘플 위치를 계산하기 위해, 픽셀 중심 위치와 조합될 수도 있다. 반대로, 중심 서브-픽셀 샘플 위치는, 픽셀 중심 오프셋을 계산하기 위해, 픽셀 중심 위치와 조합될 수도 있다.
저장 소자(510)는 중심 정보, 예를 들어, 픽셀 중심 오프셋 또는 중심 서브-픽셀 샘플 위치를 중심 제어 유닛(505)으로 출력한다. 중심 제어 유닛(505)은 중심 정보, 프레그먼트 데이터, 및 프레그먼트 프로그램 명령어들을 파라미터 보간 유닛(515)으로 출력한다. 또한, 중심 제어 유닛(505)은 다중 샘플 모드를 파라미터 보간 유닛(515)으로 출력한다. 파라미터 보간 유닛(515)은, 도 5C와 관련하여 설명되는 바와 같이, 각각의 프레그먼트에 대한 하나 이상의 파라미터들을 계산하고, 프레그먼트 파라미터들 및 프레그먼트 프로그램 명령어들을 텍스처 맵 유닛(515)으로 출력한다. 일 실시예에서, 파라미터 보간 유닛(515)은 중심 서브-픽셀 샘플 위치에 대한 컬러 파라미터들 및, 프레그먼트에 의해 커버되는, 다중 샘플 모드에 의해 특정된, 각각의 서브-픽셀 샘플 위치에 대한 텍스처 파라미터들을 계산한다. 다른 실시예에서, 파라미터 보간 유닛(515)은, 프레그먼트에 의해 커버되는, 다중 샘플 모드에 의해 특정된, 각각의 서브-픽셀 샘플 위치에 대한 컬러 파라미터들 및 텍스처 파라미터들을 계산한다.
프레그먼트 파라미터들 및 프레그먼트 프로그램 명령어들 이외에, 일부 실시예들에서, 파라미터 보간 유닛(515)은 중심 정보를 텍스처 맵 유닛(580)으로 출력한다. 그러한 실시예들에서, 중심 정보는 LOD(level of detail) 유닛(520)에 의해 텍스처 맵 LOD를 계산하는 데 사용되는데, 다시 말해, LOD는 균일한 (픽셀 중심 위치 기반의) 그리드(grid)가 아니라 변경된 (중심 서브-픽셀 샘플 위치 기반의) 그리드를 사용하여 계산된다. 구체적으로, 텍스처 파라미터 기울기들(gradients)은 픽셀 오프셋들 또는 중심 서브-픽셀 샘플 위치들을 사용하여 계산된 텍스처 파라미터들을 사용해서 결정된다. 다른 실시예들에서, 픽셀 중심 위치들에 기초하여 계산된 텍스처 맵 파라미터들은, 당업자들에게 공지된 기술들을 사용하여 텍스처 맵 LOD를 계산하는 데 사용된다.
텍스처 맵 유닛(580)은 중심 서브-픽셀 샘플 위치를 사용하여 계산된 프레그먼트 파라미터들과 LOD를 조합하여 텍스처 맵 좌표들 및 대응되는 어드레스들을 결정한다. 어드레스들은 판독 요청들과 함께 메모리 컨트롤러(220)로 출력되고, 메모리 컨트롤러(220)는 하나 이상의 텍스처 샘플들을 리턴한다. 텍스처 샘플들은 필터 모드에 따라 필터링되어, 프레그먼트에 대한 필터링된 텍스처 샘플을 생성한다. 대안적으로, 텍스처 샘플들은 필터링되어 프레그먼트 내의 각각의 서브-픽셀 샘플 위치에 대한 필터링된 텍스처 샘플을 생성한다. 조합기 유닛(585)은 필터링된 텍스처 샘플과, 컬러와 같은, 프레그먼트 파라미터들을 사용하여 생성된 다른 프레그먼트 데이터를 조합하고, 처리된 프레그먼트 데이터를 래스터 연산 유닛(265)으로 출력한다.
도 5B는, 본 발명의 하나 이상의 양태들에 따른, 중심 서브-픽셀 위치를 결정하는 방법의 실시예를 예시한다. 단계 550에서, 중심 계산 유닛(500)은 픽셀에 대한 커버리지 데이터를 수신한다. 단계 555에서, 중심 제어 유닛(505)은 커버리지 데이터 및 다중 샘플 모드를 사용하여 저장 소자(510)의 엔트리를 판독한다. 일부 실시예들에서, 저장 소자(510)는, 표 1, 표 2, 및 표 3과 같은, 다중 샘플 모드 각각을 위한 표를 포함한다. 다른 실시예들에서는, 단일 표가 수개의 다중 샘플 모드들을 위한 중심 정보를 포함한다.
단계 560에서, 중심 제어 유닛(505)은 중심 정보를 수신하고 중심 정보를 파라미터 보간 유닛(515)으로 출력한다. 파라미터 보간 유닛(515)은 중심 정보를 사용하여 픽셀 오프셋을 결정한다. 다른 실시예에서, 파라미터 보간 유닛(515)은 중심 정보를 사용하여 중심 서브-픽셀 샘플 위치를 결정한다.
도 5C는, 본 발명의 하나 이상의 양태들에 따른, 중심 서브-픽셀 위치를 결정하고 프레그먼트 파라미터들을 계산하는 방법의 실시예를 예시한다. 단계들(550, 555, 및 560)은 도 5B와 관련하여 앞서 설명된 바와 같이 진행한다. 단계 565에서, 파라미터 보간 유닛(515)은 픽셀 오프셋을 사용하여 하나 이상의 프레그먼트 파라미터들을 계산한다.
각각의 속성을 위해, 보간기(interpolator)는, 2x2 정사각형으로 정렬된 4개 픽셀들을 포함하는 쿼드(quad)의 중심에서의 값인 quad_center를 계산한다. 쿼드의 중심은 다음의 수학식 2를 사용하여 계산된다.
여기서, (x_quad_center,y_quad_center)는 쿼드 중심의 위치이고, ddx는 속성의 X 방향 미분이며, ddy는 속성의 Y 방향 미분이고, base는 샘플 (x_org, y_org)에서의 속성 값이다. 평면 방정식은 프레그먼트 속성 값들을 정의하고, (x_org, y_org)는 평면 방정식의 원점 위치이다. 본 발명의 일부 실시예들에서, quad_center, ddy, ddx, 및 base는 부동점 포맷(floating-point format)으로 표현되고, x_quad_center, y_quad_center, x_org, 및 y_org는 고정점 포맷(fixed-point format)으로 표현된다.
보간기는 quad_center를 사용하여, 다음의 수학식 3으로부터, 4개 픽셀의 값들(pixelN, N= 0,1,2,3)을 계산한다.
여기서, xcN 및 ycN은 부호 있는(signed) 3-비트 값들로서 표현되는 픽셀 오프셋 성분들이다. 구체적으로, xcN은 쿼드 중심으로부터 픽셀 N의 샘플 포인트에 이르는 X 방향의 거리이고, ycN은 쿼드 중심으로부터 픽셀 N의 샘플 포인트에 이르는 Y 방향의 거리이다. 본 발명의 다른 실시예에서, 픽셀 오프셋 성분들은 부호 없는(unsigned) 3-비트 값들로서 표현되고, 상이한 방정식들을 사용하여 쿼드 내의 4개 픽셀 각각을 계산한다.
단계 570에서, 파라미터 보간 유닛(515)은 하나 이상의 프레그먼트 파라미터들 및 중심 정보를 텍스처 맵 유닛(580)으로 출력하고, 텍스처 맵 유닛(580) 내의 LOD 유닛(520)은 프레그먼트를 위한 텍스처 맵 LOD를 계산한다. 당업자들이라면, 도 5B 및 도 5C의 방법 단계들을 수행하도록 구성된 임의 시스템 또는 그들의 등가물들이 본 발명의 범위내에 해당된다는 것을 알 수 있을 것이다.
도 6A는, 본 발명의 하나 이상의 양태들에 따른, 프레그먼트 셰이더(255)의 다른 대안적인 실시예인 프레그먼트 셰이더(625)의 블록도이다. 중심 계산 유닛(500)의 대안적인 실시예인 중심 계산 유닛(600)은 래스터라이저(250)로부터 픽셀에 대한 커버리지 데이터를 수신하고 중심 서브-픽셀 샘플 위치를 계산하는 데 사용되는 중심 정보를 생성한다. 중심 계산 유닛(600) 내의 저장 소자(610)는 중심 제어 유닛(605)으로부터 커버리지 데이터 및 다중 샘플 모드를 수신하고, 중심 인덱스를 포함하는 중심 정보를 출력한다. 저장 소자(610)는 하나 이상의 레지스터 파일, ROM, RAM 등을 포함할 수 있다.
일 실시예에서, 각각의 중심 인덱스는 4 비트이다. 따라서, 중심 인덱스는 픽셀 오프셋 또는 중심 서브-픽셀 샘플 위치보다 적은 비트들로 표현될 수 있다. 예를 들어, 픽셀 중심 오프셋을 표현하는 데 6 비트가 사용될 수 있고, 중심 서브-픽셀 샘플 위치를 표현하는 데 16 비트 이상이 사용될 수 있다. 중심 정보가 수개의 파이프라인 단계들을 거쳐서 전달되는 경우, 픽셀 오프셋 또는 중심 서브-픽셀 샘플 위치가 아니라 중심 인덱스를 전달하는 것이 좀더 효율적일 수 있다. 중심 인덱스는 사실상 중심 정보의 압축 형태이다. 중심 표(625)는, 여기에서 부연되는 바와 같이, 중심 인덱스를 압축 해제하여 중심 정보를 획득하는 데 사용된다.
저장 소자(610)에 저장된 중심 인덱스들은 정적이거나 프로그램(소프트웨어 드라이버에 의해 결정되고 로드)될 수 있다. 중심 제어 유닛(605)은 중심 인덱스들을 저장 소자(610)로 로드하기 위해 기입 제어 신호를 생성한다. 저장 소자(610)에 기입하도록 구성될 때, 중심 제어 유닛(605)은 래스터라이저(250)로부터 각각의 중심 인덱스, 어드레스, 및 기입 명령어를 수신한다. 그렇지 않으면, 중심 제어 유닛(605)은 래스터라이저(250)로부터 프레그먼트 프로그램 명령어들 및 프레그먼트 데이터를 수신한다.
제1 다중 샘플 모드가 사용되고 샘플 위치(415)가 프레그먼트에 의해 커버될 때, 중심 인덱스는 15이다. 그렇지 않고, 제1 다중 샘플 모드가 사용되고 샘플 위치(415)가 커버되지 않을 때, 중심 인덱스는 0이다. 중심 인덱스가 0으로 설정된, 즉, "킬링된" 프레그먼트에 대해서는 텍스처 샘플들이 메모리로부터 판독되지 않는다. 표 4는, 도 4B에 도시된, 제2 다중 샘플 모드를 위한, 커버리지 데이터를 사용하여 인덱싱된, 중심 인덱스들의 실시예를 포함한다.
제2 다중 샘플 모드를 위한 중심 인덱스들
커버리지 데이터 |
중심 인덱스 |
샘플 위치 없음 |
0 |
샘플 위치 401 |
1 |
샘플 위치 404 |
4 |
샘플 위치들 401 및 404 |
15 |
표 5는, 도 4C에 도시된 제3 다중 샘플 모드를 위한, 커버리지 데이터를 사용하여 인덱싱된, 중심 인덱스들의 실시예를 포함한다.
제3 다중 샘플 모드를 위한 중심 인덱스들
커버리지 데이터 |
중심 인덱스 |
샘플 위치 없음 |
0 |
샘플 위치 401 |
1 |
샘플 위치 402 |
2 |
샘플 위치 403 |
3 |
샘플 위치 404 |
4 |
샘플 위치들 401 및 402 |
10 |
샘플 위치들 403 및 402 |
9 |
샘플 위치들 402 및 404 |
12 |
샘플 위치들 403 및 404 |
11 |
4개 샘플 위치들 중 임의의 3개 |
15 |
4개 샘플 위치들 모두 |
15 |
표 6은, 도 4D에 도시된, 제4 다중 샘플 모드를 위한, 커버리지 데이터를 사용하여 인덱싱된, 중심 인덱스들의 실시예를 포함한다.
제4 다중 샘플 모드를 위한 중심 인덱스들
커버리지 데이터 |
중심 인덱스 |
샘플 위치 없음 |
0 |
샘플 위치 405 |
5 |
샘플 위치 406 |
6 |
샘플 위치 407 |
7 |
샘플 위치 408 |
8 |
샘플 위치들 405 및 406 |
10 |
샘플 위치들 405 및 407 |
9 |
샘플 위치들 406 및 408 |
12 |
샘플 위치들 407 및 408 |
11 |
4개 샘플 위치들 중 임의의 3개 |
15 |
4개 샘플 위치들 모두 |
15 |
저장 소자(610)는 중심 인덱스를 중심 제어 유닛(605)으로 출력한다. 중심 제어 유닛(605)은 중심 인덱스, 프레그먼트 데이터, 및 프레그먼트 프로그램 명령어들을 파라미터 보간 유닛(615)으로 출력한다. 프레그먼트 셰이더(670)와 같은 프레그먼트 셰이더는, 파라미터 보간 유닛(615) 및 텍스처 맵 유닛(680)과 같은, 프레그먼트 데이터를 처리하기 위한 병렬 서브유닛들을 포함할 수 있다. 중심 제어 유닛(605)은 중심 인덱스들, 프레그먼트 데이터, 및 프레그먼트 프로그램 명령어들을 2 이상의 파라미터 보간 유닛들(615)로 출력할 수 있다.
파라미터 보간 유닛(615)은, 도 6C와 관련하여 설명된 바와 같이, 각각의 프레그먼트에 대해 하나 이상의 파라미터들을 계산하고, 프레그먼트 파라미터들 및 프레그먼트 프로그램 명령어들을 텍스처 맵 유닛(680)으로 출력한다. 중심 표(625)는 하나 이상의 레지스터 파일, ROM, RAM 등을 포함할 수 있다. 중심 표(625)는 중심 인덱스를 사용하여 인덱싱된 픽셀 오프셋들 또는 중심 서브-픽셀 샘플 위치들을 저장한다. 표 7은 중심 표(625)의 실시예를 위한 중심 인덱스들에 의해 인덱싱된 픽셀 오프셋들을 포함한다.
인덱스들에 대응되는 픽셀 오프셋들
중심 인덱스 |
픽셀 오프셋 |
|
dx |
dy |
0 |
0=kill |
0=kill |
1 |
-2 |
-2 |
2 |
2 |
-2 |
3 |
-2 |
2 |
4 |
2 |
2 |
5 |
-1 |
-3 |
6 |
3 |
-1 |
7 |
-3 |
1 |
8 |
1 |
3 |
9 |
-2 |
-1 |
10 |
1 |
-2 |
11 |
-1 |
2 |
12 |
2 |
1 |
13 |
미사용 |
미사용 |
14 |
미사용 |
미사용 |
15 |
0 |
0 |
중심 표(625)에 저장된 픽셀 오프셋들은 프레그먼트 파라미터들을 계산하는 데 사용된다. 일 실시예에서, 파라미터 보간 유닛(615)은 중심 서브-픽셀 샘플 위치에 대한 컬러 파라미터들 및, 프레그먼트에 의해 커버되는, 다중 샘플 모드에 의해 특정된, 각각의 서브-픽셀 샘플 위치에 대한 텍스처 파라미터들을 계산한다. 다른 실시예에서, 파라미터 보간 유닛(615)은, 프레그먼트에 의해 커버되는, 다중 샘플 모드에 의해 특정된, 각각의 서브-픽셀 샘플 위치에 대한 컬러 파라미터들 및 텍스처 파라미터들을 계산한다.
프레그먼트 파라미터들 및 프레그먼트 프로그램 명령어들 이외에, 일부 실시예들에서, 파라미터 보간 유닛(615)은 중심 정보를 텍스처 맵 유닛(680)으로 출력한다. 그러한 실시예들에서, 중심 정보는, 도 5A와 관련하여 앞서 설명된 바와 같이, LOD(level of detail) 유닛(620)에 의해 텍스처 맵 LOD를 계산하는 데 사용된다. LOD 유닛(620)의 다른 실시예에서, LOD 유닛(620)은 중심 인덱스를 수신하고, LOD 유닛(620) 내의 중심 표(625)와 같은 중심 표에 액세스하여 픽셀 오프셋 또는 중심 서브-픽셀 샘플 위치를 획득해서 텍스처 맵 LOD를 계산한다.
텍스처 맵 유닛(680)은, 도 5A와 관련하여 설명된 바와 같이, 중심 서브-픽셀 샘플 위치 및 텍스처 맵 LOD를 사용하여 계산된 프레그먼트 파라미터들을 사용해서 텍스처 맵 좌표들 및 대응되는 어드레스들을 결정한다. 조합기 유닛(685)은 필터링된 텍스처 샘플을, 컬러와 같은, 프레그먼트 파라미터들을 사용하여 생성된 임의의 다른 프레그먼트 데이터와 조합하고, 처리된 프레그먼트 데이터를 수집기 유닛(690)으로 출력한다. 수집기 유닛(690)은 각각의 텍스처 맵 유닛(680)으로부터 처리된 프레그먼트 데이터를 수집하고 처리된 프레그먼트 데이터를 래스터 연산 유닛(265)으로 출력한다.
도 6B는, 본 발명의 하나 이상의 양태들에 따른, 중심 서브-픽셀 위치를 결정하는 방법의 실시예를 예시한다. 단계 650에서, 중심 계산 유닛(600)은 픽셀에 대한 커버리지 데이터를 수신하는데, 구체적으로, 커버리지 데이터는 픽셀 내의 어떤 서브-픽셀 위치들이 픽셀과 교차하는 프레그먼트 내에 있는지를 지시한다. 단계 655에서, 중심 제어 유닛(505)은 커버리지 데이터 및 다중 샘플 모드를 사용하여 저장 소자(610)의 엔트리를 판독한다. 일부 실시예들에서, 저장 소자(610)는, 표 4, 표 5, 및 표 6과 같은, 각각의 다중 샘플 모드를 위한 표를 포함한다. 다른 실시예들에서는, 단일 표가 수개의 다중 샘플 모드들을 위한 중심 인덱스들을 포함한다.
단계 657에서, 중심 제어 유닛(605)은 중심 인덱스를 수신하고 중심 인덱스를 파라미터 보간 유닛(615)으로 출력한다. 파라미터 보간 유닛(615)은 중심 인덱스를 사용하여 중심 표(625)로부터 중심 정보, 예를 들어, 픽셀 오프셋 또는 중심 서브-픽셀 샘플 위치를 판독한다. 단계 660에서, 파라미터 보간 유닛(615)은 중심 정보를 사용하여 픽셀 오프셋을 결정한다. 다른 실시예에서, 파라미터 보간 유닛(615)은 중심 정보를 사용하여 중심 서브-픽셀 샘플 위치를 결정한다.
도 6C는, 본 발명의 하나 이상의 양태들에 따른, 중심 서브-픽셀 위치를 결정하고 프레그먼트 파라미터들을 계산하는 방법의 실시예를 예시한다. 단계들(650, 655, 657, 및 660)은, 도 6B와 관련하여 앞서 설명된 바와 같이 진행한다. 단계 665에서, 파라미터 보간 유닛(515)은 픽셀 오프셋을 사용하여 하나 이상의 프레그먼트 파라미터들을 계산한다. 프레그먼트 파라미터들은, 중심 서브-픽셀 샘플 위치를 포함하는 하나 이상의 서브-픽셀 샘플 위치들에서 계산될 수 있다.
단계 670에서, 파라미터 보간 유닛(615)은 프레그먼트 파라미터 및 중심 정보를 텍스처 맵 유닛(680)으로 출력하고 텍스처 맵 유닛(680) 내의 LOD 유닛(620)은 프레그먼트를 위한 텍스처 맵 LOD를 계산한다. 당업자들이라면, 도 6B 및 도 6C의 방법 단계들을 수행하도록 구성된 임의 시스템 또는 그들의 등가물들이 본 발명의 범위내에 해당된다는 것을 알 수 있을 것이다.
본 발명은 특정 실시예들을 참조하여 전술되었다. 그러나, 당업자들이라면, 첨부된 청구항들에서 기술된 발명의 광범위한 정신 및 범위를 벗어나지 않으면서, 그것에 대한 다양한 수정들 및 변경들이 이루어질 수 있다는 것을 알 수 있을 것이다. 예를 들어, 다른 실시예들에서는, 여기에서 기술된, 변위된 픽셀 중심을 계산하고 중심 서브-픽셀 샘플 위치를 결정하기 위한 기술들이 부분적으로 또는 전체적으로 셰이더 또는 다른 그래픽 프로그램으로 구현될 수도 있다. 따라서, 전술한 설명 및 도면들은 한정적인 의미가 아니라 예시적인 것으로 간주되어야 한다. 청구항에서 명시적으로 진술되지 않는다면, 방법 청구항들에서의 단계들의 열거가 단계들을 임의의 특정 순서로 수행한다는 것을 함축하지 않는다. 청구항들 내에서, 요소 레터링(element lettering)(예를 들어, "a)", "b)", "i)", "ii)" 등)은 단계들 또는 다른 연산들을 수행하기 위한 임의의 특정 순서를 지시하는 것은 아니며; 레터링은 그 요소들을 간단하게 언급하기 위해 포함된다.