
D7VK 2.2가 출시되었습니다. 이 새로운 버전은 리눅스에서 고전 윈도우 게임을 실행할 수 있도록 설계된 그래픽 변환 레이어입니다. DXVK에서 파생된 이 프로젝트는 기존의 Direct3D 7, 6, 5, 3 API를 Wine 및 Proton에서 사용할 수 있도록 Vulkan으로 변환하는 데 중점을 두고 있으며, 이번 새 버전은 특히 Direct3D 3 지원이라는, 여전히 가장 부족한 부분을 개선하는 데 많은 노력을 기울였습니다.
이번 업데이트는 D7VK 2.1 출시 후 불과 몇 주 만에 나왔으며 , 특히 90년대 후반과 2000년대 초반 게임을 최신 리눅스 시스템에서 플레이하고 싶어하는 사용자들에게 매우 흥미로운 기술의 발전을 보여줍니다. D7VK 2.2는 Direct3D 3 개선 외에도 수많은 버그 수정 및 내부 조정 사항을 포함하고 있으며, 최근 출시된 DXVK 3.1 버전을 기반으로 합니다.
D7VK 2.2는 Direct3D 3에 중점을 둡니다.
D7VK 2.2 의 주요 신규 기능은 Direct3D 3와 관련된 것입니다. Direct3D 3는 프로젝트에서 지원하는 다른 구형 기술들에 비해 다소 뒤처져 있던 API입니다. 개발자가 수집하고 테스트한 Direct3D 3 게임들은 이미 D7VK에서 작동했지만, 여전히 몇 가지 예외적인 경우와 제대로 구현되지 않은 동작들이 있었습니다.
특히 Direct3D 3를 사용하는 게임 목록을 재구성하기 어렵기 때문에 이 문제는 더욱 심각했습니다. 이 게임들은 매우 오래된 타이틀이며, 상당수는 더 이상 시중에 판매되지 않거나 구하기 어려워 실제 환경에서 발생할 수 있는 모든 구현 방식을 테스트하는 데 어려움이 있었습니다.
이번 버전에서 개발자는 Direct3D 3 구현의 상당 부분을 수정하여 D7VK와 호환되는 다른 API들이 달성한 수준의 완성도에 더욱 가깝게 만들었습니다.
D3D3 장치의 동작은 원래의 동작과 일치합니다.
기술적 변경 사항 중 하나는 Direct3D 3 장치용 참조 카운팅 시스템을 재설계하는 것입니다. D7VK 2.2는 이 메커니즘을 수정하여 네이티브 API 구현과 동일한 동작을 하도록 합니다.
이러한 세부 사항은 사용자에게는 중요하지 않아 보일 수 있지만, 번역 과정에서는 매우 중요합니다. 오래된 게임들은 오브젝트 생성 및 소멸과 관련된 특정 동작에 의존하는 경우가 많은데, 사소해 보이는 차이가 진단하기 어려운 오류로 이어질 수 있습니다.
따라서 이번 새로운 구현 방식은 D7VK가 예상하지 못한 방식으로 특정 게임들이 그래픽 장치를 제대로 관리하지 못하는 문제를 줄여줍니다.
D7VK 2.2는 컬러 키를 사용한 투명도 개선 사항을 도입했습니다.
D7VK 2.2는 순수 Direct3D 3 장치에서 컬러 키잉 관리 방식 도 수정합니다 . 지금까지 이 프로젝트는 특정 상황에서 이 기능이 항상 활성화된 상태로 유지되는 매우 간단한 모델을 사용했습니다.
새 버전은 활성화 시점을 정밀하게 제어할 수 있도록 하여 Direct3D 3의 동작을 더욱 충실하게 재현합니다. 이는 특정 색상을 기반으로 하는 투명도 기법을 사용하는 구형 게임에 특히 중요합니다.
또한, 정규화된 색상 범위와 관련된 계산이 최적화되었습니다. 이제 이러한 값은 표면 설명이 변경될 때만 업데이트되므로 캐시하여 나중에 재사용할 수 있습니다.
그 결과, 색상 키 투명도를 사용하는 게임에서 성능이 소폭 향상되거나 중간 정도의 개선이 이루어지고, 동작도 더욱 정확해질 것입니다.
실행 버퍼의 경계 사례가 수정되었습니다.
D7VK 2.2의 또 다른 중요한 측면은 Direct3D 3 실행 버퍼 유효성 검사의 개정입니다. 프로젝트에서는 테스트 중에 발견된 다양한 예외 상황을 처리하기 위해 해당 로직의 일부를 재구성했습니다.
API의 예상 동작을 검증하기 위해 개발자는 Direct3D 3와 관련된 Wine 테스트도 활용했습니다. 이러한 테스트를 통해 D7VK의 동작을 호환 가능한 구현의 예상 동작과 비교하고, 잘 알려진 게임만 사용할 때는 알아차리기 어려울 수 있는 차이점을 감지할 수 있습니다.
이 연구는 특히 오래된 API의 경우 테스트에 사용할 수 있는 타이틀이 부족하고 원래 구현의 모든 가능성을 항상 다루지는 않기 때문에 매우 가치가 있습니다.
Direct3D 5 및 3 텍스처에 대한 안정성이 향상되었습니다.
이번 업데이트는 Direct3D 3에만 국한되지 않습니다. D7VK 2.2는 Direct3D 5 및 Direct3D 3에서 사용되는 텍스처 처리를 개선하여, 사용 중인 하위 표면이 범위를 벗어나는 현상을 방지합니다.
이번 변경으로 그래픽 리소스 처리의 안정성이 향상되었으며, 특정 작업 순서에서만 발생하는 오류를 해결할 수 있게 되었습니다. 개발자는 또한 이 개선 사항이 1997년에 처음 출시된 Frogger 에도 긍정적인 영향을 미쳤다고 언급했습니다 .
이번 패치는 리소스 관리 문제를 해결하기 위해 의도적으로 변경된 내부적인 변화가, 해당 모드가 특정 게임을 위해 특별히 설계된 것이 아니더라도, 특정 게임에 눈에 띄는 영향을 미칠 수 있음을 보여줍니다.
D7VK 2.2는 변환 및 행렬 문제도 수정합니다.
D7VK 2.2는 Direct3D 3 실행 버퍼 변환과 관련된 버그도 수정했습니다. 이 문제는 정점 입력에 사용되는 FVF 형식을 잘못 판단하여 발생한 것이었습니다.
기존 투영 행렬 계산 관련 문제도 수정되었습니다. 이 버그는 예상과 다르게 동작하는 Wine 테스트를 통해 발견되었으며, 특정 Direct3D 6, 5, 3 애플리케이션에 부정적인 영향을 미칠 수 있었습니다.
이러한 변경 사항은 D7VK의 호환성 테스트가 얼마나 중요한지 다시 한번 보여줍니다. 구형 그래픽 API의 문제점 중 상당수는 가장 인기 있는 게임에서 나타나는 것이 아니라, 수년 동안 숨겨져 있을 수 있는 특정 기능 조합에서 발생하기 때문입니다.
기존 드로우 경로에 대한 오버헤드 감소
새 버전에서는 그리기 경로도 재구성되었습니다. Begin() / Vertex() / End() Direct3D 6 및 Direct3D 5에서 사용됩니다. 이 수정 사항은 메모리 사용량을 줄이고 약간의 성능 향상을 제공합니다.
이번에도 Frogger는 이러한 변경 사항의 혜택을 받을 수 있는 게임 중 하나입니다. 이 최적화가 모든 고전 게임의 FPS를 두 배로 높이지는 않겠지만, 오래된 API에서 사용되는 경로에 누적되는 오버헤드를 줄이는 데 도움이 될 것입니다.
D7VK는 이전 버전에서 이미 상당한 성능 최적화를 거쳤으므로, 현재 작업은 구현을 개선하고 불필요한 비용을 제거하는 데 점점 더 집중되고 있습니다.
D7VK 2.2는 DXVK 3.1의 일부입니다.
이번 버전의 또 다른 중요한 특징은 D7VK 2.2가 DXVK 3.1 로 대체되었다는 점입니다 . 이를 통해 프로젝트는 최신 기반을 활용하고 DXVK의 발전 방향에 맞춰 구현을 유지할 수 있게 되었습니다.
두 프로젝트 간의 관계는 특히 중요합니다. D7VK는 표준 DXVK 사용법에서 다루지 않는 구형 Direct3D API에 특화된 DXVK의 포크 버전으로 시작되었으며, 두 프로젝트 모두 Windows에서 발생하는 그래픽 호출의 대상으로 Vulkan을 사용합니다.
이러한 협력 관계 덕분에 DXVK에 적용되는 구조적 개선 사항은 D7VK가 Vulkan과의 통신에 필요한 모든 인프라를 처음부터 개발할 필요 없이 지속적으로 발전할 수 있는 기반이 될 수 있습니다.
고전 게임을 부활시키기 위해 설계된 프로젝트
D7VK는 리눅스 생태계 내에서 매우 구체적인 목표를 가지고 있습니다. 바로 Direct3D 7, 6, 5, 3을 사용하는 윈도우 게임을 Vulkan을 사용하여 실행할 수 있도록 하는 것입니다. 이는 주로 Direct3D 9, 10, 11에 초점을 맞춘 DXVK와 구별되는 점입니다.
이 프로젝트의 중요성은 Wine이 직접적으로 동일한 방식으로 구현하지 않거나 Vulkan으로의 보다 정확한 변환이 필요한 그래픽 기술에 의존하는 게임의 경우 더욱 커집니다.
리눅스 사용자는 D7VK를 Wine이나 Proton과 함께 사용하면 굳이 오래된 윈도우 설치 환경에 의존하지 않고도 20세기 후반과 21세기 초반의 상당수의 소프트웨어를 복구할 수 있습니다.
Wine이나 Proton을 사용하여 Linux에서 게임을 플레이하고 고전 게임을 다시 즐기고 싶어하는 사용자에게 D7VK 2.2는 호환성 인프라의 가장 중요한 부분을 강화합니다. 개선 사항 중 상당수는 사용자에게 보이지 않을 수 있지만, 각각의 수정 사항은 Direct3D 3, 5, 6 또는 7 시대에 사라졌던 게임들이 최신 Linux 시스템에서 다시 제대로 작동할 가능성을 높여줍니다.