2016-11-26 6 views
1

버텍스 쉐이더에 데이터를 보낼 때 directX가 더 빠릅니다.float4 대 4 floats in directX

struct VertexInputType 
{ 
    float4 data : DATA; // x,y - POSITION, z - distance, w - size 
} 

struct VertexInputType 
{ 
    float2 pos : POSITION; 
    float distance : DISTANCE; 
    float size : SIZE; 
} 

대 야생 추측은 128 비트 레지스터에 팩을하기 때문에 그 첫 번째는 빠른 말을하는 것입니다. 그러나 나는 더 나은 대답이 있다고 생각하고 있습니다.

+0

상수 버퍼 (https://msdn.microsoft.com/en-us/library/windows/desktop/bb509632(v=vs.85).aspx)의 패킹 규칙에서 이들은 둘 다 똑같이 float4-register, 그래서 나는 아무런 차이가 없다고 가정 할 것이다. 그러나 두번째 것은 훨씬 더 읽기 쉽고 유지하기 쉽다. :) – Gnietschow

+0

그것은 입력 어셈블러이기 때문에 패킹 규칙이 적용되지 않는다. – catflier

답변

2

CPU와 GPU 간의 메모리 전송에 대해 생각하는 경우 : 이들 모두가 동일한 버퍼 객체에서 나온 것이라면 중요하지 않습니다. 두 번째 것은 쉐이더에 알려진 데이터의 해석 일 뿐이며 실제 데이터가 전송되는 것과는 아무런 관련이 없습니다. 케이스 2에서 여러 버텍스 스트림을 사용하는 경우 성능이 다를 수 있지만이 차이는 셰이더에서 사용 된 형식과 관련이 없습니다.

정점 캐시 효율성이 걱정되는 경우 두 경우 모두 정점 당 16 바이트가 저장되고 검색되므로 여기에도 차이가 없습니다.