Skip to main content
이 항목에서는 XDSP API의 개요를 제공합니다. XDSP를 통해 타이틀은 XBOX Series X|S 세대 콘솔에서 Hardware Accelerated Convolution Reverb 기능을 활용할 수 있습니다. 현재 구현은 실시간으로 80초의 임펄스 응답을 처리할 수 있습니다. 예를 들어, 각각 2초 임펄스 응답의 40개 스트림을 실시간으로 동시에 처리할 수 있습니다.

2022년 10월 릴리스의 새로운 사항

릴리스 기능

  • 컨볼루션의 경우 지원되는 블록 크기는 512와 1024 프레임입니다. 1024 프레임 블록 크기의 성능이 더 좋습니다.
  • FFT/IFFT의 경우 지원되는 블록 크기는 512, 1024, 2048 프레임입니다.
  • 컨볼루션은 모노, 스테레오, 스테레오 디인터리브 모드에서 모노와 스테레오 임펄스 응답을 지원합니다.
  • XDspConnect 또는 XDspConnectWithMaximumStreamLimit 호출은 하드웨어에 대한 연결을 만들고 XDspClientHandle을 반환합니다. 언제든지 8개의 연결만 활성 상태일 수 있습니다.
  • XDspConnect 호출에서 지원되는 최대 aggregateImpulseResponseInSeconds 는 128입니다. 이는 모든 XDspConnect 호출 전반에서의 최대치이기도 합니다. 단일 XDspConnect 호출이 aggregateImpulseResponseInSeconds로 128과 함께 이루어지면, aggregateImpulseResponseInSeconds 값이 0보다 큰 XDspConnect 호출을 더 이상 수행할 수 없습니다. 컨볼루션 처리를 위한 스트림 활성화를 허용하려면 aggregateImpulseResponseInSeconds가 0보다 커야 합니다.
  • XDspConnect에 의해 반환된 지정된 XDspClientHandle에 대해 XDspActivate를 사용하여 최대 256개의 스트림을 활성화할 수 있습니다. XDspConnectWithMaximumStreamLimit에 의해 반환된 지정된 XDspClientHandle에 대해 XDspActivate를 사용하여 최대 maximumStreamCount 스트림을 활성화할 수 있으며, 여기서 maximumStreamCountXDspConnectWithMaximumStreamLimit 호출에서 사용된 스트림 수입니다. 이러한 스트림은 어떤 XDspProcessType일 수도 있습니다.
  • 스테레오 입력이 사용되는 경우 지원되는 최대 aggregate 임펄스 응답은 64초로 낮아집니다.
  • API에 전달되는 모든 버퍼는 16바이트 정렬되어야 합니다. 버퍼가 16바이트 정렬되지 않으면 하드웨어가 결함에 빠지고 리셋될 수 있습니다. 하드웨어가 크래시/hang에 빠졌을 때 XDspStatus.result는 XDSP_E_DEVICE_FATAL_ERROR를 나타냅니다.
  • 임펄스 응답은 주파수 영역이어야 합니다. 시간 영역의 임펄스 응답을 주파수 영역으로 변환하는 도구가 제공됩니다. https://aka.ms/gdkdl에서 다운로드하십시오.
  • 임펄스 응답 변환 도구는 이제 감소 지원을 포함하여 품질 감소를 성능 향상과 교환할 수 있게 합니다. 자세한 내용은 XDSP 임펄스 응답 감소 개요를 참고하십시오.
  • XDspConnect 호출의 지연 개선이 이루어졌습니다.

알려진 이슈

  • FFT/IFFT 처리를 위한 XDspActivationOptions의 “EnablePolarFormat” 옵션은 성능이 더 좋은 기본 Cartesian 형식에 비해 상당한 시간이 걸립니다.

모범 사례

  • 하드웨어가 결함에 빠지더라도 하드웨어에 제출된 각 명령에 대해 응답이 있습니다. 호출자는 스트림을 비활성화하기 위해 XDspDeactivate를 호출하기 전에 하드웨어가 모든 명령을 처리할 때까지 기다려야 합니다. XDspStatus.lastProcessedCommandSequence는 이 스트림에 대해 하드웨어에서 마지막으로 처리된 명령의 시퀀스 번호를 표시합니다. 다른 XDSP 스트림은 영향을 받지 않으며, 하드웨어는 그 명령을 계속 처리합니다.
  • XDspConnect 호출에 전달된 “baseBuffer” 는 모든 스트림이 XDspDeactivate를 사용하여 비활성화되고 XDspDisconnect가 성공할 때까지 해제되어서는 안 됩니다.
  • 각 스트림에 대한 내부 큐 제한이 있으며, 이 제한에 도달하면 XDspSubmitCommand는 XDSP_E_QUEUE_FULL을 반환합니다. 이 오류가 발생하면 더 많은 명령을 제출하기 전에 하드웨어가 이 스트림에 대한 명령을 처리할 시간을 충분히 허용하십시오. XDspStatus.lastProcessedCommandSequence를 사용하여 이 스트림에 대해 하드웨어에서 처리된 마지막 명령을 확인할 수 있습니다.
  • 컨볼루션의 성능은 512 블록 크기에 비해 1024 블록 크기에서 더 좋습니다.
  • 컨볼루션 알고리즘은 연속 명령을 처리할 때 동질적이지 않습니다. 즉, 모든 블록이 완료되는 데 동일한 시간이 걸리지 않으며 일부는 다른 것보다 오래 걸릴 수 있습니다.

타이틀 일시 중지 및 재개

예를 들어 사용자가 Constrained 모드로 전환할 때, 타이틀은 일시 중지하고 재개할 수 있어야 합니다. 일시 중단 핸들러가 호출되면 하드웨어에 XDSP 명령을 제출하는 것을 단순히 중단하십시오. 이미 제출된 명령은 정상적으로 처리되고 그에 따라 XDspStatus가 업데이트됩니다.

샘플

  • https://aka.ms/gdkdl과 ATG 샘플에서 다운로드할 수 있습니다. 싱글 스트림 컨볼루션 리버브싱글 스트림 FFT IFFT에 대한 샘플 안내도 제공됩니다.
  • 하드웨어 가속기를 사용하여 시간 영역의 임펄스 응답을 주파수 영역으로 변환하는 XDSP 샘플이 GDK 다운로드 포털 https://aka.ms/gdkdl의 나머지 샘플과 함께 포함되어 있습니다. 이 샘플은 GDK 설치와 함께 포함된 Impulse Response Transform 도구와 정확히 동일한 출력을 생성합니다. 이 샘플은 XDSP API와 함께 사용하기 위해 임펄스 응답을 즉시 변환하는 데 하드웨어 가속을 사용하는 방법을 보여줍니다.

연락처

이 기능에 대한 질문이나 우려가 있다면 AnaAud@microsoft.com으로 이메일을 보내거나 온라인 포럼을 사용하십시오.

참조 API 문서

마지막 수정일 2026년 8월 24일