KWin, Wayland 커밋 타이밍 지원으로 영상과 게임 표시 개선

KWin, Wayland 커밋 타이밍 지원으로 영상과 게임 표시 개선

KDE의 KWin 컴포지터에 Wayland 커밋 타이밍(Commit Timing) 프로토콜 지원이 추가되었습니다. 영상 재생이나 Adaptive-Sync·FreeSync를 사용하는 게임 환경에서 프레임이 화면에 표시되는 시점을 보다 정확하게 조절하기 위한 기능입니다.

단순히 KWin에 새로운 옵션 하나가 추가된 것은 아닙니다. 애플리케이션이 만든 프레임을 언제 화면에 반영할 것인지, 애플리케이션과 컴포지터가 서로 타이밍 정보를 주고받을 수 있게 됐다는 점이 이번 변화의 핵심입니다.

이번 기능은 Xaver Hugl이 약 반년 전부터 작업해 온 것으로, 개발과 테스트를 거쳐 2026년 9월 8일 KWin 최신 개발 코드에 병합 (e29d8f84, wayland: support the commit-timing protocol)되었습니다. 시기상 KDE Plasma 6.8 개발 일정과도 맞물립니다.

새로운 버전인 Plasma 6.8 Beta 1은 9월 10일 공개될 예정이며 같은 시기에 브랜치도 분리될 예정입니다. 릴리즈 전 상당히 막바지에 들어온 변경이긴 하지만, 차기 Plasma에서 반영되어 만나볼 수 있을 가능성이 상당히 높아보입니다.

화면에 프레임을 언제 보여줄 것인가?

Wayland의 커밋 타이밍 프로토콜 설명
Wayland의 커밋 타이밍 프로토콜 설명

Wayland의 커밋 타이밍 프로토콜은 애플리케이션이 컴포지터에 새로운 화면 상태를 전달하면서, 해당 내용을 언제부터 적용할 수 있는지도 함께 알려주는 방식입니다.

여기서 말하는 '커밋(Commit)'은 쉽게 말해 애플리케이션이 새롭게 그린 화면을 컴포지터에 넘겨주는 과정입니다.

기존에도 물론 프레임을 화면에 표시하는 과정은 존재했습니다. 하지만 커밋 타이밍 프로토콜을 이용하면 애플리케이션이 원하는 표시 시점에 관한 정보를 컴포지터에 보다 명확하게 전달할 수 있습니다.

예를 들어 영상 플레이어라면 다음 프레임을 미리 준비한 뒤 적절한 시점에 화면에 표시하도록 할 수 있습니다. 게임 역시 렌더링이 끝난 프레임을 모니터의 다음 화면 갱신과 얼마나 잘 맞춰 표시하느냐가 중요합니다.

물론 이 프로토콜 하나가 영상 끊김이나 게임의 입력 지연을 마법처럼 없애주는 것은 아닙니다. 애플리케이션부터 KWin, 그래픽 드라이버와 디스플레이까지 관련된 여러 요소가 함께 지원해야 제대로 활용할 수 있습니다.

Adaptive-Sync와 게임에서는?

Adaptive-Sync와 게임 환경의 변화 설명
Adaptive-Sync와 게임 환경의 변화 설명

Adaptive-Sync와 FreeSync는 게임의 프레임 출력에 맞춰 모니터의 주사율을 변화시키는 가변 주사율(VRR) 기술입니다.

게임이 항상 정확하게 60FPS, 120FPS, 144FPS처럼 고정된 속도로 프레임을 만들어내는 것은 아닙니다. 장면이나 시스템 부하에 따라 프레임 생성 시간이 계속 달라지기 때문에, 모니터의 갱신 시점과 게임의 프레임 출력 시점이 어긋나는 일이 생길 수 있습니다.

이 과정에서 화면이 위아래로 갈라져 보이는 티어링(Tearing)이 발생하거나, 이를 막기 위해 다음 화면 갱신을 기다리면서 스타터링(Stuttering)이 생기기도 합니다. 게임 유튜버 분들이 스타터링 스타터링 하는 이유가 여기에서 발생하는 원리거든요.

커밋 타이밍을 활용하면 KWin은 애플리케이션이 전달한 프레임을 언제 화면에 적용하는 것이 좋은지 판단할 때 더 많은 정보를 활용할 수 있게 됩니다.

특히 이번 기능은 특정 게임만을 위한 별도의 API가 아니라 Wayland 프로토콜의 일부라는 점도 눈여겨볼 만합니다. 프로토콜을 지원한다면 여러 애플리케이션과 그래픽 스택에서 공통으로 활용할 수 있기 때문입니다.

다만 실제 게임에서 어느 정도 차이를 느낄 수 있을지는 GPU 드라이버와 게임, 모니터의 VRR 범위, 렌더링 부하 등 사용 환경에 따라 달라질 수 있습니다.

Mesa와 VKD3D-Proton으로 이어지는 연결

Mesa, Kwin 그리고 Vkd3d-proton: 더 나은 Linux 게이밍을 위한 연결
Mesa, Kwin 그리고 Vkd3d-proton: 더 나은 Linux 게이밍을 위한 연결

이번 KWin의 변화는 Mesa와도 연결됩니다.

KWin의 커밋 타이밍 지원은 Mesa Vulkan 드라이버에서 VK_EXT_present_timing 확장을 지원하는 데 필요한 요소 가운데 하나입니다.

VK_EXT_present_timing은 Vulkan 애플리케이션에서 프레임이 화면에 표시되는 타이밍을 다룰 수 있도록 만들어진 확장입니다. 애플리케이션에서 시작된 프레임 타이밍 정보가 그래픽 드라이버를 거쳐 Wayland 컴포지터까지 이어져야 실제 화면 출력 과정에서 활용할 수 있습니다.

그리고 이 흐름은 Linux에서 Windows 게임을 실행할 때 많이 사용되는 VKD3D-Proton과도 관련이 있습니다.

VKD3D-Proton은 Direct3D 12를 Vulkan으로 변환해 주는 프로젝트로, Proton을 통해 Windows 게임을 실행하는 데 중요한 역할을 하고 있습니다.

다만 KWin 지원이 추가됐다고 해서 당장 모든 게임이 새로운 타이밍 기능을 사용하게 되는 것은 아닙니다. Mesa와 VKD3D-Proton을 비롯한 관련 프로젝트의 지원도 함께 갖춰져야 하기 때문에, 실제 게임에서의 변화는 앞으로의 개발 상황을 조금 더 지켜볼 필요가 있습니다.

원문 뉴스 : Phoronix

🐧 Linuxroom의 생각 :

 쉽게 말하자면, 게임이나 동영상이 만든 프레임을 Kwin이 "언제 화면에 보여줘야 하는지" 더 정확하게 조율 가능하게 되었다는 이야기입니다.

지금까지 어떤 과제가 있었냐 하면, 게임을 예를 들어보죠.

게임이 GPU를 사용해 프레임 하나를 완성했다고 해도, 그 프레임이 바로 모니터에 표시되는 형식은 아닙니다.

대략 아래와 같은 과정을 거치게 됩니다.

게임 → Vulkan/Mesa → Wayland/Kwin → 모니터

 예를 들어서 게임이 새 프레임을 완성해서 Kwin에 전달했다고 해보겠습니다.
원래대로라면 알림 방식이 "새 프레임이 준비되었습니다" 라는 정보가 중심이었다면, 이번 커밋 타이밍을 이용하면 "새 프레임이 준비되었습니다"에 더해서 "이 프레임은 어느 시점 이후에 표시할 수 있습니다" 라는 시간 정보까지 같이 전달 할 수 있게 됐다는거죠.

이게 게임에서 왜 중요하냐 하면, 모니터도 아무때나 화면을 갱신하는게 아니라, 일정한 타이밍에 화면을 갱신하도록 하기 때문입니다.

특히 FreeSync같은 가변주사율(VRR, Variable Refresh Rate)을 사용하면, 모니터가 게임 프레임 생성 속도에 맞춰 갱신 타이밍을 조절합니다.

하지만 게임의 프레임 생성은 장면의 복잡도나 GPU 부하등에 따라서 프레임을 만드는데 시간이 달라질 수 있다는거죠.

따라서, 게임이 프레임을 만든 시점과 모니터가 화면을 갱신하는 시점을 얼마나 잘 맞추느냐가 제일 중요합니다.

이번에 KWin이 지원하기 시작한 커밋 타이밍 프로토콜은 바로 이 과정에서 애플리케이션과 컴포지터가 프레임을 화면에 반영할 수 있는 시점에 관한 정보를 좀 더 명확하게 주고받을 수 있도록 해주는 기술이라고 볼 수 있습니다.

그럼 "결국 게임 성능 향상 패치인가?"​라고 생각하실 수도 있는데, 약간 다릅니다.
게임의 FPS를 직접 올려주는 성능 향상 패치라기보다는, Wayland에서 게임이나 동영상의 프레임을 적절한 순간에 화면에 표시하기 위한 기반 기술을 KWin도 지원하기 시작했다고 보는 것이 더 정확합니다.

즉, 프레임을 더 많이 만들어내는 기술이 아니라, 만들어진 프레임을 언제 화면에 반영할 것인지를 더 정교하게 다룰 수 있도록 하는 기술​인거죠.

물론 KWin이 이를 지원하기 시작했다고 해서 당장 모든 게임에서 차이를 느낄 수 있는 것은 아닙니다. Mesa와 GPU 드라이버, VKD3D-Proton 등 관련 그래픽 스택에서도 이러한 타이밍 정보를 제대로 전달하고 활용할 수 있어야 실제 게임 환경에서 의미가 있기 때문입니다.


※ 각주

[1] KWin: KDE Plasma에서 창과 화면 출력을 합성하는 컴포지터입니다.
[2] Wayland 커밋 타이밍(Commit Timing): 애플리케이션이 새로운 화면 상태를 전달할 때 해당 내용이 언제부터 화면에 표시될 수 있는지 컴포지터에 알려주는 Wayland 프로토콜입니다.
[3] VK_EXT_present_timing: Vulkan 애플리케이션이 프레임 표시 타이밍을 다루도록 하는 확장입니다.
[4] VKD3D-Proton: Direct3D 12 게임을 Vulkan 기반으로 실행하도록 돕는 호환 계층입니다.
[5] Adaptive-Sync·FreeSync: 게임의 프레임 출력 속도에 맞춰 모니터의 주사율을 동적으로 조절하는 가변 주사율(VRR) 기술입니다.
[6] Mesa: Linux에서 OpenGL과 Vulkan 등의 그래픽 API를 구현하는 대표적인 오픈 소스 그래픽 드라이버 프로젝트입니다.