Sample (sm4 - asm)
Stichprobendaten aus dem angegebenen Element/der angegebenen Textur unter Verwendung der angegebenen Adresse und des filterungsmodus, der vom angegebenen Sampler identifiziert wird.
sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler |
---|
Element | Beschreibung |
---|---|
Dest |
[in] Die Adresse des Ergebnisses des Vorgangs. |
srcAddress |
[in] Ein Satz von Texturkoordinaten. Weitere Informationen finden Sie im Abschnitt Hinweise. |
srcResource |
[in] Ein Texturregister. Weitere Informationen finden Sie im Abschnitt Hinweise. |
srcSampler |
[in] Ein Samplerregister. Weitere Informationen finden Sie im Abschnitt Hinweise. |
Bemerkungen
Die Quelldaten können aus einem beliebigen Ressourcentyp stammen, mit Ausnahme von Puffern.
srcAddress stellt den Satz von Texturkoordinaten bereit, die zum Ausführen des Beispiels erforderlich sind, als Gleitkommawerte, die auf den normalisierten Raum in der Textur verweisen. Adressumbruchmodi (Wrap/Spiegel/clamp/border usw.) werden für Texturkoordinaten außerhalb des [0...1]-Bereichs angewendet, aus dem Samplerzustand (s#) übernommen und angewendet, nachdem ein beliebiger Adressoffset auf Texturkoordinaten angewendet wurde.
srcResource ist ein Texturregister (t#). Dies ist einfach ein Platzhalter für eine Textur, einschließlich des Rückgabedatentyps der Ressource, die abgetastet wird. Alle diese Informationen werden in der Shader-Präambel deklariert. Die tatsächlich zu erfassende Ressource wird an Slot # (für t#) extern an den Shader gebunden.
srcSampler ist ein Samplerregister(n). Dies ist einfach ein Platzhalter für eine Sammlung von Filtersteuerelementen, z. B. Punkt- und Linearsteuerelemente, Mipmapping- und Adressumbruchsteuerelemente.
Der Satz von Informationen, die für die Hardware zum Durchführen der Stichprobenentnahme erforderlich sind, wird in zwei orthogonale Teile aufgeteilt. Zunächst stellt das Texturregister Quelldatentypinformationen bereit, z. B. Informationen dazu, ob die Textur SRGB-Daten enthält. Außerdem wird auf den tatsächlichen Speicher verwiesen, der abgetastet wird. Zweitens definiert das Samplerregister den anzuwendenden Filtermodus.
Arrayressourcen
Für Texture1D-Arrays wählt die Komponente srcAddress g (POS-swizzle) aus, aus welchem Array-Slice abgerufen werden soll. Dies wird immer als skalierter Gleitkommawert und nicht als normalisierter Raum für Standardtexturkoordinaten behandelt, und ein Round-to-Nearest-Wert wird auf den Wert angewendet, gefolgt von einer Klemmung auf den verfügbaren BufferArray-Bereich.
Für Texture2D-Arrays wählt die Komponente srcAddress b (POS-swizzle) aus, aus welchem Array-Slice abgerufen werden soll, andernfalls wird die für Texture1D-Arrays beschriebene Semantik verwendet.
Adressoffset
Das optionale [_aoffimmi(u,v,w)]-Suffix (Adressoffset durch eine sofortige ganze Zahl) gibt an, dass die Texturkoordinaten für das Beispiel durch eine Reihe von angegebenen konstanten Werten für den direkten texel-Leerraum versetzt werden sollen. Die Literalwerte sind eine Gruppe von 4-Bit-2-Komplementzahlen, die einen ganzzahligen Bereich [-8,7] aufweisen. Dieser Modifizierer ist für alle Ressourcen definiert, einschließlich Texture1D/2D-Arrays und Texture3D, aber er ist für TextureCube nicht definiert.
Hardware kann sofort wissen, dass eine Durchquerung eines Speicherbedarfs von Texels über einen gemeinsamen Standort durch eine Reihe von Beispielanweisungen durchgeführt wird. Dies kann mit _aoffimmi(u,v,w) vermittelt werden.
Die Offsets werden den Texturkoordinaten im Texelraum relativ zu den einzelnen mipleveln hinzugefügt, auf die zugegriffen wird. Obwohl Texturkoordinaten als normalisierte Gleitkommawerte bereitgestellt werden, wendet der Offset einen ganzzahligen Offset mit Texelraum an.
Adressoffsets werden nicht entlang der Arrayachse von Texture1D/2D-Arrays angewendet.
_aoffimmi v,w-Komponenten werden für Texture1Ds ignoriert.
_aoffimmi w-Komponente wird für Texture2Ds ignoriert.
Adressumbruchmodi (Wrap/Spiegel/clamp/border usw.) aus dem Samplerzustand (s#) werden angewendet, nachdem ein Beliebiger Adressoffset auf Texturkoordinaten angewendet wurde.
Rückgabetyp-Steuerelement
Das vom Beispiel an das Zielregister zurückgegebene Datenformat wird durch das Ressourcenformat (DXGI_FORMAT*) bestimmt, das an den srcResource-Parameter (t#) gebunden ist. Wenn z. B. das angegebene t# mit einer Ressource im Format DXGI_FORMAT_A8B8G8R8_UNORM_SRGB gebunden wurde, konvertiert der Samplingvorgang die texel-Stichproben von Gamma 2,0 in 1,0, wendet eine Filterung an, und das Ergebnis wird als Gleitkommawerte im Bereich [0..1] in das Zielregister geschrieben.
Zurückgegebene Werte sind 4-Vektoren (mit formatspezifischen Standardwerten für Komponenten, die nicht im Format vorhanden sind). Der Swizzle für srcResource bestimmt, wie das ergebnis mit 4 Komponenten aus dem Texturbeispiel/Filter geschwenscht werden soll. Danach bestimmt .mask on dest , welche Komponenten in dest aktualisiert werden.
Wenn das Beispiel einen 32-Bit-Gleitkommawert in ein 32-Bit-Register liest, mit Punktstichproben (ohne Filterung), kann er denormale Werte leeren oder nicht, andernfalls sind Zahlen unverändert. Wenn die Unsicherheit bei punktbasierten Stichproben-Denormalwerten ein Problem für eine Anwendung ist, verwenden Sie die ld-Anweisung , die garantiert, dass 32-Bit-Gleitkommawerte unverändert gelesen werden.
LOD-Berechnung
Ausführliche Informationen dazu, wie Ableitungen beim Bestimmen der LOD für die Filterung berechnet werden, finden Sie unter deriv_rtx und deriv_rty. Die Beispielanweisung berechnet implizit Ableitungen für die Texturkoordinaten unter Verwendung derselben Definition, die auch in den Ableitungs-Shaderanweisungen verwendet wird. Dies gilt nicht für sample_l oder sample_d Anweisungen. Für diese Anweisungen werden LOD oder Ableitungen direkt von der Anwendung bereitgestellt.
Für die Beispielanweisung können Implementierungen die gleiche LOD-Berechnung für alle 4 Pixel in einem 2x2-Stempel (aber keine größere Fläche) verwenden oder LOD-Berechnungen pro Pixel ausführen.
Sonstige Details
Für Buffer & Texture1D werden srcAddress .gba-Komponenten (POS-swizzle) ignoriert. Für Texture1D-Arrays werden srcAddress .ba-Komponenten (POS-swizzle) ignoriert. Bei Texture2Ds wird die Komponente srcAddress .a (POS-swizzle) ignoriert.
Beim Abrufen aus einem Eingabeslot, an den nichts gebunden ist, wird für alle Komponenten 0 zurückgegeben.
Beschränkungen
- srcResource muss ein t#-Register sein. srcResource kann kein ConstantBuffer sein, der nicht an t#-Register gebunden werden kann.
- srcSampler muss ein s#-Register sein.
- Relative Adressierung auf srcResource oder srcSampler ist nicht zulässig.
- srcAddress muss ein temp-Register (r#/x#), constantBuffer (cb#), ein Eingaberegister (v#) oder ein unmittelbarer(n) Wert(n) sein.
- dest muss ein temp-Register (r#/x#) oder ein Ausgaberegister (o*#) sein.
- _aoffimmi(u,v,w) ist für TextureCubes nicht zulässig.
Diese Anweisung gilt für die folgenden Shaderphasen:
Vertexshader | Geometrie-Shader | Pixelshader |
---|---|---|
x |
Minimales Shadermodell
Diese Funktion wird in den folgenden Shadermodellen unterstützt.
Shadermodell | Unterstützt |
---|---|
Shadermodell 5 | ja |
Shadermodell 4.1 | ja |
Shadermodell 4 | ja |
Shadermodell 3 (DirectX HLSL) | Nein |
Shadermodell 2 (DirectX HLSL) | Nein |
Shadermodell 1 (DirectX HLSL) | Nein |