디버거
유효성 검사 계층으로 디버깅
Vulkan은 높은 성능과 낮은 드라이버 오버헤드를 위해 설계되었습니다. 이를 위해 여기에는 기본적으로 매우 제한된 오류 검사 및 디버깅 기능만 포함됩니다. 잘못된 작업을 하면 드라이버가 오류 코드를 반환하는 대신 다운되는 경우가 많으며, 더 심각한 경우에는 그래픽 카드에서 작동하는 것처럼 보이지만 다른 그래픽에서는 완전히 실패합니다.
개발 중에 광범위한 검사를 지원하기 위해 Vulkan에서는 유효성 검사 계층을 제공합니다. 유효성 검사 계층은 API와 그래픽 드라이버 사이에 삽입할 수 있는 코드 조각으로 함수 매개변수에 관한 추가 검사를 실행하고 메모리 관리 문제를 추적하는 등의 작업을 실행합니다. 개발 중에는 유효성 검사 계층을 사용 설정하고 오버헤드 없이 애플리케이션을 출시할 때 유효성 검사 계층을 완전히 사용 중지할 수 있습니다.
유효성 검사 계층은 누구나 작성할 수 있지만 Khronos는 VK_LAYER_KHRONOS_validation
라는 단일 표준 세트를 제공합니다. Android NDK 페이지에서 Android의 Vulkan 유효성 검사 계층을 확인하여 애플리케이션에 유효성 검사 계층을 사용 설정합니다.
렌더링 문서
RenderDoc은 검사 및 분석을 위해 프레임을 캡처할 수 있는 또 다른 강력한 오픈소스 도구입니다. 그래픽 프로그래머가 렌더링된 장면을 디버그하는 데 사용한 매우 강력한 도구입니다. Vulkan이 작동하려면 애플리케이션을 디버그 가능으로 설정해야 하지만 Android에서 Vulkan을 잘 지원합니다.
Android 애플리케이션에서 설정하고 사용하는 방법에 관한 자세한 내용은 Android에서 RenderDoc을 사용하는 방법을 참고하세요.
라이브러리 캡처 / 재생
GFX 재구성
GFXRestruct는 애플리케이션에서 실행되는 그래픽 API 호출을 캡처하고 재생하는 도구를 제공하는 오픈소스 프로젝트입니다. 기록된 트레이스는 나중에 재생되어 캡처된 애플리케이션의 그래픽별 동작을 재구성할 수 있습니다. GFXRestruct의 주요 장점 중 하나는 출시된 애플리케이션에서 이 기능을 사용할 수 있다는 것입니다 (android:debuggable을 사용 중지한 경우).
자세한 내용은 프로젝트 저장소를 참고하세요. Android의 Vulkan 설정 및 사용 정보는 Android용 GFXRegradle API 캡처 및 재생에서 확인할 수 있습니다.
트레이스 파일은 이식할 수 없습니다. 즉, 한 기기에서 파일을 캡처하여 다른 기기 (OS 버전, 칩셋 또는 드라이버 버전이 다른 경우)에서 재생할 수 없습니다.
프로파일러
Android GPU 검사기(AGI)
Android GPU 검사기 (AGI)는 시스템 프로필 및 프레임 프로파일러를 포함하는 Android용으로 빌드된 그래픽 프로파일러입니다. 이는 게임의 성능 프로필을 이해하고 병목 현상을 식별할 수 있는 대략적인 프로파일링 정보를 제공합니다.
AGI를 다운로드하고 사용 방법을 알아보려면 Android GPU 검사기 웹사이트를 확인하세요.
Android 스튜디오 프로파일러
Android 스튜디오 프로파일러는 앱 성능을 프로파일링하는 데 유용한 도구입니다. 하지만 그래픽 프로파일링에 특별히 중점을 두는 것은 아닙니다. CPU 프로파일러, 메모리 프로파일러, 네트워크 프로파일러, 에너지 프로파일러, 전원 프로파일러 및 이벤트 모니터로 구성됩니다.
Android 스튜디오 프로파일러를 설정하고 사용하는 방법에 관한 자세한 내용은 앱 성능 프로파일링 섹션을 참고하세요.
OEM 프로파일러
이 섹션의 도구는 OEM 전용이며 다른 칩에서 실행되는 기기에서는 작동하지 않을 수 있습니다.
모바일용 ARM Performance Studio
Arm Performance Studio for Mobile은 Arm Mobile 스튜디오의 새 이름입니다. ARM GPU의 성능 문제를 식별하고 수정하는 데 도움이 되는 그래픽 분석기 및 프레임 관리자가 포함된 도구 모음입니다.
자세한 내용은 모바일용 Arm Performance Studio 웹사이트를 참고하세요.
Mali GPU용 ARM PerfDoc
PerfDoc은 ARM의 Mali GPU 권장사항에 따라 애플리케이션의 유효성을 검사하기 위해 개발된 Vulkan 레이어입니다. 이후 VK_LAYER_KHRONOS_validation으로 병합되었으며 본질적으로 표준 Vulkan 유효성 검사 계층의 일부입니다.
사용 방법에 관한 자세한 내용은 유효성 검사 계층으로 디버깅 섹션을 참고하세요.
Qualcomm Snapdragon 프로파일러
Qualcomm Snapdragon Profiler는 애플리케이션 개발자가 CPU, GPU, DSP, 메모리, 전력, 열, 네트워크 성능을 분석하여 칩셋의 병목 현상을 식별할 수 있도록 Qualcomm에서 개발한 프로파일링 소프트웨어입니다.
자세한 내용은 Qualcomm 개발자 네트워크의 Snapdragon 프로파일러를 참고하세요.
삼성 GPUWatch
삼성의 GPUWatch는 삼성 기기에서 GPU 활동을 관찰하는 도구입니다. 다른 도구와 달리 이 도구는 휴대기기에서 직접 사용할 수 있으므로 다른 호스트 컴퓨터에 액세스할 수 없는 경우에도 애플리케이션 성능을 즉시 확인할 수 있습니다.
사용 설정 방법에 관한 자세한 내용은 사용자 가이드를 참고하세요.
PVRTune
Imagination Technologies PVRTune을 사용하면 개발자는 다양한 카운터 및 측정항목을 사용하여 PowerVR 하드웨어에서 실시간으로 애플리케이션을 프로파일링할 수 있습니다. 또한 하위 수준 분석을 위해 세션을 저장하고 성능 병목 현상을 감지할 수 있습니다.
PVRTune 사용 방법에 관한 자세한 내용은 설명서를 참고하세요.
이전 도구
셰이더를 GLSL에서 SPIR-V로 변환
Vulkan API는 셰이더 프로그램이 SPIR-V 바이너리 중간 형식으로 제공될 것으로 예상합니다. 이 규칙은 OpenGL Shading Language (GLSL)로 작성된 소스 코드를 텍스트 문자열로 제출할 수 있는 OpenGL ES와 다릅니다.
NDK r12 이상에는 Vulkan에서 사용할 수 있는 SPIR-V로 GLSL 셰이더를 컴파일하기 위한 런타임 라이브러리가 포함됩니다. shaderc 컴파일러는 GLSL로 작성된 셰이더 프로그램을 SPIR-V로 컴파일하는 데 사용할 수 있습니다. 게임에서 HLSL을 사용하는 경우 DirectXShaderCompiler가 SPIR-V 출력을 지원합니다.
일반적으로 게임의 애셋 빌드 프로세스의 일부로 셰이더 프로그램을 오프라인으로 컴파일하고 SPIR-V 모듈을 런타임 애셋의 일부로 포함해야 합니다.
Vulkan 애플리케이션의 셰이더 컴파일 프로세스에 관한 자세한 내용은 Android NDK 섹션에서 Android의 Vulkan 셰이더 컴파일러를 참고하세요.
고급 기능
Vulkan 렌더기에 Android Frame Pacing 통합
Android Frame Pacing 라이브러리 (Swappy라고도 함)는 Vulkan 게임이 원활한 렌더링과 올바른 속도를 달성하여 게임 렌더링 루프를 OS의 디스플레이 하위 시스템 및 기본 디스플레이 하드웨어와 동기화된 상태로 유지하는 데 도움이 됩니다.
올바른 페이싱은 테어링이라고 하는 시각적 아티팩트를 제거하고, 디스플레이 새로고침과 프레임 표시 간의 동기화를 통해 전력 소모를 최적화하며, 프레임 속도를 안정화하여 버벅거림을 제거합니다. 프레임 속도의 중요성에 관한 자세한 내용은 AGDK의 Frame Pacing 라이브러리 섹션을 참고하세요.
프레임 페이싱을 게임에 통합하는 방법에 관한 자세한 내용은 Vulkan 렌더기에 Android Frame Pacing 통합을 참고하세요.
Vulkan 사전 회전으로 기기 방향 처리
애플리케이션 외부의 표면 회전 처리는 무료가 아닐 수 있습니다. 전용 디스플레이 처리 장치 (DPU)가 있는 일부 고급형 기기에서도 상당한 성능 저하가 발생할 수 있으며, 이러한 성능 저하는 애플리케이션이 CPU의 제약을 받는지, GPU에 종속되는지에 따라 달라집니다.
Vulkan은 개발자에게 OpenGL과 비교하여 렌더링 상태에 관한 더 많은 정보를 기기에 지정할 수 있는 기능을 제공합니다. 이러한 정보 중 하나는 기기 방향 및 렌더링 표시 영역 방향과의 관계입니다. 이 기능을 사용하면 사전 회전을 구현하여 Android에서 Vulkan을 최대한 활용할 수 있습니다.
Vulkan 애플리케이션에서 기기 회전을 효율적으로 처리하는 방법에 관한 자세한 내용은 Vulkan 사전 회전으로 기기 방향 처리 및 함께 제공되는 데모 애플리케이션을 참고하세요.
정밀도를 낮춰 최적화
숫자 형식의 그래픽 데이터와 셰이더 계산은 게임 성능에 상당한 영향을 미칠 수 있습니다. 최신 3D 그래픽의 계산과 데이터는 대부분 부동 소수점 숫자를 사용합니다. Android의 Vulkan은 32비트 또는 16비트 크기의 부동 소수점 숫자를 사용합니다. 일반적으로 32비트 부동 소수점 숫자를 단일 정밀도 또는 전체 정밀도라고 합니다. 64비트 부동 소수점 유형은 Vulkan에 정의되어 있지만 일반적으로 지원되지 않으므로 사용하지 않는 것이 좋습니다.
연산에서 최고의 성능을 발휘하도록 Vulkan 애플리케이션을 최적화하는 방법에 관한 자세한 내용은 낮은 정밀도로 최적화를 참고하세요.