HLSL 스트리밍 리소스 노출HLSL streaming resources exposure

셰이더 모델 5에서 스트리밍 리소스를 지원 하려면 특정 Microsoft HLSL (High Level Shader Language) 구문이 필요 합니다.A specific Microsoft High Level Shader Language (HLSL) syntax is required to support streaming resources in Shader Model 5.

셰이더 모델 5에 대 한 HLSL 구문은 스트리밍 리소스를 지 원하는 장치 에서만 사용할 수 있습니다.The HLSL syntax for Shader Model 5 is allowed only on devices with streaming resources support. 다음 표에서 리소스를 스트리밍하는 데 관련 된 각 HLSL 메서드는 하나 (피드백) 또는 2 (이 순서 대로 클램프 및 피드백) 추가 선택적 매개 변수를 허용 합니다.Each relevant HLSL method for streaming resources in the following table accepts either one (feedback) or two (clamp and feedback in this order) additional optional parameters. 예를 들어 샘플 메서드는 다음과 같습니다.For example, a Sample method is:

샘플 (샘플러, 위치 [ , 오프셋 [ , 클램프 [ , 피드백 ] ] ] )Sample(sampler, location [, offset [, clamp [, feedback] ] ])

샘플 메서드의 예는 Texture2D (S, float, int, float, uint)입니다.An example of a Sample method is Texture2D.Sample(S,float,int,float,uint).

Offset, 클램프 및 피드백 매개 변수는 선택 사항입니다.The offset, clamp and feedback parameters are optional. 필요한 모든 선택적 매개 변수를 지정 해야 합니다 .이 매개 변수는 기본 함수 인수에 대 한 c + + 규칙과 일치 합니다.You must specify all optional parameters up to the one you need, which is consistent with the C++ rules for default function arguments. 예를 들어 피드백 상태가 필요한 경우 논리적으로 필요 하지 않은 경우에도 offset 및 클램프 매개 변수를 Sample에 명시적으로 제공 해야 합니다.For example, if the feedback status is needed, both offset and clamp parameters need to be explicitly supplied to Sample, even though they may not be logically needed.

클램프 매개 변수는 스칼라 float 값입니다.The clamp parameter is a scalar float value. 클램프 = 0.0 f의 리터럴 값은 클램프 작업이 수행 되지 않음을 나타냅니다.The literal value of clamp=0.0f indicates that the clamp operation isn't performed.

피드백 매개 변수는 메모리 액세스 쿼리 내장 CheckAccessFullyMapped 함수에 제공할 수 있는 uint 변수입니다.The feedback parameter is a uint variable that you can supply to the memory-access querying intrinsic CheckAccessFullyMapped function. 피드백 매개 변수의 값을 수정 하거나 해석 해서는 안 됩니다. 그러나 컴파일러는 값을 수정 했는지 여부를 검색 하는 고급 분석과 진단을 제공 하지 않습니다.You must not modify or interpret the value of the feedback parameter; but, the compiler doesn't provide any advanced analysis and diagnostics to detect whether you modified the value.

CheckAccessFullyMapped의 구문은 다음과 같습니다.Here is the syntax of CheckAccessFullyMapped:

bool CheckAccessFullyMapped (uint FeedbackVar);bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMappedFeedbackVar 값을 해석 하 고 액세스 하는 모든 데이터가 리소스에서 매핑된 경우 true를 반환 합니다. 그렇지 않으면 CheckAccessFullyMapped 는 false를 반환 합니다.CheckAccessFullyMapped interprets the value of FeedbackVar and returns true if all data being accessed was mapped in the resource; otherwise, CheckAccessFullyMapped returns false.

클램프 또는 피드백 매개 변수가 있으면 컴파일러가 기본 명령의 변형을 내보냅니다.If either the clamp or feedback parameter is present, the compiler emits a variant of the basic instruction. 예를 들어 스트리밍 리소스의 샘플은 명령을 생성 sample_cl_s 합니다.For example, sample of a streaming resource generates the sample_cl_s instruction.

클램프 나 피드백이 모두 지정 되지 않은 경우 컴파일러는 기본 명령을 내보내 현재 동작이 변경 되지 않도록 합니다.If neither clamp nor feedback is specified, the compiler emits the basic instruction, so that there is no change from the current behavior.

0.0 f의 클램프 값은 클램프를 수행 하지 않음을 나타냅니다. 따라서 드라이버 컴파일러는 대상 하드웨어에 대 한 지침을 추가로 조정할 수 있습니다.The clamp value of 0.0f indicates that no clamp is performed; thus, the driver compiler can further tailor the instruction to the target hardware. 사용자 피드백이 명령에서 NULL 인 경우 피드백은 사용 되지 않습니다. 따라서 드라이버 컴파일러는 대상 아키텍처에 대 한 지침을 추가로 조정할 수 있습니다.If feedback is a NULL register in an instruction, the feedback is unused; thus, the driver compiler can further tailor the instruction to the target architecture.

HLSL 컴파일러에서 클램프가 0.0 f이 고 피드백이 사용 되지 않는 것으로 유추 되는 경우 컴파일러는 해당 하는 기본 명령 (예: 대신)을 내보냅니다 sample sample_cl_s .If the HLSL compiler infers that clamp is 0.0f and feedback is unused, the compiler emits the corresponding basic instruction (for example, sample rather than sample_cl_s).

스트리밍 리소스 액세스가 구조화 된 리소스의 경우와 같이 몇 가지 구성 바이트 코드 명령으로 구성 된 경우 컴파일러는 또는 작업을 통해 개별 피드백 값을 집계 하 여 최종 피드백 값을 생성 합니다.If a streaming resource access consists of several constituent byte code instructions, for example, for structured resources, the compiler aggregates individual feedback values via the OR operation to produce the final feedback value. 따라서 이러한 복잡 한 액세스를 위한 단일 피드백 값이 표시 됩니다.Therefore, you see a single feedback value for such a complex access.

사용자 의견 및/또는 클램프를 지원 하도록 변경 된 HLSL 메서드의 요약 테이블입니다.This is the summary table of HLSL methods that are changed to support feedback and/or clamp. 이러한 모든 작업은 모든 차원의 타일 및 비 스트리밍 리소스에서 작동 합니다.These all work on tiled and non-streaming resources of all dimensions. 비 스트리밍 리소스는 항상 완전히 매핑되도록 표시 됩니다.Non-streaming resources always appear to be fully mapped.

HLSL 개체 HLSL objects 사용자 의견 옵션 (\*)을 사용 하는 내장 메서드에는 클램프 옵션도 있습니다.Intrinsic methods with feedback option (\*) - also has clamp option

RW Texture2D[RW]Texture2D

RW Texture2DArray[RW]Texture2DArray

TextureCUBETextureCUBE

TextureCUBEArrayTextureCUBEArray

수집Gather

GatherRedGatherRed

GatherGreenGatherGreen

GatherBlueGatherBlue

GatherAlphaGatherAlpha

GatherCmpGatherCmp

GatherCmpRedGatherCmpRed

GatherCmpGreenGatherCmpGreen

GatherCmpBlueGatherCmpBlue

GatherCmpAlphaGatherCmpAlpha

RW Texture1D[RW]Texture1D

RW Texture1DArray[RW]Texture1DArray

RW Texture2D[RW]Texture2D

RW Texture2DArray[RW]Texture2DArray

RW Texture3D[RW]Texture3D

TextureCUBETextureCUBE

TextureCUBEArrayTextureCUBEArray

샘플이Sample\*

SampleBias\*SampleBias\*

SampleCmp \*SampleCmp\*

SampleCmpLevelZeroSampleCmpLevelZero

SampleGrad\*SampleGrad\*

SampleLevelSampleLevel

RW Texture1D[RW]Texture1D

RW Texture1DArray[RW]Texture1DArray

RW Texture2D[RW]Texture2D

Texture2DMSTexture2DMS

RW Texture2DArray[RW]Texture2DArray

Texture2DArrayMSTexture2DArrayMS

RW Texture3D[RW]Texture3D

RW 버퍼[RW]Buffer

RW ByteAddressBuffer[RW]ByteAddressBuffer

RW StructuredBuffer[RW]StructuredBuffer

로드Load

 

관련 항목Related topics

스트리밍 리소스에 대한 파이프라인 액세스Pipeline access to streaming resources