RWTexture2D

Eine Lese-/Schreibressource.

Methode BESCHREIBUNG
GetDimensions Ruft die Ressourcendimensionen ab.
Laden Liest Texturdaten.
Operator[] Ruft eine Ressourcenvariable ab.

 

Sie können RWTexture2D-Objekten der Speicherklasse globallycoherent vorangestellt. Diese Speicherklasse verursacht Speicherbarrieren und Synchronisierungen, um Daten über die gesamte GPU zu leeren, sodass andere Gruppen Schreibvorgänge sehen können. Ohne diesen Spezifizierer wird durch eine Speicherbarriere oder Synchronisierung nur eine ungeordnete Zugriffsansicht (UAV) innerhalb der aktuellen Gruppe geleert.

Ein RWTexture2D-Objekt erfordert einen Elementtyp in einer Deklarationsanweisung für das -Objekt. Beispielsweise ist die folgende Deklaration nicht korrekt:

// The following declaration is incorrectly coded.
RWTexture2D myTexture;

Die folgende Deklaration ist richtig:

// The following declaration is correctly coded.
RWTexture2D<float> tex;

Da ein RWTexture2D-Objekt ein UAV-Objekt ist, unterscheiden sich seine Eigenschaften von einem SRV-Objekt (Shader Resource View), z. B. einem Texture2D-Objekt . Beispielsweise können Sie aus einem RWTexture2D-Objekt lesen und in es schreiben, aber Sie können nur aus einem Texture2D-Objekt lesen.

Ein RWTexture2D-Objekt kann keine Methoden aus einem Texture2D-Objekt verwenden, z. B. Sample. Da Sie jedoch mehrere Ansichtstypen für dieselbe Ressource erstellen können, können Sie mehrere Texturtypen in mehreren Shadern als einzelne Textur deklarieren. Die folgenden Codeausschnitte zeigen beispielsweise, wie Sie ein RWTexture2D-Objekt als Tex in einem Compute-Shader deklarieren und verwenden und anschließend ein Texture2D-Objekt als Tex in einem Pixelshader deklarieren und verwenden können.

Hinweis

Die Runtime erzwingt bestimmte Verwendungsmuster, wenn Sie mehrere Ansichtstypen für dieselbe Ressource erstellen. Beispielsweise lässt die Runtime nicht zu, dass Sie sowohl eine UAV-Zuordnung für eine Ressource als auch eine SRV-Zuordnung für dieselbe ressource gleichzeitig haben.

 

Der folgende Code gilt für den Compute-Shader:

RWTexture2D<float> tex;
[numthreads(groupDim_x, groupDim_y, 1)]
void main(
    uint3 groupId : SV_GroupID,
    uint3 groupThreadId : SV_GroupThreadID,
    uint3 dispatchThreadId : SV_DispatchThreadID,
    uint groupIndex : SV_GroupIndex)
{
    tex [dispatchThreadId.xy] = <something>;
}

Der folgende Code gilt für den Pixelshader:

struct PixelShaderInput
{
    float4 pos : SV_POSITION;
    float2 tex : TEXTURE;
};

Texture2D<float> tex;
float4 main(PixelShaderInput input) : SV_TARGET
{
    return tex.Sample(TextureSampler, input.tex);
}

Minimales Shadermodell

Dieses Objekt wird in den folgenden Shadermodellen unterstützt.

Shadermodell Unterstützt
Shadermodell 5 und höher ja

 

Dieses Objekt wird für die folgenden Shadertypen unterstützt:

Scheitelpunkt Hull Domain Geometrie Pixel Compute
x x

 

Siehe auch

Shadermodell 5-Objekte