ID3D12GraphicsCommandList1::SetSamplePositions-Methode (d3d12.h)
Mit dieser Methode werden die Beispielpositionen konfiguriert, die von nachfolgenden Zeichnen-, Kopier-, Auflösungs- und ähnlichen Vorgängen verwendet werden.
Syntax
void SetSamplePositions(
[in] UINT NumSamplesPerPixel,
[in] UINT NumPixels,
[in] D3D12_SAMPLE_POSITION *pSamplePositions
);
Parameter
[in] NumSamplesPerPixel
Typ: UINT
SAL: In
Gibt die Anzahl der zu nehmenden Stichproben pro Pixel an. Dieser Wert kann 1, 2, 4, 8 oder 16 sein, andernfalls wird der SetSamplePosition-Aufruf gelöscht. Die Anzahl der Beispiele muss mit der im PSO zur Zeichnung konfigurierten Stichprobenanzahl übereinstimmen, andernfalls ist das Verhalten nicht definiert.
[in] NumPixels
Typ: UINT
SAL: In
Gibt die Anzahl von Pixeln an, für die Beispielmuster angegeben werden. Dieser Wert kann entweder 1 oder 4 sein, andernfalls wird der SetSamplePosition-Aufruf gelöscht. Der Wert 1 konfiguriert ein einzelnes Beispielmuster, das für jedes Pixel verwendet werden soll. der Wert 4 konfiguriert separate Beispielmuster für jedes Pixel in einem 2x2-Pixelraster, das über den Renderziel- oder Viewportbereich wiederholt wird und an geraden Koordinaten ausgerichtet ist.
Beachten Sie, dass die maximale Anzahl von kombinierten Beispielen 16 nicht überschreiten darf, andernfalls wird der Aufruf gelöscht. Wenn NumPixels auf 4 festgelegt ist, kann NumSamplesPerPixel nicht mehr als 4 Beispiele angeben.
[in] pSamplePositions
Typ: D3D12_SAMPLE_POSITION*
SAL: In_reads(NumSamplesPerPixel*NumPixels)
Gibt ein Array von D3D12_SAMPLE_POSITION Elementen an. Die Größe des Arrays ist NumPixels * NumSamplesPerPixel. Wenn NumPixels auf 4 festgelegt ist, entspricht die erste Gruppe von Stichprobenpositionen dem oberen linken Pixel im 2x2-Raster der Pixel; die nächste Gruppe von Beispielpositionen entspricht dem pixel oben rechts, die nächste Gruppe dem unteren linken Pixel und die letzte Gruppe dem pixel unten rechts.
Wenn während des Renderns die Zentrierungsinterpolation verwendet wird, bestimmt die Reihenfolge der Positionen für jedes Pixel die Priorität der Centroid-Sampling. Das heißt, die erste abgedeckte Stichprobe in der angegebenen Reihenfolge wird als ortszentrierter Stichprobe ausgewählt.
Rückgabewert
Keine
Bemerkungen
Die operative Semantik von Beispielpositionen wird durch die verschiedenen Vorgänge zum Zeichnen, Kopieren, Auflösen und anderen Vorgängen bestimmt, die auftreten können.
CommandList: Wenn keine vorherigen Aufrufe von SetSamplePositions in einer CommandList vorhanden sind, übernehmen die Beispiele die Standardposition basierend auf dem Pipeline state Object (PSO). Die Standardpositionen werden entweder durch den SAMPLE_DESC Teil des PSO bestimmt, wenn er vorhanden ist, oder durch die Standardbeispielpositionen, wenn für den RASTERIZER_DESC Teil des PSO ForcedSampleCount auf einen Wert größer als 0 festgelegt ist.
Nachdem SetSamplePosition aufgerufen wurde, müssen nachfolgende Zeichnungsaufrufe ein PSO verwenden, das eine übereinstimmende Beispielanzahl entweder mithilfe des SAMPLE_DESC Teils des PSO oder forcedSampleCount im RASTERIZER_DESC Teil des PSO angibt.
SetSamplePositions kann nur für eine Grafikbefehlsliste aufgerufen werden. Es kann nicht in einem Bündel aufgerufen werden. bundles erben den Beispielpositionsstatus von der aufrufenden CommandList und ändern ihn nicht.
Beim Aufrufen von SetSamplePositions(0, 0, NULL) werden die Beispielpositionen auf ihre Standardwerte zurückgesetzt.
RenderTarget löschen: Beispielpositionen werden beim Löschen eines Renderziels ignoriert.
Tiefenschablone löschen: Beim Löschen des Tiefenteils einer Tiefenschablonenoberfläche oder eines beliebigen Bereichs davon müssen die Stichprobenpositionen so festgelegt werden, dass sie denen des zukünftigen Renderings mit der abgeräumten Oberfläche oder Region übereinstimmen; der Inhalt unklarer Regionen, die mit unterschiedlichen Stichprobenpositionen erzeugt werden, wird nicht definiert.
Beim Löschen des Schablonenteils einer Tiefenschablonenoberfläche oder eines beliebigen Bereichs davon werden die Beispielpositionen ignoriert.
Zeichnen sie in RenderTarget: Beim Zeichnen auf ein Renderziel können die Beispielpositionen für jeden Zeichnungsaufruf geändert werden, auch beim Zeichnen in einen Bereich, der sich mit vorherigen Zeichnungsaufrufen überschneidet. Die aktuellen Beispielpositionen bestimmen die operative Semantik jedes Zeichnungsaufrufs, und Stichproben werden aus dem gespeicherten Inhalt des Renderziels entnommen, auch wenn der Inhalt mit unterschiedlichen Beispielpositionen erstellt wurde.
Zeichnen mit Tiefenschablone: Beim Zeichnen auf eine Tiefenschablonenoberfläche (Lese- oder Schreibfläche) oder einen beliebigen Bereich davon müssen die Beispielpositionen so festgelegt werden, dass sie denen entsprechen, die zuvor zum Löschen des betroffenen Bereichs verwendet wurden. Um eine andere Beispielposition zu verwenden, muss zuerst der Zielbereich gelöscht werden. Die Pixel außerhalb des klaren Bereichs sind nicht betroffen.
Hardware kann den Tiefenteil oder eine Tiefenschablonenoberfläche als Ebenengleichungen speichern und auswerten, um Tiefenwerte zu erzeugen, wenn die Anwendung einen Lesevorgang ausgibt. Nur der Rasterisierer und der Output-Merger sind erforderlich, um programmierbare Stichprobenpositionen des Tiefenteils einer Tiefenschablonenoberfläche zu unterstützen. Alle anderen Lese- oder Schreibvorgänge des Tiefenabschnitts, der mit festgelegten Beispielpositionen gerendert wurde, können sie ignorieren und stattdessen an den Standardpositionen stichprobenieren.
RenderTarget auflösen: Beim Auflösen eines Renderziels oder einer beliebigen Region davon werden die Beispielpositionen ignoriert. diese APIs funktionieren nur mit gespeicherten Farbwerten.
Auflösen der Tiefenschablone: Beim Auflösen des Tiefenteils einer Tiefenschablonenoberfläche oder eines beliebigen Bereichs davon müssen die Beispielpositionen so festgelegt werden, dass sie denen des vergangenen Renderings mit der aufgelösten Oberfläche oder Region übereinstimmen. Um eine andere Beispielposition zu verwenden, muss zuerst der Zielbereich gelöscht werden.
Beim Auflösen des Schablonenteils einer Tiefenschablonenoberfläche oder eines beliebigen Bereichs davon werden die Stichprobenpositionen ignoriert. Schablonenauflösungen funktionieren nur mit gespeicherten Schablonenwerten.
RenderTarget kopieren: Beim Kopieren aus einem Renderziel werden die Beispielpositionen ignoriert, unabhängig davon, ob es sich um eine vollständige oder teilweise Kopie handelt.
KopiertiefeSchablone (vollständige Unterquelle): Beim Kopieren einer vollständigen Unterquelle aus einer Tiefenschablonenoberfläche müssen die Beispielpositionen so festgelegt werden, dass sie den Beispielpositionen entsprechen, die zum Generieren der Quelloberfläche verwendet werden. Um eine andere Beispielposition zu verwenden, muss zuerst der Zielbereich gelöscht werden.
Übertragen Sie auf einigen Hardwareeigenschaften der Quelloberfläche (z. B. gespeicherte Ebenengleichungen für Tiefenwerte) an das Ziel. Wenn die Zieloberfläche anschließend gezeichnet wird, müssen daher die Beispielpositionen, die ursprünglich zum Generieren des Quellinhalts verwendet wurden, mit der Zieloberfläche verwendet werden. Die API erfordert dies auf der gesamten Hardware für die Konsistenz, auch wenn sie möglicherweise nur für einige gilt.
Copy DepthStencil (partielle Unterressource) kopieren: Beim Kopieren einer Teilunterquelle aus einer Tiefenschablonenoberfläche müssen die Beispielpositionen so festgelegt werden, dass sie den Beispielpositionen entsprechen, die zum Generieren der Quelloberfläche verwendet werden, ähnlich wie beim Kopieren einer vollständigen Unterquelle. Wenn der Inhalt einer betroffenen Zielunterressourcen jedoch nur teilweise von der Kopie abgedeckt wird, wird der Inhalt des unbedeckten Teils innerhalb dieser Unterressourcen nicht definiert, es sei denn, er wurde mit den gleichen Beispielpositionen wie die Kopierquelle generiert. Um eine andere Beispielposition zu verwenden, muss zuerst der Zielbereich gelöscht werden.
Beim Kopieren einer Teilunterquelle aus dem Schablonenteil einer Tiefenschablonenoberfläche werden die Beispielbeiträge ignoriert. Es spielt keine Rolle, welche Beispielpositionen verwendet wurden, um Inhalte für andere Bereiche des Zielpuffers zu generieren, die nicht von der Kopie abgedeckt sind – diese Inhalte bleiben gültig.
Shader SamplePos: Der intrinsische HLSL SamplePos kennt keine programmierbaren Beispielpositionen, und die ergebnisse, die an Shader zurückgegeben werden, die diese auf einer Oberfläche aufrufen, die mit programmierbaren Positionen gerendert wird, sind nicht definiert. Anwendungen müssen Koordinaten bei Bedarf manuell an ihren Shader übergeben. Ebenso ist die Auswertung von Attributen nach Beispielindex mit programmierbaren Beispielpositionen undefiniert.
Übergang aus DEPTH_READ oder DEPTH_WRITE Zustand: Wenn eine Unterquelle in DEPTH_READ oder DEPTH_WRITE Zustand in einen anderen Zustand übergehen wird, einschließlich COPY_SOURCE oder RESOLVE_SOURCE, muss möglicherweise einige Hardware die Oberfläche dekomprimieren. Daher müssen die Beispielpositionen in der Befehlsliste so festgelegt werden, dass sie mit denen übereinstimmen, die zum Generieren des Inhalts auf der Quelloberfläche verwendet werden. Darüber hinaus müssen die Beispielpositionen für nachfolgende Übergänge der Oberfläche, während die gleichen Tiefendaten darin verbleiben, weiterhin mit den in der Befehlsliste festgelegten Positionen übereinstimmen. Um eine andere Beispielposition zu verwenden, muss zuerst der Zielbereich gelöscht werden.
Wenn eine Anwendung den dekomprimierten Bereich minimieren möchte, wenn nur ein Teil verwendet werden muss, oder nur, um die Komprimierung beizubehalten, kann ResolveSubresourceRegion() im DECOMPRESS-Modus mit einem angegebenen Rect aufgerufen werden. Dadurch wird nur der relevante Bereich zu einer separaten Ressource dekomprimiert, wobei die Quelle auf einer bestimmten Hardware intakt bleibt, obwohl auf anderer Hardware sogar der Quellbereich dekomprimiert wird. Die separate explizit dekomprimierte Ressource kann dann in den gewünschten Zustand (z. B. SHADER_RESOURCE) übergestellt werden.
Übergang aus RENDER_TARGET Zustand: Wenn eine Unterressource in RENDER_TARGET Zustand auf etwas anderes als COPY_SOURCE oder RESOLVE_SOURCE übertragen wird, müssen einige Implementierungen die Oberfläche möglicherweise dekomprimieren. Diese Dekomprimierung ist für Stichprobenpositionen agnostisch.
Wenn eine Anwendung den dekomprimierten Bereich minimieren möchte, wenn nur ein Teil verwendet werden muss, oder nur, um die Komprimierung beizubehalten, kann ResolveSubresourceRegion() im DECOMPRESS-Modus mit einem angegebenen Rect aufgerufen werden. Dadurch wird nur der relevante Bereich zu einer separaten Ressource dekomprimiert, wobei die Quelle auf einer bestimmten Hardware intakt bleibt, obwohl auf anderer Hardware sogar der Quellbereich dekomprimiert wird. Die separate explizit dekomprimierte Ressource kann dann in den gewünschten Zustand (z. B. SHADER_RESOURCE) übergestellt werden.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | d3d12.h |
Bibliothek | D3d12.lib |
DLL | D3d12.dll |