주의 : 초심자 튜토리얼은 아닙니다. 그러므로, 실제 API 호출 용례를 알고자 한다면, 샘플이나 튜토리얼을 찾아서 확인해 보세요.

주의 : 완전히 이해하고 작성한 글이 아니므로 잘못된 내용이 포함되어 있을 수 있습니다.

주의 : 이상하면 참고자료를 확인하세요.



DirectX Shader Compiler 프로젝트를 빌드하고 나면 엄청나게 많은 executable 및 library 들이 생깁니다. 


하지만 우리가 그것을 다 사용할 것이 아니기 때문에 필요한 것만 가져다가 사용해야 합니다. 


일단 "dxc.exe" 프로젝트만 빌드해서 executable 을 뽑아 봤는데, LLVM table 관련 executable 을 배제하면, 필수적인 바이너리의 목록은 다음과 같습니다.


  • dxc.exe : 커맨드라인 프로그램.

  • dxc.pdf : 디버깅할 거라면 필요함.

  • dxcompiler.dll : 실제 구현이 포함되어 있는 동적 라이브러리.

  • dxcompiler.pdb : 디버깅할 거라면 필요함.


저는 이것만 복사해서 제가 원하는 디렉토리에 복사했습니다.



이제 vertex shader 를 하나 만들어서 테스트해 보겠습니다. 옵션에 대한 자세한 정보는 [ Supported Command-line Options ] 에서 확인하실 수 있습니다.



다음과 같이 파워셸에서 테스트해 봤습니다.


PS C:\GIt\HairDresser\Distribution\Binaries\ThirdParty\dxc> .\dxc.exe -spirv -Fc -T vs_5_0 -E mainVS C:\GIt\HairDresser\Distribution\Binaries\ThirdParty\dxc\test.hlsl -Fo test.vertex


  • -spirv : SPIR-V 를 생성.
  • -E : 엔트리 포인트.
  • -Fo : 아웃풋( SPIR-V )


혹시나 해서 dxcompiler.dll 을 지워 봤는데 에러가 발생하더군요.


dxc failed : error code 0x8007007e


다른 spir-v 관련 옵션들도 잘 동작하는지 테스트해 봤습니다.


PS C:\GIt\HairDresser\Distribution\Binaries\ThirdParty\dxc> .\dxc.exe -spirv -T vs_5_0 -E mainVS C:\GIt\HairDresser\Distribution\Binaries\ThirdParty\dxc\test.hlsl -Fo test.vertex -Fc test_dis.vertex


  • -Fc : SPIR-V 디스어셈블리 생성.


다음과 같이 정상적으로 디스어셈블리가 생성되었습니다. 내용이 정확한지는 아직 모릅니다. 시리즈를 진행하면서 의미를 파악해 볼 계획입니다.



단지 "Location" 과 같은 키워드가 있는 것으로 봐서는 따로 리플렉션 도구를 이용하지 않아도 이것을 파싱함으로써 정보를 얻을 수도 있겠다는 생각이 들긴 합니다.


참고 자료


[ 1 ] HLSL to SPIR-V Feature Mapping Manual, DirectXShaderCompiler.

+ Recent posts