※ XMVECTOR 매개변수 전달.

   ▶  XMVECTOR  인스턴스를 인수로 해서 함수를 호출 할 때, 효율성을 위해서 XMVECTOR 값이 스택이 아니라 SSE/SSE2 레지스터를 통해서 함수에 전달되게 해야 한다. 그런 식으로 전달할 수 있는 인수의 개수는 플랫폼(32 비트 Windows , 64비트 Windows , Windows RT등)과 컴파일러에 따라 다르다.

   그래서 플랫폼/컴파일러에 대한 의존성을 없애기 위해서 XMVECTOR 매개변수에 대해  FXMVECTOR, GXMVECTOR, HXMVECTOR, CXMVECTOR라는 형식들을 사용해야 한다. 또한 , SSE/SSE2 레지스터 활용을 위한 호출 규약 역시 컴파일러에 따라 다를 수 있는데, 그러한 의존성을 없애려면 함수 이름 앞에 반드시 XM_CALLCONV라는 호출 규약 지시자를 붙여야 한다.

 

    # XMVECTOR 매개변수의 전달에 관란 규칙을 요약하자면 다음과 같다.

       1. 처음 세 XMVECTOR 매개변수에는 반드시 FXMVECTOR 형식을 지정해야 된다.

       2. 넷째 XMVECTOR 매개변수에는 반드시 GXMVECTOR 형식을 지정해야 한다.

       3. 다섯째와 여섯째 XMVECTOR 매개변수에는 반드시 HXMVECTOR 형식을 지정해야 한다.

       3. 그 이상의 XMVECTOR 매개변수들에는 반드시 CXMVECTOR형식을 지정해야 된다.

   

   ▶  예를들어, 32 비트 Windows에서 __fastcall 호출 규약을 지원하는 컴파일러와 좀 더 최신의 __vectorcall 호출 규약을 지원하는 컴파일러는 이 형식들을 다음과 같이 정의한다.

 

          // 32 -bit Window __fastcall은 처음 세 XMVECTOR 인수를 

          // 레지스터들을 통해서 전달하고 , 나머지는 스택을 사용한다.

          typedef const XMVECTOR FXMVECTOR;

          typedef const XMVECTOR& GXMVECTOR;

          typedef const XMVECTOR& HXMVECTOR;

          typedef const XMVECTOR& CXMVECTOR;

 

          // 32 -bit Window __vectorcall은 처음 여섯 XMVECTOR 인수를

          // 레지스터들을 통해서 전달하고, 나머지는 스택을 사용한다.

          typedef const XMVECTOR FXMVECTOR;

          typedef const XMVECTOR GXMVECTOR;

          typedef const XMVECTOR HXMVECTOR;

          typedef const XMVECTOR& CXMVECTOR;

 

    #  사용한 예시

규칙을 사용한 코드

   ▶  XMVECVOR 매개변수 중간에 XMVECTOR 매개변수가 아니여도 규칙은 똑같이 적용한다. 

    #  사용한 예시

매개변수 규칙이 똑같이 적용되는 코드

 

   ▶  생성자에 대해서는 조금 다른 규칙이 있다.        

         1. 처음 세 XMVECTOR 매개변수에는  FXMVECTOR 형식을 지정해야 된다.         

         2.  그 나머지에는  CXMVECTOR를 사용을 권한다.

         3.  생성자에는 XM_CALLCONV를 사용하지 말아야 된다.

 

    #  사용한 예시

생성자의 규칙이 적용된 코드

- 지금까지 말한 XMVECTOR 매개변수 전달 규칙은 '입력' 매개변수들에 적용된다. '출력' XMVECTOR 매개변수(XMVECTOR& 또는 XMVECTOR*)는 SSE/SSE2 레지스터를 사용하지 않으므로, 그냥 XMVECTOR가 아닌 매개변수들과 동일하게 취급된다.

'Directx12 > DirectX 내용' 카테고리의 다른 글

DirectXMath 라이브러리의 벡터(3)  (0) 2022.08.15
DirectXMath 라이브러리의 벡터(1)  (0) 2022.08.02

+ Recent posts