GPU는 텍스처와 VRAM을 어떻게 처리합니까?


18

실제로는 여러 가지 관련 질문이 있습니다.

  1. 렌더링 파이프 라인을 진행하는 동안 압축 텍스처 (dxt5 / dxt1 등)가 완전히 압축 해제 되었습니까?

  2. 첫 번째 질문에 대한 답이 사실이라면, 여러 개의 비 압축 텍스처에 대해 메모리가 어떻게 관리됩니까?

  3. 최신 GPU에서 프레임 버퍼가 VRAM과 다른가요?

답변:


29

DXT / BC / ETC 와 같은 GPU 압축 텍스처 형식은 압축 된 형식 에서 직접 읽을 수 있도록 특별히 설계되었습니다. 원시 RGBA 버퍼로 압축을 풀 필요는 없습니다.

이것이 작동하는 방식은 각 텍셀 블록 (종종 4x4)이 고정 된 수의 비트를 차지하므로 특정 텍셀을 찾기 위해 버퍼에서 얼마나 멀리 떨어져 있는지 알 수 있습니다.이 블록은 주변의 모든 내용을 읽지 않고도 압축을 풀 수 있습니다 / 선행 텍스처 정보. GPU에는 셰이더의 텍스처 샘플링 요청을 수행하는 데 필요한만큼 요청 된 텍셀 블록을 압축 해제하는 특수 하드웨어가 포함되어 있습니다.

이는 각 텍셀이 차지하는 공간의 양이 이미지에 따라 다를 수있는 (jpg 및 png와 같은 형식과 대조적입니다. 자세한 영역은 더 많은 데이터를 차지하고 예측 가능한 영역은 덜 차지합니다) 압축을 풀어야하는 특정 텍셀을 찾기 위해 전체 이미지 또는 적어도 큰 / 분산 된 덩어리. 그러나 텍스처의 예측 가능한 영역을 선택적으로 압축 할 수 있기 때문에 GPU에 적합한 형식보다 디스크에 저장하거나 네트워크를 통해 전송하기 위해 이미지를 더 작은 크기로 압축하는 경향이 있습니다. 다른 용도를위한 다른 전략.


일반적으로 여러 질문을하는 것은 여러 게시물을 통해 수행해야하지만 이것은 매우 짧은 대답이므로 포인트 3에도 도달합니다.

" Framebuffer "는 화면에 제시하고자하는 합성 이미지를 저장하기 위해 사용하기로 결정한 특정 비디오 메모리 비트입니다. JarkkoL의 답변에서 세부 사항을 주목하십시오. 특수 하드웨어에서 렌더링 대상의 대역폭 요구에 최적화 된 사용 가능한 비디오 메모리 의 특정 부분 에서이 버퍼를 찾을 수 있습니다 .


압축 알고리즘의 링크는 매우 유용하고 깊이 있습니다. 좋은 발견!
Coburn

7

귀하의 질문에 대한 답변은 실제로 플랫폼에 따라 다릅니다. 일반적으로 BC 형식은 메모리에서 압축 된 형태로 유지되고 압축 해제는 GPU 텍스처 단위로 비행 중에 수행되지만 예외가 있습니다. 즉, Xbox 360은 TU가 데이터를 가져 오기 전에 캐시하기 위해 완전한 4x4 픽셀 BC 블록을 압축 해제하여 캐시 사용을 팽창시키는 것으로 알려져 있습니다. 로드시 vram하기 위해 전체 텍스처를 압축 해제하는 플랫폼을 모르지만 추가 메모리 및 대역폭 사용으로 인해 의심됩니다.

프레임 버퍼도 마찬가지입니다. 플랫폼에 따라 다릅니다. Xbox 360에는 렌더링 대상에 사용해야하는 10MB의 전용 고 대역폭 EDRAM이있었습니다. Xbox One에는 높은 대역폭으로 인해 렌더링 대상에 선호되는 32MB의 특수 ESRAM이 여전히 있으며 Xbox 360과 달리 가져올 수도 있지만 렌더링 대상도 일반 DDR3 메모리에 상주 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.