스트리밍 리소스 필요The need for streaming resources

GPU 메모리는 액세스할 수 없는 표면의 영역을 저장 하 고, 인접 한 타일을 통해 필터링 하는 방법을 하드웨어에 알리기 위해 필요 합니다.Streaming resources are needed so GPU memory isn't wasted storing regions of surfaces that won't be accessed, and to tell the hardware how to filter across adjacent tiles.

스트리밍 리소스 또는 스파스 질감Streaming resources or sparse textures

Direct3D 11에서 바둑판식 리소스 라고 하는 스트리밍 리소스 는 작은 양의 실제 메모리를 사용 하는 대규모 논리적 리소스입니다.Streaming resources (called tiled resources in Direct3D 11), are large logical resources that use small amounts of physical memory.

스트리밍 리소스의 또 다른 이름은 스파스 질감입니다.Another name for streaming resources is sparse textures. "스파스"는 리소스의 바둑판식 특성 및이를 바둑판식으로 배열 하는 주요 이유를 모두 전달 합니다. 즉, 일부는 한 번에 매핑될 수 없습니다."Sparse" conveys both the tiled nature of the resources as well as perhaps the primary reason for tiling them - that not all of them are expected to be mapped at once. 실제로 응용 프로그램은 리소스의 모든 지역 + mips에 대해 데이터를 작성 하지 않은 스트리밍 리소스를 의도적으로 작성할 수 있습니다.In fact, an application could conceivably author a streaming resource in which no data is authored for all regions+mips of the resource, intentionally. 따라서 콘텐츠 자체는 스파스 일 수 있으며, 지정 된 시간에 GPU (그래픽 처리 장치) 메모리의 콘텐츠 매핑은 더 많은 스파스의 하위 집합입니다.So, the content itself could be sparse, and the mapping of the content in graphics processing unit (GPU) memory at a given time would be a subset of that (even more sparse).

바둑판식으로 배열 하지 않으면 메모리 할당이 하위 리소스 세분성에서 관리 됩니다.Without tiling, memory allocations are managed at subresource granularity

스트리밍 리소스를 지원 하지 않는 그래픽 시스템 (즉, 운영 체제, 디스플레이 드라이버 및 그래픽 하드웨어)에서 그래픽 시스템은 하위 리소스 세분성의 모든 Direct3D 메모리 할당을 관리 합니다.In a graphics system (that is, the operating system, display driver, and graphics hardware) without streaming resource support, the graphics system manages all Direct3D memory allocations at subresource granularity.

버퍼의 경우 전체 버퍼는 하위 리소스입니다.For a buffer, the entire buffer is the subresource.

질감의 경우 (예: Texture2D) 각 밉 수준은 하위 리소스입니다. 질감 배열의 경우 (예: Texture2DArray) 지정 된 배열 조각에서 각 밉 수준은 하위 리소스입니다.For a Texture, (for example, Texture2D), each mip level is a subresource; for a texture array, (for example, Texture2DArray) each mip level at a given array slice is a subresource. 그래픽 시스템은이 하위 리소스 세분성에서 할당 매핑을 관리 하는 기능만 노출 합니다.The graphics system only exposes the ability to manage the mapping of allocations at this subresource granularity. 스트리밍 리소스의 컨텍스트에서 "매핑"은 GPU에 데이터를 표시 하는 것을 의미 합니다.In the context of streaming resources, "mapping" refers to making data visible to the GPU.

바둑판식으로 배열 하지 않으면 밉 맵 체인의 작은 부분만 액세스할 수 없습니다.Without tiling, can't access only a small portion of mipmap chain

응용 프로그램에서 특정 렌더링 작업에서 이미지 밉 맵 체인의 작은 부분에만 액세스 하면 되는 것으로 알고 있다고 가정 합니다 (지정 된 밉 맵 전체 영역에도 해당 하지 않을 수 있음).Suppose an application knows that a particular rendering operation only needs to access a small portion of an image mipmap chain (perhaps not even the full area of a given mipmap). 이상적으로는 앱이 이러한 요구 사항을 그래픽 시스템에 알릴 수 있습니다.Ideally, the app could inform the graphics system about this need. 그러면 그래픽 시스템은 필요한 메모리가 너무 많은 메모리를 페이징 하지 않고 GPU에서 매핑되는지 확인 하려고 합니다.The graphics system would then only bother to ensure that the needed memory is mapped on the GPU without paging in too much memory.

실제로, 스트리밍 리소스를 지원 하지 않고, 그래픽 시스템은 하위 리소스 세분성에서 GPU에 매핑해야 하는 메모리에 대 한 정보를 받을 수 있습니다 (예: 액세스할 수 있는 전체 밉 맵 수준 범위).In reality, without streaming resource support, the graphics system can only be informed about the memory that needs to be mapped on the GPU at subresource granularity (for example, a range of full mipmap levels that could be accessed). 그래픽 시스템에는 오류가 발생 하지 않기 때문에 메모리의 일부를 참조 하는 렌더링 명령이 실행 되기 전에 전체 하위 리소스를 매핑해야 하는 많은 GPU 메모리를 사용 해야 할 수도 있습니다.There is no demand faulting in the graphics system either, so potentially a lot of excess GPU memory must be used to make full subresources mapped before a rendering command that references any part of the memory is executed. 이는 스트리밍 리소스를 지원 하지 않고 Direct3D에서 사용 하기 어려운 많은 메모리 할당을 사용 하는 문제 중 하나일 뿐입니다.This is just one issue that makes the use of large memory allocations difficult in Direct3D without streaming resource support.

화면을 더 작은 타일로 분리 하는 소프트웨어 페이징Software paging to break the surface into smaller tiles

소프트웨어 페이징은 하드웨어를 처리 하기에 충분 한 크기의 타일로 화면을 분리 하는 데 사용할 수 있습니다.Software paging can be used to break the surface into tiles that are small enough for the hardware to handle.

Direct3D는 지정 된 쪽에서 최대 16384 픽셀의 Texture2D 표면을 지원 합니다.Direct3D supports Texture2D surfaces with up to 16384 pixels on a given side. 16384 와이드 x 16384 및 픽셀당 4 바이트 이미지는 1GB의 비디오 메모리를 사용 하 고 mip 맵을를 추가 하면 해당 금액이 두 배가 됩니다.An image that is 16384 wide by 16384 tall and 4 bytes per pixel would consume 1GB of video memory (and adding mipmaps would double that amount). 실제로 모든 1GB는 단일 렌더링 작업에서 참조할 필요가 거의 없습니다.In practice, all 1GB would rarely need to be referenced in a single rendering operation.

일부 게임 개발자는 128K에 의해 128K 만큼의 지형 표면을 모델링 합니다.Some game developers model terrain surfaces as large as 128K by 128K. 이를 통해 기존 Gpu에서 작업 하는 방식은 하드웨어를 처리할 수 있을 정도로 작은 타일로 화면을 분리 하는 것입니다.The way they get this to work on existing GPUs is to break the surface into tiles that are small enough for hardware to handle. 응용 프로그램은 필요한 타일을 확인 하 고 GPU에서 소프트웨어 페이징 시스템의 질감 캐시로 로드 해야 합니다.The application must figure out which tiles might be needed and load them into a cache of textures on the GPU - a software paging system.

이 접근 방식에 대 한 중요 한 단점은 하드웨어에서 발생 하는 페이징에 대 한 정보를 알 수 없는 것입니다. 이미지의 일부가 타일을 cmio 화면에 표시 되어야 하는 경우 하드웨어는 타일에서 고정 함수 (즉, 효율적)를 수행 하는 방법을 알지 못합니다.A significant downside to that approach comes from the hardware not knowing anything about the paging that is going on: When a part of an image needs to be shown on screen that straddles tiles, the hardware does not know how to perform fixed function (that is, efficient) filtering across tiles. 즉, 자체 소프트웨어 타일을 관리 하는 응용 프로그램은 셰이더 코드에서 수동 질감 필터링을 사용 해야 합니다 (좋은 품질 이방성 필터를 사용 하는 경우 비용이 매우 비쌉니다). 또한 고정 된 기능 하드웨어 필터링이 계속 해 서 일부 지원을 제공할 수 있도록 인접 타일의 데이터를 포함 하는 타일 주위에 메모리를 제작 하는 데 필요한 메모리를 확보 해야 합니다.This means the application managing its own software tiling must resort to manual texture filtering in shader code (which becomes very expensive if a good quality anisotropic filter is desired) and/or waste memory authoring gutters around tiles that contain data from neighboring tiles so that fixed function hardware filtering can continue to provide some assistance.

표면 할당을 바둑판식으로 표현 하는 최고 수준의 기능Making tiled representation of surface allocations a first-class feature

화면 할당의 바둑판식 표현이 그래픽 시스템의 최고 수준의 기능이 면 응용 프로그램은 사용할 수 있도록 타일을 하드웨어에 지시할 수 있습니다.If a tiled representation of surface allocations is a first-class feature in the graphics system, the application could tell the hardware which tiles to make available. 이러한 방식으로 응용 프로그램에서 알고 있는 표면의 영역을 저장 하는 GPU 메모리가 부족 하 여 액세스할 수 없으며, 하드웨어는 인접 한 타일을 필터링 하는 방법을 이해 하 여 소프트웨어 타일을 직접 수행 하는 개발자에 게 발생 하는 문제를 줄일 수 있습니다.In this way, less GPU memory is wasted storing regions of surfaces that the application knows will not be accessed, and the hardware can understand how to filter across adjacent tiles, alleviating some of the pain experienced by developers who perform software tiling on their own.

그러나 전체 솔루션을 제공 하려면 화면 내에서 바둑판식 배열이 지원 되는지 여부에 관계 없이, 최대 표면 차원이 응용 프로그램이 이미 원하는 128K + 근처에는 현재 16384입니다.But to provide a complete solution, something must be done to deal with the fact that, independent of whether tiling within a surface is supported, the maximum surface dimension is currently 16384 - nowhere near the 128K+ that applications already want. 하드웨어에 큰 텍스처 크기를 지 원하는 것은 한 가지 방법 이지만이 경로를 전환 하는 데 상당한 비용 및/또는 절충이 있습니다.Just requiring the hardware to support larger texture sizes is one approach, however there are significant costs and/or tradeoffs to going this route.

Direct3D's 텍스처 필터 경로 및 렌더링 경로는 렌더링 중에 화면에 발생 하는 뷰포트 범위를 지원 하거나 필터링 중에 화면 가장자리에서 질감 줄 바꿈을 지원 하는 등의 다른 요구 사항으로 16K 질감을 지 원하는 전체 자릿수 측면에서 이미 포화 상태를 유지 합니다.Direct3D's texture filter path and rendering path are already saturated in terms of precision in supporting 16K textures with the other requirements, such as supporting viewport extents falling off the surface during rendering, or supporting texture wrapping off the surface edge during filtering. 질감 크기가 16K를 초과 하 여 기능/전체 자릿수가 특정 방식으로 제공 되는 경우 균형을 정의 하는 것이 좋습니다.A possibility is to define a tradeoff such that as the texture size increases beyond 16K, functionality/precision is given up in some manner. 그러나이 concession를 사용 하는 경우에도 하드웨어 시스템 전체에서 더 큰 질감 크기로 전환 하는 기능을 사용 하 여 추가 하드웨어 비용이 필요할 수 있습니다.Even with this concession however, additional hardware costs might be required in terms of addressing capability throughout the hardware system to go to larger texture sizes.

많은 텍스처에 대 한 문제: 표면의 위치에 대 한 전체 자릿수Issue with large textures: precision for locations on surface

질감으로 재생 되는 한 가지 문제는 단일 정밀도 부동 소수점 질감 좌표 (및 래스터화를 지 원하는 연결 된 interpolators)가 정밀도가 부족 하 여 표면의 위치를 정확 하 게 지정 하는 것입니다.One issue that comes into play as textures get very large is that single precision floating point texture coordinates (and the associated interpolators to support rasterization) run out of precision to specify locations on the surface accurately. 텍스처 필터링이 뒤따르게 됩니다.Jittery texture filtering would ensue. 한 가지 부담이 큰 옵션은 배정밀도를 지 원하는 것입니다. 하지만 적절 한 대안을 제공 하는 것이 좋습니다.One expensive option would be to require double precision interpolator support, though that could be overkill given a reasonable alternative.

다른 차원의 여러 리소스를 사용 하 여 메모리 공유Enabling multiple resources of different dimensions to share memory

스트리밍 리소스에서 제공 될 수 있는 또 다른 시나리오는 다른 차원/형식의 여러 리소스가 동일한 메모리를 공유할 수 있도록 하는 것입니다.Another scenario that could be served by streaming resources is enabling multiple resources of different dimensions/formats to share the same memory. 응용 프로그램에는 동시에 사용 하지 않는 것으로 알려진 단독 리소스 집합이 있거나, 매우 간단한 사용을 위해서만 생성 된 다음 다른 리소스를 만든 경우에만 생성 되는 리소스가 포함 되어 있습니다.Sometimes applications have exclusive sets of resources that are known not to be used at the same time, or resources that are created only for very brief use and then destroyed, followed by creation of other resources. "스트리밍 리소스"를 벗어날 수 있는 일반 성을 형식은 사용자가 동일한 (겹치는) 메모리에서 여러 다른 리소스를 가리키도록 할 수 있다는 것입니다.A form of generality that can fall out of "streaming resources" is that it is possible to allow the user to point multiple different resources at the same (overlapping) memory. 즉, 차원/형식을 정의 하는 "리소스"의 생성 및 소멸은 응용 프로그램의 관점에서 리소스의 기반이 되는 메모리 관리에서 분리 될 수 있습니다.In other words, the creation and destruction of "resources" (which define a dimension/format and so on) can be decoupled from the management of the memory underlying the resources from the application's point of view.

관련 항목Related topics

스트리밍 리소스Streaming resources