상기 목적들을 달성하기 위하여, 본 발명의 일 측면에 따르면, 명령어, 대상 오퍼런드(destination operand) 및 소스 오퍼런드(source operand)로 구성되는 정점 프로그램(vertex program)을 실행코드(op code) 필드, 대상 오퍼런드 필드, 소스 오퍼런드 필드 및 상수(constant) 필드로 구성되는 기계어 코드로 번역하는 번역 장치; 및
상기 번역 장치로부터 인가되는 상기 기계어 코드를 읽고(fetch) 해독(decode)하여 상기 정점 프로그램에 따른 좌표 변환과 조명 효과를 나타내는 정점 프로세싱(vertex processing)을 수행하는 정점 프로세싱 장치를 포함하되, 상기 정점 프로그램은 프로그래밍 가능한 쉐이더(programmable shader) 기반의 그래픽 연산을 지원하는 임베디드 시스템(embedded system)이 제공될 수 있다.
바람직하게는, 상기 기계어 코드는 64 비트로 구성될 수 있다.
여기서, 상기 실행코드 필드는 상기 명령어를 구분하기 위한 6 비트 영역이고,상기 대상 오퍼런드 필드는 상기 명령어의 수행 결과를 저장할 레지스터의 종류, 인덱스 및 마스크 정보를 포함하는 9 비트 영역이며, 상기 소스 오퍼런드 필드는 상기 명령어의 수행에 필요한 레지스터의 종류, 인덱스 및 스위즐(swizzle) 정보를 포함하는 15 비트 영역이고, 상기 상수 필드는 상기 소스 오퍼런드 필드의 인덱스 정보와 조합하여 확장 인덱스 역할을 하는 3 비트 영역이고, 상기 인덱스 정보는 4 비트 영역일 수 있다.
또한, 상기 기계어 코드는 상기 소스 오퍼런드 필드와 함께 확장 스위즐(extended swizzle) 연산을 제공하는 8 비트 영역인 확장 스위즐 필드를 더 포함할 수 있다.
그리고 상기 소스 오퍼런드 필드는 1 내지 3개 중 어느 하나일 수 있다.
상기 목적들을 달성하기 위하여, 본 발명의 다른 측면에 따르면, 정점 프로세싱(vertex processing)을 수행하는 정점 프로세싱 장치에 있어서, 정점 데이터(vertex data)를 저장하는 속성 레지스터(attribute register); 정점 프로세싱에 사용되는 상수 데이터를 저장하는 상수 레지스터(constant register); 상기 정점 프로세싱 중 생성되는 임시 데이터를 저장하는 임시 레지스터(temporary register); 상기 상수 레지스터에 저장된 상수 데이터의 상대적인 위치(offset)를 읽기 위해 기본주소(base address)를 저장하는 주소 레지스터(address register); 상기 정점 프로세싱에 의해 연산 처리된 출력 데이터를 저장하는 출력 레지스터(output register); 및 입력된 기계어 코드를 해석하여 명령어(instruction)를 순차적으로 하나씩 읽고(fetch) 해독(decode)하며 상기 정점 프로세싱을 수행(operate)하는 정점 프로세서(vertex processor)를 포함하는 정점 프로세싱 장치가 제공될 수 있다.
바람직하게는, 상기 속성 레지스터, 상기 상수 레지스터, 상기 임시 레지스터 및 상기 출력 레지스터는 4개의 실수 저장 공간으로 구성될 수 있다.
또한, 상기 정점 데이터는 정점의 좌표, 주색상(primary color), 부색상(secondary color), 법선 벡터, 정점 가중치, 안개 좌표 및 텍스처 좌표의 속성 데이터를 포함할 수 있다.
그리고 상기 속성 레지스터의 수는 16개 이상이고, 상기 상수 레지스터의 수는 96개 이상이며, 상기 임시 레지스터의 수는 12개 이상이고, 상기 출력 레지스터의 수는 13개 이상일 수 있다.
상기 목적들을 달성하기 위하여, 본 발명의 또 다른 측면에 따르면, 프로그래밍 가능한 쉐이더 기반의 그래픽 연산을 지원하는, 명령어, 대상 오퍼런드 및 소스 오퍼런드로 구성되는 정점 프로그램이 번역된 실행코드 필드, 대상 오퍼런드 필드, 소스 오퍼런드 필드 및 상수 필드로 구성되는 기계어 코드를 읽고 해독하는 디코더(decoder)에 있어서, 상기 실행코드 필드로부터 상기 명령어의 종류를 해석하는 실행코드 필드 해독부; 상기 대상 오퍼런드 필드로부터 상기 명령어의 실행 결 과를 저장하는 레지스터를 판독하는 대상 오퍼런드 필드 해독부; 및 상기 소스 오퍼런드 필드로부터 상기 명령어의 실행을 위한 피연산자가 되는 레지스터를 판독하는 소스 오퍼런드 필드 해독부를 포함하는 디코더가 제공될 수 있다.
바람직하게는, 상기 대상 오퍼런드 필드 해독부는 상기 실행 결과를 저장할 레지스터의 종류를 결정하는 종류 결정부; 상기 종류 결정부에서 결정된 종류의 레지스터들 중 상기 실행 결과를 저장할 레지스터의 인덱스를 결정하는 인덱스 결정부; 및 상기 레지스터의 성분(component) 중 업데이트될 성분을 선택하는 성분 선택부를 포함하되, 상기 레지스터는 각각 실수값을 가지는 4개의 성분을 가질 수 있다.
여기서, 상기 종류 결정부에 의해 결정되는 레지스터의 종류는 임시 레지스터 또는 출력 레지스터일 수 있다.
또한, 상기 소스 오퍼런드 필드 해독부는 상기 피연산자에 해당하는 레지스터의 종류를 결정하는 종류 결정부; 상기 종류 결정부에서 결정된 종류의 레지스터들 중 저장된 성분을 읽어올 레지스터의 인덱스를 결정하는 인덱스 결정부; 상기 레지스터의 각 성분 중 연산에 필요한 성분의 순서를 결정하여 선택하는 성분 선택부; 및 상기 각 성분의 부호 반전 여부를 결정하는 부호 결정부를 포함하되, 상기 레지스터는 각각 실수값을 가지는 4개의 성분을 가질 수 있다.
또는 상기 소스 오퍼런드 필드 해독부는 상기 소스 오퍼런드 필드 및 선택된 상기 소스 오퍼런드 필드 이외의 소스 오퍼런드 필드 중 하나에 포함된 확장 스위즐(extended swizzle) 필드를 조합하여 해독하되, 상기 확장 스위즐 필드는 부호 반전 여부를 결정하는 부호 반전 필드 및 확장 스위즐 연산을 결정하는 스위즐 확장 필드를 가질 수 있다. 여기서, 상기 소스 오퍼런드 필드 해독부는 상기 피연산자에 해당하는 레지스터의 종류를 결정하는 종류 결정부; 상기 종류 결정부에서 결정된 종류의 레지스터들 중 저장된 성분을 읽어올 레지스터의 인덱스를 결정하는 인덱스 결정부; 상기 스위즐 확장 필드로부터 상기 레지스터의 각 성분의 값이 미리 정해진 값인지 다른 성분의 값인지를 결정하는 스위즐 결정부; 상기 스위즐 결정부의 결정 결과에 따라 연산에 필요한 성분값을 결정하여 선택하는 성분 선택부; 및 상기 각 성분의 부호 반전 여부를 결정하는 부호 결정부를 포함하되, 상기 레지스터는 각각 실수값을 가지는 4개의 성분을 가지고, 상기 미리 정해진 값은 0 또는 1일 수 있다. 그리고 상기 성분 선택부는 상기 레지스터의 각 성분 중 연산에 필요한 성분의 순서를 결정하여 선택할 수 있다.
바람직하게는, 상기 종류 결정부에 의해 결정되는 레지스터의 종류는 임시 레지스터 또는 속성 레지스터일 수 있다.
또는 상기 종류 결정부에 의해 결정되는 레지스터의 종류는 상수 레지스터이고, 상기 인덱스 결정부는 상기 상수 필드와 조합하여 상기 상수 레지스터의 확장 인덱스를 결정할 수 있다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 임베디드 시스템, 정점 프로세싱 장치 및 디코더의 바람직한 실시예를 상세히 설명한다. 본 발명을 설명함에 있어서, 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 본 명세서의 설명 과정에서 이용되는 숫자(예를 들어, 제1, 제2 등)는 동일 또는 유사한 개체를 순차적으로 구분하기 위한 식별기호에 불과하다.
본 발명에서 정점 프로세싱(vertex processing)이라 함은 프로그래밍 가능한 파이프라인을 통해 정점 데이터를 이용하여 사용자가 원하는 좌표 변환과 조명 계산에 의한 효과가 가능하도록 정점 데이터를 처리하는 것을 의미한다.
도 4는 본 발명의 바람직한 일 실시예에 따른 정점 프로세싱 장치의 구조를 나타낸 도면이다.
정점 프로세싱 장치(500)는 정점 프로세서(vertex processor; 510), 속성 레지스터(attribute register; 520), 상수 레지스터(constant register; 540), 임시 레지스터(temporary register; 550), 주소 레지스터(address register; 560), 출력 레지스터(output register; 570)를 포함한다.
기계어 코드(530)는 정점 프로세서(510)에서 수행할 연산 과정을 정의하는 명령어(instruction)가 컴퓨터 등의 기계가 판독가능한 기계어(machine language)로 변환된 코드이다.
정점 프로세서(vertex processor; 510)는 기계어 코드(530)를 해석하여 주변의 저장 장치(즉, 다양한 레지스터들)와 내부의 연산 장치를 이용하여 정점 프로세싱을 수행한다. 내부의 연산 장치는 기계어 코드(530)로 변환된 명령어를 순차적으로 하나씩 읽고(fetch) 해독(decode)하여 상응하는 동작을 수행(operate)하는 일련 의 과정을 행한다.
정점 데이터(vertex data; 525)는 화면 상에 표현하고자 하는 물체를 구성하는 각 폴리곤들의 정점의 스트림 데이터(stream data)이다. 화면 상에서 물체를 3차원적으로 표현하고자 하면, 표현하고자 하는 사물의 모양을 삼각형 형태의 폴리곤 집합으로 구분하고, 폴리곤을 구성하는 3개의 정점 데이터를 정점 프로세싱 과정을 통해 처리함으로써 3차원 화상을 만들어낸다.
정점 데이터(525)는 각 정점에 대한 좌표(position), 색상(color), 법선 벡터(normal vector), 텍스처 좌표(texture coordinate) 등과 같은 속성 데이터(attribute data)를 포함한다. 각각의 속성 데이터는 4개의 실수 집합으로 이루어진다. 예를 들어, 좌표 속성 데이터는 3차원을 나타내는 x, y, z 값과 투영(projection) 정도를 나타내는 w 값의 4개 실수 정보를 가지고, 색상 속성 데이터는 기본 삼원색의 밝기값인 r(red), g(green), b(blue) 값과 불투명도를 나타내는 알파(a) 값의 4개 실수 정보를 가진다.
정점 데이터(525)는 OpenGL ARB extension 1.0 구조에서 최소 16개의 속성 데이터를 지원한다. 좌표, 주색상(primary color), 부색상(secondary color), 법선 벡터, 정점 가중치, 안개 좌표 등의 8개와 제1 텍스처 좌표, 제2 텍스처 좌표, 제3 텍스처 좌표 등 최대 8개의 텍스처 좌표에 관한 속성 데이터를 지원할 수 있다.
정점 데이터(425)는 속성 레지스터(attribute register; 520)에 그 값이 저장되거나 속성 레지스터(520)에 정점 데이터(425)를 참조할 수 있는 주소가 저장된다. 정점 프로세서(510)는 속성 레지스터(520)에 저장된 값을 읽거나 저장된 주소 를 참조하여 정점 데이터(525)를 입력받을 수 있게 되며, 정점 데이터(525)의 읽기만이 가능하고 변경이나 쓰기는 불가능하다.
상수 레지스터(constant register; 540)는 상수 데이터(545)를 저장하거나 상수 데이터(545)를 참조할 수 있는 주소를 저장한다. 상수 데이터(545)는 정점 프로세서(510)에서 정점 프로세싱을 수행함에 있어서 사용되는 값들이다. 예를 들어 상수 데이터(545)는 행렬 계산을 위한 값이나 특정 색상 값, 조명 계산을 위한 값 등이며, 각 상수 데이터(545)는 4개의 실수 집합으로 구성된다. OpenGL ARB extension 1.0 구조에서 최소 96개의 상수 데이터를 지원한다. 상수 레지스터(540)는 읽기만이 가능하며 변경이나 쓰기는 불가능하다.
임시 레지스터(550)는 정점 프로세서(510)가 정점 프로세싱을 수행하는 동안에 사용되는 임시 변수를 저장한다. 정점 프로세싱을 위해 사용되는 속성 데이터 또는 상수 데이터가 모두 4개의 실수 집합으로 이루어지기 때문에, 임시 레지스터(550) 역시 기본적으로 4개의 실수 집합으로 구성된다.
임시 레지스터(550)는 OpenGL ARB 1.0 구조에서 최소 12개를 지원하도록 하고 있으며, 특수 용도를 위한 4개를 추가적으로 지원하여 총 16개를 지원한다. 정점 프로세싱이 수행되는 동안에 정점 프로세서(510)는 임시 레지스터(550)에 임의의 데이터를 쓰거나 읽을 수 있다.
주소 레지스터(560)는 상수 레지스터(540)를 이용하여 상수 데이터(525)를 읽고자 할 때 참조의 기본이 되는 기본 주소(base address)를 저장한다. 기본 주소를 이용하여 정점 프로세서(510)가 정점 프로세싱 중에 필요로 하는 상수 데이터 (525)가 저장된 주소까지의 오프셋(offset)으로 상수 데이터(525)가 저장된 상대적인 위치를 참조하여 읽어온다.
출력 레지스터(570)는 정점 프로세서(510)에 의해 정점 프로세싱을 수행한 결과 출력되는 출력 데이터를 저장한다. 정점 프로세싱을 거친 출력 데이터 즉, 출력 변수는 도 1에 도시된 바와 같이 프리미티브 어셈블리(120), 래스터라이저(130), 픽셀 프로세싱(140) 등의 그래픽스 파이프라인을 따르게 된다. OpenGL ARB extension 1.0 구조에서 최소 13개의 출력 레지스터(570)을 지원하도록 하고 있으며, 각 출력 레지스터(570)는 4개의 실수 집합이 저장가능하도록 구성된다. 출력 레지스터(570)는 쓰기만이 가능하다.
본 발명에서 기계어 코드(530), 정점 데이터(525), 상수 데이터(545)는 상술한 레지스터라는 별도의 저장 장치 없이, 메모리 상에 저장되어 있는 각 데이터에 대한 포인터(pointer)를 통해 직접 참조하는 방식이 사용가능하다. 이는 각 데이터에 대하여 별도의 저장 공간을 할당하여 각 데이터를 복사하는 과정에서 발생하는 시간 지연을 줄이기 위함이며, 기계어 코드(530), 정점 데이터(525), 상수 데이터(545)는 정점 프로세서(510)에서 읽기 용도로만 사용되기 때문이다.
임시 레지스터(550), 주소 레지스터(560), 출력 레지스터(570)는 정점 프로세서(510)에서 정점 프로세싱의 수행 중 각 레지스터에 저장되는 데이터의 쓰기 동작이 이루어지는 장치이다. 정점 프로세싱 장치(500)의 환경 설정을 초기화하는 단계에서 각 레지스터의 크기만큼 메모리를 할당하여 사용한다.
상술한 정점 프로세싱 장치(500)에서 정점 프로그램을 이용하여 정점 프로세 싱(좌표 변환 및 조명 효과 계산 등) 동작을 수행하기 위해서는 정점 프로그램을 정점 프로세싱 장치(500)가 읽고 해독할 수 있는 기계어 코드로 변역해주는 번역 장치(미도시)가 필요하다.
번역 장치는 명령어, 대상 오퍼런드(destination operand), 소스 오퍼런드(source operand)로 구성되는 정점 프로그램을 실행코드 필드, 대상 오퍼런드 필드, 소스 오퍼런드 필드, 상수 필드로 구성되는 기계어 코드로 번역한다.
번역 장치 및 정점 프로세싱 장치(500)는 본 발명에 따른 프로그래밍 가능한 쉐이더 기반의 그래픽 연산을 지원하는 임베디드 시스템(embedded system)에 포함된다. 임베디드 시스템은 OpenGL ES 2.0을 기반으로 하고 있다.
이하에서는 정점 프로그램에서 사용되는 명령어(instruction) 집합 및 번역 장치에서의 번역 방법, 디코더에서의 해독 방법에 대해 상세히 설명한다. 디코더는 추후 상세히 설명한다.
도 5는 본 발명에 따른 정점 프로그램에서 사용되는 명령어 집합을 나타낸 도면이다.
정점 프로세싱 장치(500)는 정점 프로세서(510)에서 상술한 28개의 기본 명령어와 3개의 매크로 명령어로 이루어지는 기계어 코드를 해석하여 연산함으로써 정점 프로세싱 동작을 수행한다. 명령어는 정점 프로세싱 동작 중 어떤 연산을 수행할지를 나타낸다. 정점 프로세싱을 위한 정점 프로그램은 사용자(예를 들어, 프로그래머)의 편의를 위해 어셈블리 언어와 유사한 저급 언어(low-level language)를 통해 프로그래밍이 가능하며, 어셈블러를 통해 정점 프로세싱 장치(500)에서 실 행가능한 기계어 코드로 번역된다. 기본적인 문법 구조(syntax)는 수학식 1과 같은 실행코드(op code), 대상 오퍼런드(destination operand), 소스 오퍼런드(source operand)로 구성된다.
<수학식 1>
opcode destination operand, source operand0, (source operand1, source operand2);
대상 오퍼런드 및/또는 소스 오퍼런드는 각 레지스터와 바인드된 변수 또는 레지스터의 이름을 직접 쓰고 있으며, 본 발명에서는 오퍼런드의 참조를 위해 각 레지스터의 인덱스(index) 주소를 사용한다. 예를 들면 다음의 수학식 2와 같다.
<수학식 2>
PARAM Colr = program.local[0]; … ①
OUTPUT oColr = result.color; … ②
MOV oColr, Colr; … ③
MOV result.color, program.local[0]; … ④
① 식은 상수 레지스터(program.local)의 인덱스 0번을 변수 Colr에 바인드하라는 명령이다. ② 식은 변수 oColr에 출력 인덱스 2번(result.color)을 바인드하라는 명령이다. ③ 식은 Colr 변수의 값을 oColr 변수로 MOV 연산을 수행하라는 명령이다. ④ 식은 상수 레지스터의 인덱스 0번을 출력 인덱스 2번으로 MOV 연산을 수행하라는 명령이다. 여기서, PARAM, OUTPUT은 지정자(qualifier)로써 PARAM은 대상 변수가 상수임을 나타내고 OUTPUT은 대상 변수가 결과값을 저장할 대상임을 나 타낸다.
도 5를 참조하면, 정점 프로세서(510)에서 처리되는 명령어는 28개의 기본 명령어(primitive instruction)와 3개의 매크로 명령어(macro instruction)으로 구성된다. dest는 대상 오퍼런드(destination operand), src는 소스 오퍼런드(source operand)를 나타낸다. 특히, src0은 제1 소스 오퍼런드, src1은 제2 소스 오퍼런드, src2는 제3 소스 오퍼런드를 나타낸다. 각각의 명령어는 기본적으로 대상 오퍼런드를 가지고 있으며, 연산 내용에 따라 소스 오퍼런드는 1~3개를 가지게 된다. 4 성분 벡터(4 component vector)는 상술한 바와 같이 각 데이터가 4개의 실수 집합으로 이루어지므로, [x, y, z, w]의 벡터 형식을 가진다. s 스칼라(scalar)는 x 성분만을 가지는 값이고, ssss 스칼라는 x, y, z, w의 4 성분을 가지되 모두 동일한 값이다.
28개의 기본 명령어는 다음과 같다.
(1) ABS(Absolute value)는 4 성분 벡터에 해당하는 src0의 x, y, z, w 각 성분의 절대값을 dest의 x, y, z, w에 각각 대입한다. (2) ADD(Add two vectors)는 4 성분 벡터에 해당하는 src0과 src1의 x, y, z, w 각 성분의 값을 더하여 dest의 x, y, z, w에 각각 대입한다. (3) ARL(Address register load)은 s 스칼라에 해당하는 src0에 저장된 값 이하 가장 큰 정수를 a0(주소 레지스터임)에 대입한다. 상술한 바에 의하면 a0에 대입되는 값이 기본 주소가 된다. (4) DP3(3-component dot product)는 4 성분 벡터에 해당하는 src0과 src1 중 x, y, z의 3 성분에 대하여 내적(dot product)을 구한 뒤, 내적값을 ssss 스칼라인 dest의 4 성분에 대입한다. (5) DP4(4-component dot product)는 4 성분 벡터에 해당하는 src0과 src1의 x, y, z, w의 4 성분에 대하여 내적을 구한 뒤, 내적값을 ssss 스칼라인 dest의 4 성분에 대입한다. (6) DPH(Homogeneous dot product)는 4 성분 벡터에 해당하는 src0과 src1 중 x, y, z의 3 성분에 대하여 내적을 구한 뒤 내적값을 4 성분 벡터인 dest의 x, y, z에 대입하고, src1의 w 성분의 값을 dest의 w 성분에 대입한다. src0의 w 성분을 1.0으로 설정하고 src0과 src1에 대하여 DP4 연산을 적용한 것과 같은 결과이다. (7) DST(Distance vector)는 2개의 특수한 포맷을 가지는 오퍼런드로부터 거리 벡터(distance vector)를 계산한다. 4 성분 벡터인 src0과 src1(여기서, src0은 [NA, d2, d2, NA], src1은 [NA, 1/d, NA, 1/d]이고, NA는 계산과 관련없으며 d는 벡터 크기를 의미함)에 대해 4 성분 벡터인 dest의 x 성분은 1.0을, y 성분은 src0과 src1의 y 성분의 곱을, z 성분은 scr0의 z 성분을, w 성분은 src1의 w 성분을 대입하여 dest가 [1.0, d, d2, 1/d] 형태가 되도록 한다. (8) EX2(exponential base 2)는 2를 밑(base)으로 하고 s 스칼라인 src0을 지수로 하여 2src0을 ssss 스칼라인 dest의 4 성분에 각각 대입한다. (9) EXP(exponential base 2(approximate))는 2를 밑(base)으로 하고 s 스칼라인 src0을 지수로 하여 2src0의 부분적으로 정확한 값을 4 성분 벡터인 dest에 대입한다. dest의 x 성분에는 src0의 정수부분(src0 이하 가장 큰 정수)에 대해 2의 지수를 취한 형태를 대입하고, y 성분에는 src0의 소수부분(src0으로부터 src0 이하 가장 큰 정수를 뺀 값)을 대입하며, z 성분에는 src0의 대략적인 2의 지수를 취한 형태를 대입하고, w 성분에는 1.0을 대입한다. (10) rEX2(exponential base 2(approximate))는 2를 밑(base)으로 하고 s 스칼라인 src0을 지수로 하여 2src0의 대략적인 값을 ssss 스칼라인 dest의 4 성분에 각각 대입한다. (11) FLR(floor)는 4 성분 벡터에 해당하는 src0의 각 성분의 정수부분(src0 이하 가장 큰 정수)을 4 성분 벡터에 해당하는 dest의 각 성분에 대입한다. (12) FRC(fraction)는 4 성분 벡터에 해당하는 src0의 각 성분의 소수부분(src0으로부터 src0 이하 가장 큰 정수를 뺀 값)을 4 성분 벡터에 해당하는 dest의 각 성분에 대입한다. (13) LG2(logarithm base 2)는 s 스칼라에 해당하는 src0에 대하여 밑(base)이 2인 로그값을 ssss 스칼라인 dest의 각 성분에 대입한다. (14) LOG(logarithm base 2(approximate))는 s 스칼라에 해당하는 src0에 대하여 밑(base)이 2인 로그값의 대략적인 값을 4 성분 벡터인 dest에 대입한다. dest의 x 성분에는 src0에 대하여 밑(base)이 2인 로그값의 정수부분을 대입하고, y 성분에는 src0의 값을 dest의 x 성분 만큼 오른쪽 쉬프트 연산한 값을 대입하며 w 성분에는 1.0을 대입한다. (15) rLG2(logarithm base 2(approximate))는 s 스칼라에 해당하는 src0에 대하여 밑(base)이 2인 대략적인 로그값을 ssss 스칼라인 dest의 각 성분에 대입한다. (16) MAD(Multiply and add)는 본 발명에서의 명령어 중에서 유일하게 소스 오퍼런드를 3개 모두 사용한다. 4 성분 벡터인 src0와 src1의 각 성분의 곱에 src2의 각 성분을 더한 값을 4 성분 벡터인 dest의 각 성분에 대입한다. (17) MAX(Maximum)는 4 성분 벡터인 src0과 src1의 각 성분 중 큰 값을 4 성분 벡 터인 dest의 각 성분에 대입한다. (18) MIN(Minimum)는 4 성분 벡터인 src0과 src1의 각 성분 중 작은 값을 4 성분 벡터인 dest의 각 성분에 대입한다. (19) MOV(Move)는 4 성분 벡터인 src0의 각 성분의 값을 4 성분 벡터인 dest의 각 성분에 대입한다. (20) MUL(Multiply)는 4 성분 벡터인 src0과 src1의 각 성분의 곱을 4 성분 벡터인 dest의 각 성분에 대입한다. (21) RCP(Reciprocal)는 s 스칼라인 src0의 값의 역수를 ssss 스칼라인 dest의 각 성분에 대입한다. (22) RSQ(Reciprocal square root)는 s 스칼라인 src0의 제곱근(square root)의 역수를 ssss 스칼라인 dest의 각 성분에 대입한다. (23) SGE(set on Greater than or equal)는 4 성분 벡터인 src0과 src1의 각 성분을 비교하여 4 성분 벡터인 dest의 각 성분에 src0이 src1보다 크거나 같으면 1.0을, 작으면 0.0을 대입한다. (24) SLT(set on less than)는 4 성분 벡터인 src0과 src1의 각 성분을 비교하여 4 성분 벡터인 dest의 각 성분에 src0이 src1보다 작으면 1.0을, 크거나 같으면 0.0을 대입한다. (25) SWZ(extended swizzle)는 4 성분 벡터인 src0의 각 성분, 1.0, 0.0을 로드하고 4 성분 벡터인 dest의 각 성분에 대해 부호 반전(negation)이 있는지 여부와 6개의 값(src0의 각 성분, 1.0, 0.0) 중 어느 하나의 값을 조합하여 대입한다. (26) XPD(cross product)는 4 성분 벡터인 src0과 src1의 x, y, z의 3 성분의 외적(cross product)를 구하여 그 외적값을 4 성분 벡터인 dest의 x, y, z 성분에 대입한다. w 성분은 정의되지 않는다. (27) clamp(MAX on x, y component and SLT on z component)는 4 성분 벡터인 src0과 src1에 대하여 x, y 성분은 MAX 연산을, z 성분은 SLT 연산을 하여 4 성분 벡터인 dest의 x, y, z 성분에 대입한다. (28) mulz(MOV on x, y, w component and MUL on z component)는 4 성분 벡터인 src0의 x, y, w 성분을 4 성분 벡터인 dest의 대응하는 성분에 대입하고, src0의 z 성분과 4 성분 벡터인 src1의 z 성분의 곱을 dest의 z 성분에 대입한다.
3개의 매크로 명령어는 다음과 같다.
(1) LIT(compute light coefficients)는 각 정점마다의 주변광, 산란광, 반사광에 의한 조명 효과를 가속하기 위한 연산이다.
LIT 연산은 수학식 3과 같은 기본 명령어의 집합으로 구성된다.
<수학식 3>
LIT f, a, b
Clamp tmp, a.0, b
rLG2 tmp.w tmp.w
MUL tmp.w tmp.w tmp.y
rEX2 tmp.w tmp.w
mulz f, tmp1.1xz1, tmp.w
(2) POW(exponentiate)는 s 스칼라인 src0과 src1에 대해서 src0src1을 구하여 ssss 스칼라인 dest에 대입한다. POW 연산은 수학식 4와 같은 기본 명령어의 집합으로 구성된다.
<수학식 4>
POW f, a, b (f = ab)
LG2 tmp, a
MUL tmp, tmp, b
EX2 f, tmp
(3) SUB(subtract)는 4 성분 벡터인 src0의 각 성분으로부터 src1의 각 성분의 값을 뺀 값을 4 성분 벡터인 dest의 각 성분에 대입한다. SUB 연산은 수학식 5와 같은 기본 명령어의 집합으로 구성된다.
<수학식 5>
SUB f, a, b (f = a - b)
ADD f, a, -b
3개의 매크로 명령어는 28개의 기본 명령어들로 재구성할 수 있으며, 정점 프로세서(510)는 정점 프로세싱 과정에서 매크로 명령어를 수학식 1 내지 3에 표현된 것과 같은 기본 명령어의 집합으로 해석한다. 따라서, 실제 정점 프로세싱 장치(500)에서 사용되는 명령어는 28개의 기본 명령어이며, 다른 명령어에 대하여 확장이 가능하다.
본 발명에서 사용하는 오퍼런드는 다음과 같은 조작이 가능하다.
소스 스위즐(source swizzle) : 소스 오퍼런드는 4 성분 타입의 레지스터이며, 각 성분에 대하여 도 6에 도시된 바와 같이 대상 오퍼런드의 값을 선택할 수 있다. 도 6은 본 발명에 따른 스위즐 동작을 설명하기 위한 예시도이다.
R2로 표현된 소스 오퍼런드에 대해서 R2.yzwx는 R2의 각 성분의 값에 대하여 y 성분의 값을 첫번째 성분으로, z 성분의 값을 두번째 성분으로, w 성분의 값을 세번째 성분으로, x 성분의 값을 네번째 성분으로 가정하여 대상 오퍼런드인 R1에 대입하게 된다. 따라서, R2에서 [7.0, 3.0, 6.0, 2.0]으로 저장되어 있던 성분 값들이 R1에서는 [3.0, 6.0, 2.0, 7.0]으로 스위즐되어 대입된다. 즉, 스위즐 동작에 의해 소스 오퍼런드의 4 성분에 저장된 값을 직접 변화시키지는 않고 연산 필요에 따라 성분 순서를 바꿀 수 있다.
소스 부호 반전(source negation) : 소스 오퍼런드에 대해서 부호 사용이 가능하다. 소스 오퍼런드를 나타내는 변수에 음(-) 부호를 부가하면, 소스 오퍼런드의 각 성분에 해당하는 값들에 대해 부호 반전이 일어난다.
대상 마스크(destination mask) : 대상 오퍼런드는 4 성분 타입의 레지스터이며, 각 성분에 대하여 도 7에 도시된 바와 같이 결과를 쓸 성분을 선택할 수 있다. 도 7은 본 발명에 따른 대상 마스크 동작을 설명하기 위한 예시도이다.
R1로 표현된 대상 오퍼런드의 x 성분과 w 성분에만 R2로 표현된 소스 오퍼런드에서 대응되는 성분에 부호 반전한 값을 대입한다. R1의 x 성분에는 -7.0이, w 성분에는 -2.0이 대입되고, y, z 성분은 변화없이 그대로 0.0의 값을 가진다.
도 8은 본 발명의 바람직한 일 실시예에 따른 기계어 코드의 포맷(format)을 나타낸 도면이고, 도 9 내지 도 12는 각 필드를 상세히 나타낸 도면이다. 상술한 명령어를 이용하여 프로그래머가 작성한 정점 프로그램은 어셈블러를 통해 정점 프로세싱 장치(500)에서 실행가능한 기계어 코드로 번역된다. 기계어 코드는 수학식 1에 도시된 형식을 지원하며, 총 64 비트(bit) 구조를 가진다.
도 8을 참조하면, 기계어 코드는 실행코드(op code) 필드[63:58], 미사용 비트(unused bit) 필드[57], 대상 오퍼런드(destination operand) 필드[56:48], 제1 소스 오퍼런드(source operand0) 필드[47:33], 제2 소스 오퍼런드(source operand1) 필드[32:18], 제3 소스 오퍼런드 필드(source operand2)[17:3], 상수(constant) 필드[2:0]로 구성된다. 여기서, [a:b]는 0(최하위 비트; least significant bit) 내지 63(최상위 비트; most significant bit) 중에서 해당 필드가 차지하는 b 내지 a번째 비트를 나타낸다.
이중 제3 소스 오퍼런드 필드[17:3] 중 일부[11:3]는 확장 스위즐 필드와 중첩되는 필드이다. 상술한 명령어 중에서 제3 소스 오퍼런드를 필요로 하는 명령어는 MAD 뿐이므로, MAD 명령어 동작 수행시에만 제3 소스 오퍼런드 필드로 활용되고 그 외에는 제1 소스 오퍼런드의 확장 스위즐 필드로 사용된다.
도 9를 참조하면, 실행코드 필드[63:58](900)는 명령어를 구분하기 위한 비트 필드로서, 6 비트의 공간을 할당받는다. 6 비트의 공간이므로, 총 64(=26)개의 명령어가 지정가능하다. 본 발명에서는 28개의 기본 명령어를 설정하고 있지만, 정점 프로세싱 장치(500) 외에 픽셀 프로세싱 장치에서의 명령어 및 향후 버전의 추가적인 기본 명령어를 위한 공간을 충분히 할당하고 있다. 해당 기술 분야에서 통상의 지식을 가진 자가 본 발명의 사상 내에서 기본 명령어의 추가적인 확장이 가능함은 물론이다.
도 10을 참조하면, 대상 오퍼런드 필드[56:48](1000)는 명령어 수행 결과를 저장할 레지스터의 종류(type), 인덱스(index), 마스크(mask) 정보를 구분하기 위한 비트 필드로서, 9 비트의 공간을 할당받는다. T[56](1 비트)는 대상 오퍼런드의 종류(type)를 결정하며, 예를 들어 0인 경우에 임시 레지스터(550), 1인 경우에 출력 레지스터(570)를 나타낸다. index[55:52](4 비트)는 대상 오퍼런드의 위치 값을 나타낸다. 4 비트이므로, 총 16(=24)개의 구별이 가능하다. 출력 레지스터(570)는 총 13개이며, 임시 레지스터(550)는 정점 프로그램에서 사용하는 12개와 연산 수행시 정점 프로세서(510) 내부에서 사용하는 4개를 합한 16개이므로, 4 비트의 인덱스로 구별이 가능하다. mask[51:48](4 비트)는 오퍼런드의 각 성분(x, y, z, w)에 대한 마스크 플래그(mask flag)이다.
도 11을 참조하면, 제1 소스 오퍼런드 필드[47:33](1100a)는 명령어 수행에 필요한 레지스터의 종류, 인덱스, 스위즐 정보를 구분하기 위한 비트 필드로서, 15 비트의 공간을 할당받는다. 이는 제2 소스 오퍼런드 필드[32:18](1100b), 제3 소스 오퍼런드 필드[17:3](1100c) 역시 마찬가지이다. 이하 제1 소스 오퍼런드 필드(1100a)에 대해 설명한다.
제1 소스 오퍼런드 필드(1100a) 중 n[47](1 비트)은 제1 소스 오퍼런드의 모든 성분의 값에 부호 반전이 있는지 여부를 나타낸다. type[46:45](2 비트)은 소스 오퍼런드에 해당하는 레지스터의 종류를 결정하며, index[44:41](4 비트)는 소스 오퍼런드의 위치 값을 나타낸다. 그리고 src_w[40:39], src_z[38:37], src_y[36:35], src_x[34:33]는 소스 오퍼런드의 각 성분 위치에 대한 스위즐 정보를 나타낸다.
제1 소스 오퍼런드 필드(1100a)는 상술한 바와 같이 MAD 명령어의 동작 수행시를 제외하고는 확장 스위즐이 가능하다. MAD 명령어는 제1 내지 제3 소스 오퍼런드를 모두 필요로 하지만 그 외의 명령어들은 제1 및/또는 제2 소스 오퍼런드를 필요로 하는 바, 제3 소스 오퍼런드 필드(1100c) 중 일부가 도 12에 도시된 바와 같이 확장 스위즐 필드[11:3](1200)로 사용된다.
확장 스위즐 필드(1200)는 제1 소스 오퍼런드의 확장 정보로 사용되며, 부호 반전 필드[11:8](1210)는 x, y, z, w 각 성분에 대한 부호 반전(negation)이 가능하도록 하며, 스위즐 확장 필드[7:3](1220)는 스위즐의 선택에 있어서 x, y, z, w 이외에도 1, 0을 선택할 수 있도록 하여 수학식 6과 같은 사용이 가능하도록 한다.
<수학식 6>
Colr. {-}[01xyzw] {-}[01xyzw] {-}[01xyzw] {-}[01xyzw]
즉, 4 성분 벡터인 Colr 변수에 대하여 각 성분의 값이 부호 반전이 있는지 여부, 0, 1 또는 x, y, z, w 성분 중 어느 하나의 값인지 여부를 확인하게 된다.
제1 소스 오퍼런드(1100a)가 상수 레지스터(540)를 참조하는 경우에 상수 레지스터(540)는 총 96개가 있으므로, 4비트의 인덱스로는 구별이 불가능한 바 확장 인덱스 필드가 필요하다. 여기서, 상수 필드[2:0](3 비트)가 확장 인덱스 필드로 사용된다. 이때 상수 필드[2:0](3 비트)와 인덱스[44:41](4 비트)를 이용하면 총 7 비트 즉, 128(=27)개까지 구별이 가능해지므로, 상수 레지스터(540)의 구별이 가능해진다.
제2 소스 오퍼런드(1100b) 및 제3 소스 오퍼런드(1100c)에 대해서도 확장 스위즐 필드를 이용하는 것 이외에는 상술한 내용이 적용가능하다.
이하에서는 상술한 바와 같이 인코딩된 명령어를 정점 프로세서(510) 내의 디코더에서 해석하는 해독(decoding) 과정에 대해 도 13 이하의 도면을 참조하여 설명한다.
도 13은 본 발명의 바람직한 일 실시예에 따른 디코더(decoder)의 구조를 나타낸 블록도이다. 도 13을 참조하면, 디코더(1300)는 실행코드 필드 해독부(1310), 대상 오퍼런드 필드 해독부(1320) 및 소스 오퍼런드 필드 해독부(1330)를 포함한다. 디코더(1300)에서 해독하는 기계어 코드는 도 6에 도시된 포맷을 따르는 것이 바람직하다.
실행코드 필드 해독부(1310)는 기계어 코드에 포함된 실행코드를 해독하여 현재 연산하고자 하는 명령어의 종류를 해석한다. 예를 들어, MOV 명령어에 해당하는 비트값이 실행코드에 포함된 경우에 미리 저장된 참조표(lookup table) 등을 참조하여 MOV 명령어임을 해석한다. 실행코드 해독은 64 비트로 구성된 기계어 코드로부터 명령어의 종류를 해석하는 과정으로, 앞서 정의한 바와 같이 기계어 코드의 [63:58] 비트 영역에 위치하는 정보를 논리 연산을 통하여 마스크한다.
대상 오퍼런드 필드 해독부(1320)는 기계어 코드에 포함된 대상 오퍼런드 필드로부터 실행코드 필드 해독부(1310)에서 해석한 명령어의 실행에 따른 실행 결과를 저장할 레지스터의 종류, 인덱스 및 업데이트할 성분을 판독한다. 대상 오퍼런 드 필드 해독부(1320)에 대해서는 추후 도 14를 참조하여 상세히 설명한다.
소스 오퍼런드 필드 해독부(1330)는 기계어 코드에 포함된 소스 오퍼런드 필드로부터 실행코드 필드 해독부(1310)에서 해석한 명령어의 실행에 필요한 피연산자가 되는 레지스터의 종류, 인덱스 및 스위즐 정보를 판독한다. 소스 오퍼런드 필드 해독부(1330)에 대해서는 추후 도 15 및 도 16을 참조하여 상세히 설명한다.
도 14는 본 발명의 바람직한 일 실시예에 따른 대상 오퍼런드 필드 해독부(1320)에서의 대상 오퍼런드 해독(및 업데이트) 방법을 나타낸 도면이다.
대상 오퍼런드 필드 해독부(1320)는 종류 결정부(1321), 인덱스 결정부(1322), 성분 선택부(1323)을 포함한다.
종류 결정부(1321)는 실행 결과를 저장할 레지스터의 종류를 결정한다. 대상 오퍼런드로 사용 가능한 레지스터는 임시 레지스터(550) 또는 출력 레지스터(570)이다.
인덱스 결정부(1322)는 종류 결정부(1321)에서 결정된 레지스터의 종류 중에서 실행 결과를 저장할 레지스터의 인덱스 즉, 위치값을 결정한다.
성분 선택부(1323)는 레지스터의 x, y, z, w 각 성분에 대하여 업데이트될 성분을 선택한다. 예를 들어, x, w 성분만이 업데이트될 필요가 있으면 x와 w에 해당하는 마스크 플래그만이 미리 지정된 제1 값(예를 들어, '1')을 가지고 있게 되며 y와 z에 해당하는 마스크 플래그는 미리 지정된 제2 값(예를 들어, '0')을 가지고 있게 된다. 이를 해독하여 업데이트될 성분의 종류를 판단할 수 있다.
전체적인 대상 오퍼런드 필드(1000)의 해독은 다음과 같다.
대상 오퍼런드 필드(1000)는 도 14의 (a)에 도시된 바와 같이 [57:48] 비트 영역을 차지하고 있다.
도 14의 (b)를 참조하면, 대상 오퍼런드에 해당하는 레지스터에 실행 결과(result data)를 저장하고자 하는 경우를 가정한다. 종류 결정부(1321)는 Type(T) 즉, [56] 비트 영역을 확인하여 0인 경우에는 임시 레지스터(550), 1인 경우에는 출력 레지스터(570)로 구별하게 된다. 그리고 레지스터의 종류가 결정되면, 인덱스 결정부(1322)는 index 즉, [55:52] 비트 영역을 확인하여 대상 레지스터의 위치를 결정한다. 그리고 성분 선택부(1323)는 결정된 대상 레지스터의 위치에 출력 결과의 x, y, z, w 각 성분의 값과 각 성분의 마스크 플래그 값을 AND 연산하여 업데이트한다. 즉, 마스크 플래그 값이 1인 경우에 각 성분의 값을 업데이트하게 된다.
소스 오퍼런드 필드의 해석은 확장 스위즐 필드(1200)를 적용하여 해석하는 경우와 그렇지 않은 경우의 두 가지 경우에 따라 해석 방법이 달라진다. MAD 명령어를 제외한 명령어에서는 제1 소스 오퍼런드는 확장 스위즐 필드(1200)와 조합하여 해석함을 기본으로 하는 것이 바람직하다.
우선, 도 15는 본 발명의 바람직한 일 실시예에 따른 소스 오퍼런드 필드 해독부(1330)에서의 소스 오퍼런드 해독 방법을 나타낸 도면이다. 여기서, 확장 스위즐이 가능한 제1 소스 오퍼런드 필드(1100a)를 중심으로 설명한다. 소스 오퍼런드 필드 해독부(1330)는 제1 소스 오퍼런드 필드(1100a) 및 확장 스위즐 필드(1200)를 조합하여 해독한다.
소스 오퍼런드 필드 해독부(1330)는 종류 결정부(1331), 인덱스 결정부(1332), 스위즐 결정부(1333), 성분 선택부(1334) 및 부호 결정부(1335)를 포함한다.
종류 결정부(1331)는 피연산자에 해당하는 레지스터의 종류를 결정한다. 소스 오퍼런드로 사용 가능한 레지스터는 임시 레지스터(550), 출력 레지스터(570) 또는 상수 레지스터(540)이다.
인덱스 결정부(1332)는 종류 결정부(1331)에서 결정된 레지스터의 종류 중에서 저장된 성분값을 읽어올 레지스터의 인덱스 즉, 위치값을 결정한다. 임시 레지스터(550) 또는 출력 레지스터(570)는 4 비트의 인덱스로 구별이 가능하나, 상수 레지스터(540)의 경우에는 모두 96개 이상이 있어 4 비트의 인덱스로는 구별이 불가능하다. 따라서, 상수 레지스터(540)의 경우에는 인덱스 결정부(1332)는 기계어 코드의 상수 필드[2:0]와 인덱스 필드를 조합하여 7 비트의 확장 인덱스로 상수 레지스터(540)를 구별하는 것이 바람직하다.
스위즐 결정부(1333)는 확장 스위즐 필드(1200)에 포함되는 스위즐 확장 필드(1220)로부터 소스 오퍼런드에 해당하는 레지스터의 각 성분의 값이 미리 정해진 값(즉, 1.0 또는 0.0)인지 다른 성분의 값인지를 결정한다. 예를 들어, x 성분에 대한 스위즐 확장 필드값(Sx)가 0인 경우에는 x 성분의 값은 해당 소스 오퍼런드의 x, y, z, w 성분 중 하나이고, 1인 경우에는 x 성분의 값은 0.0 또는 1.0 중 하나이다.
성분 선택부(1334)는 스위즐 결정부(1333)에서의 결과에 따라 x 성분의 값이 x, y, z, w 성분 중의 하나인 경우에 어느 성분인지를 결정한다. 또는 x 성분의 값이 0.0 또는 1.0 중의 하나인 경우에는 어느 값인지를 결정한다.
부호 결정부(1335)는 각 성분에 대하여 부호 반전 필드(1210)(Nx, Ny, Nz, Nw)를 확인하여 각 성분의 부호 반전 여부를 결정한다. 예를 들면, Nx가 미리 지정된 값 '1'(또는 '0')인 경우에 x 성분의 값은 부호를 반전시키게 된다.
전체적인 소스 오퍼런드 필드(1100a)의 해독은 다음과 같다.
도 15의 (b)를 참조하면, 도 15의 (a)에 도시된 소스 오퍼런드 필드로부터 종류 결정부(1331)는 type[46:45] 정보를 통해 소스 레지스터의 종류를 결정하고, 인덱스 결정부(1332)는 상수 필드[2:0](확장 인덱스 필드)와 조합하여 소스 레지스터의 위치를 결정하여 인덱싱한다. 상수 필드가 상위 비트를, 인덱스 필드가 하위 비트를 결정한다. 이 경우 확장 인덱스를 사용하지 않는 레지스터인 경우에 상수 필드의 값은 0이므로, 모든 레지스터의 인덱싱에서 확장 인덱스 필드를 사용하여도 문제가 되지는 않는다.
도 15의 (c)를 참조하면, x, y, z, w 각 성분의 부호 반전은 확장 스위즐 필드(1200)의 부호 반전 필드(1210)를 확인하여 결정하는 바 n[47]은 0으로 고정되어 있다. 스위즐 결정부(1333)는 x, y, z, w 각 성분에 대하여 각각 확장 스위즐 필드(1200)의 상응하는 스위즐 확장 필드(S; 1220) 값을 확인한다. 그리고 성분 선택부(1334)는 x 성분을 중심으로 설명하면, 스위즐 확장 필드(Sx; 1220)가 1인 경우에 스위즐 정보(src_x)를 확인하여 00이면 x 성분, 01이면 y 성분, 10이면 z 성분, 11 이면 w 성분으로 x 성분을 스위즐한다. 스위즐 확장 필드(Sx; 1220)가 0인 경우에 스위즐 정보(src_x)를 확인하여 00이면 0.0, 01이면 1.0으로 x 성분을 스위즐한다. 그리고 부호 결정부(1335)는 부호 필드(Nx; 1210)를 확인하여 1이면 부호 반전을 하여 최종 값을 결정한다.
도 16은 확장 스위즐이 적용되지 않는 경우에 소스 오퍼런드 필드의 해석 방법을 나타낸 도면이다. 제1 소스 오퍼런드 필드(1100a)를 중심으로 설명한다.
이경우의 소스 오퍼런드 필드 해독부(1330)는 종류 결정부(1331), 인덱스 결정부(1332), 성분 선택부(1336) 및 부호 결정부(1337)를 포함한다.
종류 결정부(1331)는 피연산자에 해당하는 레지스터의 종류를 결정한다. 소스 오퍼런드로 사용 가능한 레지스터는 임시 레지스터(550), 출력 레지스터(570) 또는 상수 레지스터(540)이다.
인덱스 결정부(1332)는 종류 결정부(1331)에서 결정된 레지스터의 종류 중에서 저장된 성분값을 읽어올 레지스터의 인덱스 즉, 위치값을 결정한다. 임시 레지스터(550) 또는 출력 레지스터(570)는 4 비트의 인덱스로 구별이 가능하나, 상수 레지스터(540)의 경우에는 모두 96개 이상이 있어 4 비트의 인덱스로는 구별이 불가능하다. 따라서, 상수 레지스터(540)의 경우에는 인덱스 결정부(1332)는 기계어 코드의 상수 필드[2:0]와 인덱스 필드를 조합하여 7 비트의 확장 인덱스로 상수 레지스터(540)를 구별하는 것이 바람직하다.
성분 선택부(1336)는 x 성분의 값이 x, y, z, w 성분 중의 하나인 경우에 어 느 성분인지를 결정한다. 또는 x 성분의 값이 0.0 또는 1.0 중의 하나인 경우에는 어느 값인지를 결정한다.
부호 결정부(1337)는 전체 성분에 대하여 부호 반전 여부를 결정한다. 소스 오퍼런드 필드(1100a)의 첫번째 영역인 n[47]을 확인하여 미리 지정된 값 '1'(또는 '0')인 경우에 전체 성분의 값은 부호를 반전시키게 된다.
전체적인 소스 오퍼런드 필드(1100a)의 해독은 다음과 같다.
도 16의 (a)를 참조하면, 확장 스위즐이 적용되지 않기 때문에 확장 스위즐 필드(1200)를 참조하지 않는다.
종류 결정부(1331)와 인덱스 결정부(1332)에서의 동작은 도 15의 (b)에 도시되어 있는 것과 동일하다. 도 15의 (b)를 참조하면, 도 15의 (a)에 도시된 소스 오퍼런드 필드로부터 종류 결정부(1331)는 type[46:45] 정보를 통해 소스 레지스터의 종류를 결정하고, 인덱스 결정부(1332)는 상수 필드[2:0](확장 인덱스 필드)와 조합하여 소스 레지스터의 위치를 결정하여 인덱싱한다. 상수 필드가 상위 비트를, 인덱스 필드가 하위 비트를 결정한다. 이 경우 확장 인덱스를 사용하지 않는 레지스터인 경우에 상수 필드의 값은 0이므로, 모든 레지스터의 인덱싱에서 확장 인덱스 필드를 사용하여도 문제가 되지는 않는다.
도 16의 (b)를 참조하면, 성분 선택부(1336)는 각 성분에 대해 스위즐 정보(src_x, src_y, src_z 또는 src_w)를 확인하고 00이면 x 성분, 01이면 y 성분, 10이면 z 성분, 11이면 w 성분으로 각 성분을 스위즐한다. 그리고 부호 결정부(1337)는 도 16의 (a)의 n 영역을 확인하여 1이면 부호 반전을 하여 최종 값을 결정한다.