-
HINTERGRUND
-
Textur
bezieht sich im Allgemeinen auf Bilder, die sich wiederholende Muster
umfassen, die verwendet werden können,
um die Grafikmuster zu umschließen.
Die Texturdaten können
mittels Textursampling-Techniken basierend auf Nyquist-Kriterien
gesampelt werden. Textursampling-Techniken werden immer komplexer
und sind weitverbreitet. Die Textursampling-Techniken können Point-Sampling, bilineares
Filtern, trilineares Filtern, anisotropes Filtern, Anti-Aliasing
(Kantenglättung)
und andere ähnliche
Techniken beinhalten. Das Textursampling wird immer häufiger verwendet,
beispielsweise von einem Vertex-Shader, Geometrie-Shader und Pixel-Shader.
-
Ebenfalls
steigt die Komplexität
und Verwendung solcher Textursampling-Techniken und damit steigt stets die
Komplexität
der zur Durchführung
des Textursamplings verwendeten Hardware. Es gibt immerhin wenige
Applikationen, die eine Verwendung von Textursampling-Techniken
erfordern können,
die keinen direkten Zugang zu dem Hardware-Gerät benötigen oder haben. Ebenfalls
können
die bereits bestehenden Hardware-Geräte komplexe Textursampling-Operationen
nicht umfassend unterstützen
oder die bereits bestehenden Hardware-Geräte können komplexe Textursampling-Operationen
nicht effizient durchführen.
-
KURZE BESCHREIBUNG DER ZEICHUNGEN
-
Die
hierin beschriebene Erfindung wird in den begleitenden Figuren beispielhaft
und nicht einschränkend
veranschaulicht. Aus Gründen
der Einfachheit und Klarheit der Veranschaulichung sind in den Figuren
veranschaulichte Elemente nicht notwendigerweise maßstabsgetreu
gezeichnet. Die Abmessungen einiger Elemente können hinsichtlich der anderen
Elemente aus Gründen
der Klarheit beispielsweise übertrieben
groß dargestellt
sein. Weiter wurden Bezugsmarken in den Figuren an angemessenen
Stellen wiederholt, um entsprechende oder analoge Elemente anzuzeigen.
-
1 veranschaulicht
eine Grafikverarbeitungs-Technik, die einen Textursampler verwendet, umgesetzt
durch Verwendung einer Shader-Sprache in Übereinstimmung mit einer Ausführungsform.
-
2 veranschaulicht
dreidimensionale Pipelinestufen einer Grafikverarbeitungs-Technik,
die Textursampler verwendet, umgesetzt durch Verwendung einer Shader-Sprache
in Übereinstimmung
mit einer Ausführungsform.
-
3 ist
ein Ablaufdiagramm, das einen Textursampler veranschaulicht, umgesetzt
durch Verwendung einer Shader-Sprache in Übereinstimmung mit einer Ausführungsform.
-
4 veranschaulicht
ein Ablaufdiagramm, das einen Textursampling-Prozess unter Verwendung einer Shader-Sprache
in Übereinstimmung
mit einer Ausführungsform
darstellt.
-
5 veranschaulicht
ein Computersystem 500, bei dem das Textursampling unter
Verwendung einer Shader-Sprache in Übereinstimmung mit einer Ausführungsform
implementiert sein kann.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Die
folgende Beschreibung beschreibt Techniken zur Durchführung von
Textursampling mittels eines Textursamplers, der mit einer Shader-Sprache implementiert
ist. In der folgenden Beschreibung werden zahlreiche spezifische
Details, wie z. B. Logikimplementierungen, Ressourcenaufteilung
oder -teilung oder Duplikationsimplementierungen, Arten und Zusammenhänge von
Systemkomponenten und Logikaufteilung oder Integrationsauswahlen
dargelegt, um ein gründliches
Verständnis
der vorliegenden Erfindung bereitzustellen. Es ist für einen
Fachmann jedoch selbstverständlich,
dass die Erfindung ohne solche spezifischen Details betrieben werden kann.
In anderen Fällen
wurden Steuerstrukturen, Schaltungen auf Gatterebene und komplette
Softwarebefehlssequenzen nicht im Detail gezeigt, um die Erfindung
nicht in den Hintergrund zu rücken.
Der Fachmann wird anhand der beinhalteten Beschreibungen in der
Lage sein, angemessene Funktionalität ohne ungebührliche
Experimente zu implementieren.
-
Verweise
in der Beschreibung auf „eine
Ausführungsform”, „eine beispielhafte
Ausführungsform” geben
an, dass die beschriebene Ausführungsform ein
bestimmtes Merkmal, eine Struktur oder Charakteristikum beinhalten
kann, aber jede Ausführungsform
muss nicht notwendigerweise das bestimmte Merkmal, die Struktur
oder Charakteristikum beinhalten. Des Weiteren beziehen sich solche
Ausdrücke nicht
notwendigerweise auf die gleiche Ausführungsform. Wenn weiter ein
bestimmtes Merkmal, eine Struktur oder Charakteristikum in Verbindung
mit einer Ausführungsform
beschrieben wird, wird beantragt, dass es/sie innerhalb des Wissens
eines Fachmannes liegt, solch ein Merkmal, eine Struktur oder Charakteristikum
in Verbindung mit anderen Ausführungsformen,
die explizit beschrieben sind oder nicht, zu beeinflussen.
-
Erfindungsgemäße Ausführungsformen
können
in Hardware, Firmware, Software oder jeder Kombination davon implementiert
sein. Erfindungsgemäße Ausführungsformen
können
ebenfalls als auf einem maschinenlesbaren Medium gespeicherte Befehle
implementiert sein, die von einem oder mehr Prozessoren gelesen
und ausgeführt
werden können.
Ein maschinenlesbares Speichermedium kann jeden Mechanismus zum
Speichern oder Übertragen von
Informationen in einer Form, die von einer Maschine (z. B. ein EDV-Gerät) gelesen
werden kann, beinhalten.
-
Ein
maschinenlesbares Speichermedium kann beispielsweise Festspeicher
(read only memory, ROM); Direktzugriffsspeicher (random access memory,
RAM); magnetische Diskettenspeichermedien; optische Speichermedien;
Flash-Memory-Geräte; elektrische,
optische Formen von Signalen beinhalten. Weiter können Firmware,
Software, Routinen und Befehle hierin als bestimmte Aktionen durchführend beschrieben
werden. Es sollte jedoch selbstverständlich sein, dass solche Beschreibungen
alleine dem Nutzen dienen und dass solche Aktionen in Wirklichkeit
aus EDV-Geräten,
Prozessoren, Controllern und anderen Geräten resultieren, die die Firmware,
Software, Routinen und Befehle ausführen.
-
Eine
Ausführungsform
einer n-zu-n-Beziehung zwischen mehreren Shadern und Textursamplern
ist in 1 veranschaulicht. Bei einer Ausführungsform
kann das Beziehungsdiagramm „M” Shader 110-A bis 110-M umfassen
und „K” Textursampler 120-A bis 120-K können verschiedene
Sampling-Operationen („N”, Sampling-Operationen
beispielsweise) mit verschiedenen Sampler-Zuständen („ p” Sampler-Zustände beispielsweise)
unterstützen. Bei
einer Ausführungsform
kann der Textursampler 120 mit einem Sampler-Zustand konfiguriert
sein und kann, basierend auf dem Sampler-Zustand, eine durchzuführende Sample-Operation
empfangen. Bei einer Ausführungsform
kann der Shader 110-A Textursamples von den Textursamplern 120-A bis 120-K einholen.
Bei einer anderen Ausführungsform
kann der Shader 110-A Textursamples von beispielsweise Textursamplern 120-B, 120-D, 120-G und 120-J einholen.
Bei einer Ausführungsform
können
die Shader 110-A bis 110-M beispielsweise Vertex-,
Geometrie-, Hull-, Domain-, Pixel- oder Compute-Shader darstellen.
Bei einer Ausführungsform
kann der Shader 110-A mehrere Sample-Zustände (sample-states, SS)
beinhalten, die zum Sampling verwendet werden können, und der Shader 110-A kann
beispielsweise mehrere Sample-Operationen mittels eines spezifischen
Sampler-Zustandes durchführen.
Bei einer Ausführungsform
kann ein Sampler-Zustand getrennte Logik für die Sampling-Operationen haben. Zur
Kompilierzeit kann der Sampler-Zustand zu dem Sampler-Zustand (SS) hinzugefügt werden,
um einen optimalen Code für
den spezifischen Sampler-Zustand und die Sampler-Operation zu erhalten. Bei
einer Ausführungsform
können
die Textursampler 120-A bis 120-K Textursampler-Operationen
darstellen, die eine Untermenge von Textursampler unterstützenden
Sampling-Operationen und Sampler-Zuständen implementieren können.
-
Bei
einer Ausführungsform
kann jeder Shader 110 Textursamples einholen, die von einem
oder mehr Textursamplern 120 generiert wurden. Bei einer Ausführungsform
können
die Textursampler 120-A bis 120-K offline mittels
einer Shader-Sprache, wie z. B. Assembler, Cg, GLSL, HLSL und anderen
Shader-Sprachen,
implementiert sein. Bei einer Ausführungsform können die
Textursampler 120 während der
Erzeugung der Shader 110 oder während orthogonaler Sampler-Zustand-Objekt-Erzeugung
oder auf Anfrage zu einem späteren
Zeitpunkt nach der Erzeugungsphase kompiliert werden. Bei einer
Ausführungsform
kann ein Sampler-Binary
(sampler binary, SS-BIN) erzeugt und von den Shadern 110 verwendet
werden, während
die Shader 110 Textursamples erfordern.
-
Bei
einer Ausführungsform
können
die Shader 110 und die Textursampler 120 beispielsweise
in programmierbarer 3D-Grafikpipeline verwendet werden. Bei einer
Ausführungsform
kann die programmierbare 3D-Grafikpipeline Direct3D10 (D3D10), Direct3D11
(D3D11) oder andere solche Pipelinestufen einer DirectX-Applikationsprogrammschnittstelle (application
program interface, API) umfassen, die von der Microsoft® Corporation
erhältlich
ist, oder OpenGL-Pipelinestufen einer Cross-Plattform-API, die von
Silicon Graphics Inc. erhältlich
ist. Die Textursampler 120 können jedoch ebenfalls von jedem anderen
Shader in anderen Umgebungen verwendet werden.
-
Eine
Ausführungsform
einer programmierbaren dreidimensionalen (3D) Grafikpipeline, die
einen Textursampler verwenden kann, der mittels höherer Shader-Sprache
implementiert ist, ist in 2 veranschaulicht.
Bei einer Ausführungsform
kann programmierbare 3D-Grafikpipeline 200 Stufen umfassen,
wie z. B. einen Eingabedaten-Verarbeitungsblock 210, eine
Vielzahl von Shadern, wie z. B. einen Vertex-Shader 220,
Hull-Shader 230, Domain-Shader 250, Geometrie-Shader 260 und
Pixel-Shader 270, einen Tessellator 235, einen
Rasterblock 265, einen Mischer 275, Textursampler 280-A bis 280-K und
einen Speicher 290.
-
Bei
einer Ausführungsform
können
die programmierbaren Pipelinestufen Grafiken für Echtzeitapplikationen, wie
z. B. Spiele, generieren. Bei einer Ausführungsform kann die Pipelinestufe 200 D3D11 einer
DirectX-Applikationsprogrammschnittstelle
(application program interface, API) darstellen, die von der Microsoft® Corporation
erhältlich
ist.
-
Bei
einer Ausführungsform
kann der Eingabedaten-Verarbeitungsblock 210 Dateneinheiten
mittels in Puffern 290-A und 290-B des Speichers 290 gespeicherter
Indexdaten bzw. Vertexdaten generieren. Bei einer Ausführungsform
können
die Vertexdaten Eckpunkte von Dreiecken, Punkten, Linien und anderen ähnlichen
Daten darstellen. Bei einer Ausführungsform
kann der Eingabedaten-Verarbeitungsblock 210 die
Dateneinheiten an den Vertex-Shader 220 bereitstellen.
Bei einer Ausführungsform
kann der Eingabedaten-Verarbeitungsblock 210 die geometrischen
Daten mittels Vertex- und Indexdaten, die in den Puffern 290-A und 290-B gespeichert
sind, zusammenstellen, bevor die geometrischen Daten dem Vertex-Shader 220 und
dem Geometrie-Shader 260 bereitgestellt werden.
-
Bei
einer Ausführungsform
kann der Vertex-Shader 220 die Eckpunkte verarbeiten, die
von dem Eingabedaten-Verarbeitungsblock 210 empfangen wurden,
mittels der Textursamples, die von den Textursamplern 280-A bis 280-K generiert
wurden. Bei einer Ausführungsform
kann der Vertex-Shader 220 die Textursamples verwenden,
die von irgendeinem oder einigen oder allen Textursamplern 280-A bis 280-K generiert
wurden. Bei einer Ausführungsform
kann der Vertex-Shader 220 einen einzelnen Ausgabeeckpunkt
generieren, der mittels der Textursamples nach Empfang eines einzelnen
Eingabeeckpunktes verarbeitet werden kann. Bei einer Ausführungsform
kann der Vertex-Shader 220 Transformationen durchführen, um dem
Eingabeeckpunkt Spezialeffekte, wie z. B. Ausleuchtung und Skinning, bereitzustellen.
Bei einer Ausführungsform
kann der Vertex-Shader 220 mathematische Operationen durchführen, um
die Farbe, Textur oder Position des Eingabeeckpunktes zu verändern. Bei
einer Ausführungsform
kann der Vertex-Shader 220 mittels
Shader-Sprachen, wie z. B. Assembler-Sprache, C für Grafik-(Cg)-Sprache, OpenGL-Shader-Sprache (GLSL)
oder höhere
Shader-Sprache (HLSL) oder jede andere Shader-Sprache, implementiert
werden.
-
Bei
einer Ausführungsform
kann der Hull-Shader 230 Patch-Steuerpunkte empfangen und
kann die Patch-Steuerpunkte für
den festen Funktionstessellator 235 vorbereiten. Bei einer
Ausführungsform
kann der Hull-Shader 230 Textursamples von einem oder mehr
Textursamplern 280-A bis 280-K empfangen. Bei
einer Ausführungsform
kann der Hull-Shader 230 Textursamples von den Textursamplern 280-A und 280-B empfangen.
Bei einer Ausführungsform
kann der Hull-Shader 230 mittels Shader-Sprache implementiert
sein. Bei einer Ausführungsform
kann der Tessellator 235 das Patch basierend auf Steuereingaben
von dem Hull-Shader 230 unterteilen und kann die Ergebnisse
der Tessellation an den Domain-Shader 250 weitergeben.
Bei einer Ausführungsform
kann der Domain-Shader 250 die
generierten Eckpunkte manipulieren, um die Eckpunkte an eine Form
anzupassen, oder kann mittels der Eingaben von dem Tessellatorblock 235 und
der Textursamples von einem oder mehr der Textursampler 280-A bis 280-K ein
Displacement-Mapping durchführen.
Bei einer Ausführungsform
kann der Domain-Shader 250 Textursamples
verwenden, die von dem Textursampler 280-B bereitgestellt
sind. Bei einer Ausführungsform
kann der Domain-Shader 250 die Ergebnisse an den Geometrie-Shader 260 oder
den Rasterblock 265 bereitstellen. Bei einer Ausführungsform
kann der Domain-Shader 250 mittels höherer Shader-Sprachen implementiert
sein.
-
Bei
einer Ausführungsform
kann der Geometrie-Shader 260 schattierte Grundelemente
in Antwort auf den Empfang von ganzen Grundelementen von dem Vertex-Shader 220 oder
dem Domain-Shader 250 und Textursamples, die von einem
oder mehr der Textursampler 280-A bis 280-K generiert
wurden, generieren. Bei einer Ausführungsform kann der Geometrie-Shader 260 Textursamples
empfangen, die von den Textursamplern 280-A und 280-K generiert wurden.
Bei einer Ausführungsform
können
die ganzen Grundelemente eine Vielzahl von Eckpunkten umfassen.
Bei einer Ausführungsform
kann der Geometrie-Shader 260 null oder mehr schattierte
Grundelemente in Antwort auf den Empfang der Vielzahl von Eckpunkten
und Textursamples als Eingaben erzeugen.
-
Bei
einer Ausführungsform
kann die Vielzahl von Eckpunkten drei Eckpunkte eines Dreiecks oder zwei
Eckpunkte einer Linie oder einen einzelnen Eckpunkt eines Punktes
zusammen mit Adjazenzinformationen als Eingaben umfassen und kann
null oder mehr schattierte Eckpunkte als Ausgaben generieren. Bei
einer Ausführungsform
kann der Geometrie-Shader 260 Operationen durchführen, wie
z. B. Point-Stripe-Generierung, Geometrie-Tessellation und Shadow-Volume-Extrusion,
um schattierte Grundelemente zu generieren. Bei einer Ausführungsform kann
der Geometrie-Shader 260 einen oder mehr der Textursampler 280 kompilieren
und die Textursampler 280-A bis 280-K sodann abfragen,
um Textursamples von den Texturdatenwerten, die beispielsweise in
dem Puffer 290-D gespeichert sind, zu erhalten. Bei einer
Ausführungsform
kann der Geometrie-Shader 260 mittels Assembler-, Cg-,
HLSL- und GLSL-Sprachen programmiert sein.
-
Bei
einer Ausführungsform
kann der Rasterblock 265 Eckpunkte (Vektorgrafik-Information)
von dem Vertex-Shader 220 und dem Geometrie-Shader 260 empfangen
und ein Rasterbild generieren, das Pixel oder Punkte beinhalten
kann, die auf einem Display-Gerät
angezeigt werden können.
Bei einer Ausführungsform
kann der Rasterblock 265 Rastertechniken durchführen, wie
z. B. Transformationen, Clipping, Abtastumsetzung, Culling, Texturfilterung
und andere Techniken. Bei einer Ausführungsform kann der Rasterblock 265 die
Pixel an einen Pixel-Shader 270 zur Verarbeitung des Rasterbildes
bereitstellen.
-
Bei
einer Ausführungsform
kann der Pixel-Shader 270 Rich-Shading-Techniken an dem Rasterbild durchführen, um
Pro-Pixel-Ausgaben zu generieren. Bei einer Ausführungsform kann der Pixel-Shader 270 Techniken
durchführen,
wie z. B. Pro-Pixel-Ausleuchtung und verwandte Effekte, wie z. B.
Bump-Mapping, Farbtoning, Schatten, spiegelnde Highlights und Durchsichtigkeit,
um scharfe und realistischere Bilder bereitzustellen. Bei einer
Ausführungsform
kann der Pixel-Shader 270 mittels
Assembler-, Cg-, HLSL- und GLSL-Sprachen oder anderen ähnlichen
Sprachen programmiert sein. Bei einer Ausführungsform kann der Pixel-Shader 270 vor dem
Generieren von Schattierungseffekten Pixel-Daten von dem Rasterblock 265 und
Textursamples von einem oder mehr Textursamplern 280-A bis 280-K empfangen.
Bei einer Ausführungsform
kann der Pixel-Shader 270 Textursamples von Textursamplern 280-B und 280-K empfangen.
Bei einer Ausführungsform
kann der Pixel-Shader 270 die Texturdatenwerte ebenfalls
direkt von dem Puffer 290-F empfangen. Bei einer Ausführungsform
kann die Ausgabe des Pixel-Shaders 270 an den Mischer 275 zur weiteren
Verarbeitung bereitgestellt werden.
-
Bei
einer Ausführungsform
können
die Textursampler 280-A bis 280-K die Texturdatenwerte,
die in den Texturpuffern 290-C, 290-D und 290-F und
anderen Puffern gespeichert sind, sampeln. Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K mittels einer
Shader-Sprache implementiert werden, die verwendet wird, um die
Shader 220, 230, 250, 260 und 270 zu
implementieren. Solch ein Ansatz kann einer komplexen Textursampling-Funktion
ermöglichen,
als Teil eines Softwarecodes implementiert zu werden, der mit einem
Sampler-Zustand übereinstimmen
kann. Bei einer Ausführungsform können die
Textursampler 280-A bis 280-K mittels Cg- oder
GLSL- oder HLSL-Sprachen implementiert werden. Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K mittels höherer Shader-Sprachen
während
einer Offline-Phase implementiert werden. Bei einer Ausführungsform
können die
Textursampler 280-A bis 280-K mittels des Shader-Compilers während einer
Vorbereitungsphase kompiliert werden, um Binärdateien von dem Sampler zu
generieren, der mittels Shader-Sprache implementiert ist. Bei einer
Ausführungsform
können
eine oder mehrere der Textursampler-Binärdateien von den Shadern 220, 230, 250, 260 und 270 abgerufen werden,
während
die Shader 220 bis 270 aufgerufen werden. Bei
einer Ausführungsform
können
einer oder mehrere der Textursampler 280-A bis 280-K während der
Erzeugung der Shader 220, 230, 250, 260 und 270 während orthogonaler
Sampler-Zustand-Objekt-Erzeugung
oder auf Anfrage zu einem späteren
Zeitpunkt nach der Erzeugungsphase kompiliert werden.
-
Bei
einer Ausführungsform
können
die Textursampler 280-A bis 280-K Operationen
durchführen,
wie z. B. Auflösen
der Detailstufen (level of details, LOD), Bestimmen der Samples,
Auflösen
von Texel-Adressen, Abrufen von Samples und Zusammenführen von
Samples. Bei einer Ausführungsform können die
Operationen der Textursampler 280-A bis 280-K mittels
Shader-Sprache implementiert werden.
-
Bei
einer Ausführungsform
kann das Auflösen
der Detailstufen die MIP-Maps bestimmen, die den Bereich identifizieren,
aus dem Samples ausgewählt
werden sollen. Bei einer Ausführungsform
kann das Auflösen
der Texel-Adressen die Stelle bestimmen, von der die Samples abgerufen
werden sollen. Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K Samplingtechniken,
wie z. B. Point-Sampling, bilineares Sampling, trilineares Sampling
und anisotropes Filtern, unterstützen.
Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K, die mittels
einer Shader-Sprache implementiert sind, um mit dem Sampler-Zustand der Shader 220 bis 270 übereinzustimmen,
die Operationsgeschwindigkeit von Textursampling im Vergleich zu
einem Textursampler, der mittels einer auf einer generischen Software
basierten Textursampling-Technik implementiert ist, verbessern.
-
Bei
einer Ausführungsform
können
die Textursampler 280-A bis 280-K verwendet werden,
um die Textursamples an den Vertex-Shader 220, den Hull-Shader 230,
den Domain-Shader, den Geometrie-Shader 260 und den Pixel-Shader 270 bereitzustellen.
Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K, die mittels
der Shader-Sprache implementiert sind, während Erzeugung des Vertex-Shaders 220 oder
während
der Erzeugung des Sampler-Zustand-Objekts kompiliert werden. Bei
einer Ausführungsform
können
die Textursampler 280-A, 280-B und 280-K von dem Vertex-Shader 220 abgerufen
werden, während
der Vertex-Shader 220 aufgerufen
wird. Bei einer Ausführungsform
können
die Textursampler 280-A und 280-B von dem Hull-Shader 230 abgerufen
werden, während
der Hull-Shader 230 aufgerufen
wird. Bei einer Ausführungsform
kann der Textursampler 280-B von dem Domain-Shader 250 abgerufen
werden, während
der Domain-Shader 250 aufgerufen
wird. Bei einer Ausführungsform
können
Textursampler 280-B und 280-K von
dem Geometrie-Shader 260 abgerufen werden, während der
Geometrie-Shader 260 aufgerufen wird, und die Textursampler 280-B und 280-K können von
dem Pixel-Shader 270 abgerufen werden, während der
Pixel-Shader 270 aufgerufen wird.
-
Solch
ein Ansatz kann einer komplexen Textursampling-Funktion ermöglichen,
als Teil eines Softwarecodes implementiert zu werden, der mit einem
Sampler-Zustand der Shader 220, 230, 250, 260 und 270 übereinstimmen
kann oder mit einem orthogonalen Sampler-Zustand übereinstimmen
kann. Bei einer Ausführungsform
können
die Textursampler 280, die mittels einer Shader-Sprache
implementiert sind, um mit dem Sampler-Zustand der Shader 220, 230, 250, 260 und/oder 270 übereinzustimmen,
die Operationsgeschwindigkeit um einen Faktor N im Vergleich zu
einem Textursampler, der mittels einer auf einer generischen Software
basierten Textursampling-Technik implementiert ist, verbessern. Bei
einer Ausführungsform
können
die Textursampler 280, die mittels der Shader-Sprache implementiert sind,
die Leistung um N = KX im Vergleich zu einer auf einer generischen
Software basierten Textursampling-Technik verbessern, wobei die
Leistung des auf der generischen Software basierten Textursamplings
X ist und K ein positiver ganzzahliger Wert ist.
-
Ein
Ablaufdiagramm 300, das die Textursampler 280 darstellt,
die mittels einer höheren Shader-Sprache
umgesetzt sind, ist in 3 veranschaulicht. Bei Block 310 können die
Textursampler 280-A bis 280-K mittels einer Shader-Sprache
generiert werden. Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K mittels Shader-Sprachen,
wie z. B. Assembler, Cg, HLSL oder GLSL, entwickelt werden. Bei
einer Ausführungsform
können die
Textursampler 280-A bis 280-K offline generiert werden,
beispielsweise während
der Entwicklung eines Treibermoduls.
-
Bei
Block 320 können
die Shader-Sampler, die verwendet werden, um die Textursampler 280-A bis 280-K zu
generieren, zu einer Sampler-Zustand-Objekt-Erzeugungszeit kompiliert werden. Bei einer
anderen Ausführungsform
können
die Shader-Sampler auf Anfrage erzeugt werden. Bei einer Ausführungsform
kann eine spezifische Sample-Operation auf Anfrage erzeugt werden,
wenn beispielsweise die Sample-Operation für einen Zeichenbefehl benötigt würde.
-
Bei
Block 330 können
die Textursampler 280-A bis 280-K mittels eines
höheren
Shader-Compilers in einen Zielmaschinencode kompiliert werden. Bei
einer Ausführungsform
können
die Textursampler 280-A bis 280-K mittels eines
Zielmaschinen-Compilers in einen Zielmaschinencode kompiliert werden. Bei
einer Ausführungsform
können
die Textursampler 280-A, 280-B und 280-K mittels
eines höheren
Vertex-Shader-Compilers in eine Zielmaschine kompiliert werden.
Gleichermaßen
kann einer oder mehr der Textursampler 280-A bis 280-K mittels
eines höheren
Shader-Compilers der Shader 230 bis 270 in einen
Zielmaschinencode kompiliert werden.
-
Bei
Block 340 können
die Shader 220 bis 270 aufgerufen werden. Bei
einer Ausführungsform können die
Shader, wie z. B. der Vertex-Shader 220, der Hull-Shader 230,
der Domain-Shader 250, der Geometrie-Shader 260 und
der Pixel-Shader 270, aufgerufen
werden.
-
Bei
Block 360 können
ein oder mehr Textursampler 280-A bis 280-K von
einem Shader abgerufen werden. Bei einer Ausführungsform können die Textursampler 280-A, 280-B und 280-K in
Antwort auf das Abrufen von dem Vertex-Shader 220 eine Sampling-Operation
durchführen
und können
Textursamples generieren. Bei einer Ausführungsform kann der Hull-Shader 230 die
Textursampler 280-A und 280-B abrufen, der Domain-Shader 250 kann den
Textursampler 280-B abrufen, der Geometrie-Shader 260 kann
die Textursampler 280-A und 280-K abrufen und
der Pixel-Shader 270 kann die Textursampler 280-B und 280-K abrufen.
-
Bei
Block 380 können
die Textursampler 280-A bis 280-K Textursamples
mittels der Texturdaten, die in den Texturpuffern innerhalb des
Speichers 190 gespeichert sind, generieren. Bei einer Ausführungsform
kann der Textursampler 280-A eine Sampling-Operation durchführen, um
Textursamples mittels der Texturdaten, die beispielsweise in einem
oder mehr Texturpuffern 290-C bis 290-F gespeichert
sind, zu generieren. Bei einer Ausführungsform kann der Textursampler 280-B eine
Sampling-Operation durchführen,
um Textursamples mittels der Texturdaten, die in dem Texturpuffer 290-D gespeichert
sind, zu generieren und kann die Textursamples an den Pixel-Shader 270 bereitstellen.
-
Bei
Block 390 können
die Textursamples, die von den Textursamplern 280-A bis 280-K generiert wurden,
von den Shadern 220 bis 270 verwendet werden,
um einen Shadereffekt auf den Grafikelementen zu erzeugen. Bei einer
Ausführungsform kann
der Vertex-Shader 220 einen einzelnen Eckpunktwert empfangen
und einen Shadereffekt auf dem Eckpunkt erzeugen. Bei einer Ausführungsform kann
der Geometrie-Shader 260 ganze Grundelemente empfangen
und kann einen Shadereffekt auf den ganzen Grundelementen erzeugen.
Bei einer Ausführungsform
kann der Pixel-Shader 270 einen Schattierungseffekt auf
den Pixeln oder Punkten (oder Rasterbild) generieren.
-
Eine
Ausführungsform
eines Ablaufdiagramms 400, das das Generieren und Verwenden von
Textursamplern darstellt, die mittels einer höheren Shader-Sprache implementiert
sind, ist in 4 veranschaulicht. Bei einer
Ausführungsform
stellt das Ablaufdiagramm 400 drei Stufen dar – eine Stufe 401,
eine Stufe 411 und eine Stufe 481. Bei einer Ausführungsform
kann Stufe 401 eine Offline-Phase darstellen, die Stufe 411 kann
eine Vorbereitungsphase darstellen und die Stufe 481 kann
eine Renderingphase darstellen.
-
Bei
einer Ausführungsform
kann die Stufe 401 einen Textursampler-Generierungsblock 410 umfassen.
Bei einer Ausführungsform
kann sich der Textursampler-Generierungsblock 410 auf das
Generieren von Textursamplern beziehen, wie z. B. die Textursampler 280-A bis 280-K,
die offline generiert werden können
und mittels einer höheren
Shader-Sprache, wie z. B. Cg, HLSL oder GLSL, wie bei Block 310 beschrieben.
-
Bei
einer Ausführungsform
kann die Stufe 411 Sampler-Zustand-Block 415,
Erzeuge-Sampler-Block 420, Shader-Compiler-Block 445,
Kompiliere-Sampler-Block 450 und Sampler-Shader-Binärdateien-(SS-Bin)-Block 470 umfassen.
Bei einer Ausführungsform
kann der Sampler-Zustand-Block 415 Eingabedatenwerte darstellen.
Bei einer Ausführungsform
können
die Eingabedatenwerte des Blockes 415 die Sampling-Operation
bestimmen, die von dem Textursample von Block 410 durchgeführt wird.
Block 420 stellt einen Erzeuge-Textursampler-Block dar,
der in Antwort auf den Empfang des Textursamplercodes von dem Block 410 und
den Eingabedatenwerten von dem Block 415 einen Textursampler
erzeugt, wie z. B. den 280-A bis 280-K.
-
Block 445 stellt
einen Shader-Compiler-Block dar, der die Shading-Sprache des Textursamplers
auf einer Abstraktionsebene einholen und den Textursamplercode in
eine andere Abstraktionsebene kompilieren kann. Bei einer Ausführungsform
kann der Shader-Compiler-Block 445 den Textursamplercode
von dem Erzeuge-Textursampler-Block 420 einholen und kann
eine Kompilierung des Textursamplercodes einleiten, wie in Kompiliere-Sampler-Shader-Block 450 dargestellt.
-
Bei
einer Ausführungsform
kann der Textursamplercode bei Block 420 mittels einer
höheren Shader-Sprache
erzeugt werden und der Kompiliere-Sampler-Shader-Block 450 kann den Textursamplercode
kompilieren und einen Zwischencode, wie z. B. Assembler-Sprachcode,
generieren. Bei einer Ausführungsform
kann der Kompiliere-Sampler-Shader-Block 450 weiter einen
maschinenspezifischen Shader-Compiler, wie z. B. einen Grafik-Shader-Compiler oder
einen Zentralprozessor-(central processing unit, CPU)-Shader-Compiler
umfassen, der den Zwischencode in Assembler-Sprache in einen maschinenspezifischen
Code kompilieren kann. Bei einer Ausführungsform kann ein Grafikprozessor oder
ein Zentralprozessor das Ausführen
des maschinenspezifischen Codes unterstützen.
-
Block 470 stellt
eine Sampler-Shader-Binärdatei-(SS-BIN)
dar, die als Folge einer Kompilierung, die von dem Block 450 durchgeführt wurde,
erzeugt werden kann. Bei einer Ausführungsform kann die Sampler-Shader-Binärdatei-(SS-BIN)
von den Shadern in der Renderingphase verwendet werden.
-
Bei
einer Ausführungsform
kann die Stufe 481 eine Renderingphase darstellen, in der
die Grafikelemente, wie z. B. die Eckpunkte oder die ganzen Grundelemente,
auf einem Display-Gerät
gerendert werden, nachdem die Shader einen Schattierungseffekt an
die Grafikelemente bereitstellen. Bei einer Ausführungsform kann die Stufe 481 einen
Shader-Aufruf-Block 485, einen Ausführ-Shader-Block 490 und einen
Abruf-SS-BIN-Block 495 umfassen. Bei einer Ausführungsform
kann der Shader-Aufruf-Block 485 Shader aufrufen, wie z.
B. den Vertex-Shader 220, den Hull-Shader 230,
den Domain-Shader 250, den Geometrie-Shader 260 und den Pixel-Shader 270,
wie bei Block 340 dargestellt.
-
Bei
einer Ausführungsform
kann der Ausführ-Shader-Block 490 dafür sorgen,
dass Binärdateien
der Shader 220 bis 270 ausgeführt werden. Bei einer Ausführungsform
kann ein Grafikprozessor ein Ausführen von Binärdateien
der Shader 220 bis 270 unterstützen. Bei einer Ausführungsform
kann der Abruf-SS-BIN-Block 495 die
Binärdateien
von einem oder mehr Textursamplern 280-A bis 280-K abrufen. Bei
einer Ausführungsform,
wenn der Block 490 den Vertex-Shader 220 ausführen kann,
kann der Block 495 den SS-BIN der Textursampler 280-A, 280-B und 280-K abrufen.
Bei einer Ausführungsform,
wenn der Block 490 den Hull-Shader 230 ausführen kann,
kann der Block 495 den SS-BIN der Textursampler 280-A und 280-B abrufen.
Bei einer Ausführungsform, wenn
der Block 490 den Domain-Shader 250 ausführen kann,
kann der Block 495 den SS-BIN des Textursamplers 280-B abrufen.
Bei einer Ausführungsform,
wenn der Block 490 den Geometrie-Shader 260 ausführen kann,
kann der Block 495 den SS-BIN der Textursampler 280-A und 280-K abrufen.
Bei einer Ausführungsform,
wenn der Block 490 den Pixel-Shader 150 ausführt, kann
der Block 495 den SS-BIN von Textursamplern 280-B und 280-K abrufen.
-
Bei
einer Ausführungsform
können
die Textursampler 280-A bis 280-K in Antwort auf
den Empfang eines Abrufs von den Shadern 220 bis 270 eine Textursampling-Operation
an den Texturdaten durchführen
und können
Textursamples generieren. Bei einer Ausführungsform können die
Textursamples von den Shadern verwendet werden, um einen Shadereffekt
auf den Grafikelementen zu erzeugen.
-
Unter
Bezugnahme auf 5 kann ein Computersystem 500 einen
Universalprozessor 502 beinhalten, einschließlich eines
Ein-Befehl-Mehrfache-Daten-(single
instruction multiple data, SIMD)-Prozessors und eines Grafikprozessors
(graphics processor unit, GPU) 505. Der Prozessor 502 kann
bei einer Ausführungsform
neben der Durchführung
verschiedener anderer Tasks Kontrastverbesserungs-Operationen durchführen oder
eine Sequenz von Befehlen speichern, um Kontrastverbesserungs-Operationen
in maschinenlesbarem Speichermedium 525 bereitzustellen.
Die Sequenz von Befehlen kann jedoch ebenfalls in dem Speicher 520 oder in
jedem anderen geeigneten Speichermedium gespeichert werden. Bei
einer Ausführungsform
kann die Grafikapplikationsprogrammschnittstelle (graphics application
program interface, GPI) 510 von dem Prozessor 502 oder
dem GPU 505 unterstützt werden.
-
Während ein
einzelner Grafikprozessor GPU 505 in 5 dargestellt
ist, kann der Prozessor 502 bei einigen Ausführungsformen
verwendet werden, um Kontrastverbesserungs-Operationen durchzuführen, um
ein anderes Beispiel zu nennen. Der Prozessor 502, der
das Computersystem 500 betreibt, kann ein oder mehr Prozessorkerne
sein, die mit Logik 530 gekoppelt sind. Die Logik 530 kann
mit einem oder mehr Eingangs-/Ausgangs-(I/O-Input/Output)-Geräten 560 gekoppelt
sein, die dem Computersystem 500 eine Schnittstelle bereitstellen
können.
Die Logik 530 könnte
beispielsweise bei einer Ausführungsform
Chipsatz-Logik sein. Die Logik 530 ist mit dem Speicher 520 gekoppelt,
der jede Art von Speicher sein kann, einschließlich optischer, magnetischer oder
Halbleiterspeicher. Der Grafikprozessor 505 ist durch einen
Framepuffer mit einem Display 540 gekoppelt.
-
Bei
einer Ausführungsform
kann die Grafikapplikationsprogrammschnittstelle (graphics application
program interface, GPI) 510 innerhalb des Prozessors 502 vorgesehen
sein. Bei einer anderen Ausführungsform
kann die Grafikapplikationsprogrammschnittstelle (graphics application
program interface, GPI) 510 jedoch innerhalb des GPU 505 vorgesehen
sein (gezeigt durch gepunkteten Kasten). Bei einer Ausführungsform
kann die GPI 510 eine 3D-Pipeline unterstützen und
kann Textursampler mittels höherer
Shader-Sprache implementieren.
Bei einer Ausführungsform
kann die GPI 510 die Textursampler 280-A bis 280-K offline
implementieren und mittels höherer
Shader-Sprachen
und den so implementierten Textursamplern 280-A bis 280-K können sie
basierend auf der Zielmaschine kompiliert werden. Bei einer Ausführungsform
können
die Textursampler 280-A bis 280-K von einem oder
mehr Shadern 220 bis 270 abgerufen werden, um
Textursamples zu erhalten. Bei einer Ausführungsform können die
Shader 220 bis 270 die Textursamples, die von
den Textursamplern 280-A bis 280-K generiert
wurden, verwenden, um einen Schattierungseffekt auf den Grafikelementen
zu erzeugen.
-
Die
hierin beschriebenen Grafikverarbeitungs-Techniken können in
verschiedenen Hardware-Architekturen implementiert werden. Beispielsweise
kann Grafikfunktionalität
innerhalb eines Chipsatzes integriert sein. Alternativ kann ein
getrennter Grafikprozessor verwendet werden. Als noch weitere Ausführungsform
können
die Grafikfunktionen durch einen Universalprozessor implementiert
werden, einschließlich
eines Mehrkernprozessors oder als ein Satz von Softwarebefehlen,
die in einem maschinenlesbaren Medium gespeichert sind.